一、Python简介
Python是一种高级、解释型、通用的编程语言。它由Guido van Rossum于1989年开始开发,第一个公开发行版发行于1991年。
-
特点
- 简洁易读
- Python代码简洁明了,采用缩进的方式来表示代码块,而不是像其他语言使用大括号。例如,下面是一个简单的Python函数定义:
def greet():print("Hello, World!")
- Python代码简洁明了,采用缩进的方式来表示代码块,而不是像其他语言使用大括号。例如,下面是一个简单的Python函数定义:
- 跨平台性
- 可以在多种操作系统上运行,如Windows、Linux、MacOS等。这使得开发人员可以在自己熟悉的操作系统上编写代码,然后轻松地将代码部署到其他平台上。
- 丰富的库和框架
- Python拥有大量的标准库,涵盖了从文件操作、网络通信到数据处理等各个方面。例如,
os
库用于操作系统相关的操作,像文件和目录管理:import os # 获取当前目录 current_dir = os.getcwd() print(current_dir)
- 除了标准库,还有众多的第三方库,如用于数据分析的
pandas
、用于科学计算的numpy
、用于机器学习的scikit - learn
等。
- Python拥有大量的标准库,涵盖了从文件操作、网络通信到数据处理等各个方面。例如,
- 简洁易读
-
应用领域
- 数据科学与数据分析
- Python在数据处理和分析方面应用广泛。
pandas
库提供了高效的数据结构和数据处理工具,matplotlib
和seaborn
用于数据可视化。例如,使用pandas
读取一个CSV文件并进行简单的数据探索:import pandas as pddata = pd.read_csv('data.csv') print(data.head())
- Python在数据处理和分析方面应用广泛。
- Web开发
- 框架如
Django
和Flask
使Python成为Web开发的有力工具。Django
是一个功能齐全的Web框架,自带数据库管理、用户认证等功能。Flask
则是一个轻量级的Web框架,适合快速开发小型Web应用。# Flask示例 from flask import Flaskapp = Flask(__name__)@app.route('/') def hello():return "Hello, Flask!"if __name__ == '__main__':app.run()
- 框架如
- 人工智能与机器学习
- 是机器学习和深度学习的主要编程语言之一。
scikit - learn
提供了各种传统的机器学习算法,如分类、回归等算法的实现。对于深度学习,TensorFlow
和PyTorch
等框架都有Python接口。例如,使用scikit - learn
进行简单的线性回归:from sklearn.linear_model import LinearRegression import numpy as np# 生成一些示例数据 X = np.array([[1], [2], [3], [4]]) y = np.array([2, 4, 6, 8])model = LinearRegression() model.fit(X, y)print(model.predict([[5]]))
- 是机器学习和深度学习的主要编程语言之一。
- 数据科学与数据分析
二、Python基础语法
-
变量和数据类型
- 变量定义
- 在Python中,不需要显式声明变量的类型。例如,可以直接定义一个变量并赋值:
num = 10 name = "John" is_true = True
- 在Python中,不需要显式声明变量的类型。例如,可以直接定义一个变量并赋值:
- 数据类型
- 整数(int):用于表示整数,如1, 100, - 5等。
- 浮点数(float):表示带有小数点的数字,如3.14, - 0.5等。
- 字符串(str):由字符组成的序列,可以使用单引号或双引号来定义,如'Hello'或者"World"。
- 布尔值(bool):只有
True
和False
两个值,用于表示逻辑判断的结果。 - 列表(list):是一种有序的可变序列,可以包含不同类型的元素。例如:
my_list = [1, 2, 'three', True]
- 元组(tuple):类似于列表,但元组是不可变的。定义方式如下:
my_tuple = (1, 2, 'three')
- 字典(dict):是一种无序的键 - 值对数据结构。例如:
my_dict = {'name': 'John', 'age': 30}
- 集合(set):是一个无序且不包含重复元素的数据结构。可以这样定义:
my_set = {1, 2, 3}
- 变量定义
-
运算符
- 算术运算符
- 包括
+
(加法)、-
(减法)、*
(乘法)、/
(除法)、//
(整除)、%
(取余)和**
(幂运算)。例如:num1 = 10 num2 = 3 print(num1 + num2) # 13 print(num1 - num2) # 7 print(num1 * num2) # 30 print(num1 / num2) # 3.3333333333333335 print(num1 // num2) # 3 print(num1 % num2) # 1 print(num1 ** num2) # 1000
- 包括
- 比较运算符
- 有
==
(等于)、!=
(不等于)、<
(小于)、>
(大于)、<=
(小于等于)和>=
(大于等于)。比较运算的结果是布尔值。例如:num1 = 5 num2 = 3 print(num1 == num2) # False print(num1!= num2) # True print(num1 < num2) # False print(num1 > num2) # True print(num1 <= num2) # False print(num1 >= num2) # True
- 有
- 逻辑运算符
- 包括
and
、or
和not
。例如:is_true1 = True is_true2 = False print(is_true1 and is_true2) # False print(is_true1 or is_true2) # True print(not is_true1) # False
- 包括
- 算术运算符
-
控制结构
- 条件语句(if - else)
- 根据条件执行不同的代码块。例如:
num = 10 if num > 5:print("The number is greater than 5") else:print("The number is less than or equal to 5")
- 还可以使用
elif
(else if)来实现多个条件的判断:num = 7 if num > 10:print("The number is greater than 10") elif num > 5:print("The number is greater than 5 but less than or equal to 10") else:print("The number is less than or equal to 5")
- 根据条件执行不同的代码块。例如:
- 循环语句(for和while)
- for循环:通常用于遍历可迭代对象(如列表、元组、字符串等)。例如,遍历一个列表:
my_list = [1, 2, 3, 4, 5] for num in my_list:print(num)
- 也可以使用
range()
函数来指定循环次数:for i in range(5):print(i)
- while循环:在条件为真时重复执行一段代码。例如:
num = 0 while num < 5:print(num)num = num + 1
- for循环:通常用于遍历可迭代对象(如列表、元组、字符串等)。例如,遍历一个列表:
- 条件语句(if - else)
三、函数和模块
- 函数定义与调用
- 函数定义
- 使用
def
关键字来定义函数。例如,定义一个计算两个数之和的函数:def add_numbers(a, b):return a + b
- 使用
- 函数调用
- 可以在代码的其他地方调用定义好的函数。例如:
result = add_numbers(3, 5) print(result)
- 可以在代码的其他地方调用定义好的函数。例如:
- 函数定义
- 函数参数
- 位置参数
- 按照参数定义的顺序传递参数。例如在
add_numbers
函数中,a
和b
就是位置参数。
- 按照参数定义的顺序传递参数。例如在
- 关键字参数
- 可以通过指定参数名来传递参数,这样参数的顺序就不重要了。例如:
def greet(name, age):print(f"Hello, {name}. You are {age} years old.")greet(age = 30, name = "John")
- 可以通过指定参数名来传递参数,这样参数的顺序就不重要了。例如:
- 默认参数
- 在函数定义时可以为参数指定默认值。例如:
def power(base, exponent = 2):return base ** exponentprint(power(3)) # 9 print(power(3, 3)) # 27
- 在函数定义时可以为参数指定默认值。例如:
- 位置参数
- 模块
- 导入模块
- Python中的模块是包含Python定义和语句的文件。可以使用
import
语句来导入模块。例如,导入math
模块:import math print(math.sqrt(9))
- Python中的模块是包含Python定义和语句的文件。可以使用
- 自定义模块
- 可以创建自己的模块。例如,创建一个名为
my_module.py
的文件,内容如下:def my_function():print("This is my function in my module.")
- 然后在另一个Python文件中导入并使用这个模块:
import my_modulemy_module.my_function()
- 可以创建自己的模块。例如,创建一个名为
- 导入模块
四、数据结构操作
- 列表操作
- 索引和切片
- 可以通过索引访问列表中的元素,索引从0开始。例如:
my_list = [10, 20, 30, 40, 50] print(my_list[0]) # 10 print(my_list[2]) # 30
- 切片用于获取列表的一部分,可以指定起始索引、结束索引和步长。例如:
my_list = [10, 20, 30, 40, 50] print(my_list[1:3]) # [20, 30] print(my_list[::2]) # [10, 30, 50]
- 可以通过索引访问列表中的元素,索引从0开始。例如:
- 列表方法
- append():用于在列表末尾添加一个元素。例如:
my_list = [1, 2, 3] my_list.append(4) print(my_list) # [1, 2, 3, 4]
- extend():用于将一个列表中的元素添加到另一个列表末尾。例如:
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # [1, 2, 3, 4, 5, 6]
- insert():在指定位置插入一个元素。例如:
my_list = [1, 3, 4] my_list.insert(1, 2) print(my_list) # [1, 2, 3, 4]
- remove():删除列表中的指定元素。例如:
my_list = [1, 2, 3, 2] my_list.remove(2) print(my_list) # [1, 3, 2]
- pop():删除并返回列表中的指定元素(如果不指定索引,则删除并返回最后一个元素)。例如:
my_list = [1, 2, 3] last_element = my_list.pop() print(last_element) # 3 print(my_list) # [1, 2]
- append():用于在列表末尾添加一个元素。例如:
- 索引和切片
- 字典操作
- 键 - 值对访问
- 可以通过键来访问字典中的值。例如:
my_dict = {'name': 'John', 'age': 30} print(my_dict['name']) # John
- 可以通过键来访问字典中的值。例如:
- 字典方法
- keys():返回字典中所有的键。例如:
my_dict = {'name': 'John', 'age': 30} print(list(my_dict.keys())) # ['name', 'age']
- values():返回字典中所有的值。例如:
my_dict = {'name': 'John', 'age': 30} print(list(my_dict.values())) # ['John', 30]
- items():返回字典中所有的键 - 值对。例如:
my_dict = {'name': 'John', 'age': 30} print(list(my_dict.items())) # [('name', 'John'), ('age', 30)]
- update():用于更新字典中的键 - 值对。例如:
my_dict = {'name': 'John', 'age': 30} new_dict = {'age': 31, 'city': 'New York'} my_dict.update(new_dict) print(my_dict) # {'name': 'John', 'age': 31, 'city': 'New York'}
- keys():返回字典中所有的键。例如:
- 键 - 值对访问
五、文件操作
- 打开和关闭文件
- 使用
open()
函数打开文件,它接受两个参数:文件名和打开模式(如r
表示只读,w
表示写入,a
表示追加等)。例如:file = open('test.txt', 'r') content = file.read() file.close()
- 使用
- 文件读取和写入
- 读取文件
- 除了
read()
方法外,还可以使用readline()
逐行读取文件内容,或者readlines()
将文件内容按行读取到一个列表中。例如:file = open('test.txt', 'r') line = file.readline() print(line) lines = file.readlines() print(lines) file.close()
- 除了
- 写入文件
- 使用
write()
方法写入文件内容。例如:file = open('test.txt', 'w') file.write("Hello, World!\n") file.close()
- 使用
- 追加文件内容
- 如果要在文件末尾追加内容,可以使用
a
模式打开文件并使用write()
方法。例如:file = open('test.txt', 'a') file.write("This is an additional line.") file.close()
- 如果要在文件末尾追加内容,可以使用
- 读取文件
六、面向对象编程(OOP)基础
- 类和对象
- 类定义
- 使用
class
关键字定义类。例如,定义一个简单的Person
类:class Person:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):print(f"My name is {self.name} and I am {self.age} years old.")
- 使用
- 对象创建
- 可以通过类创建对象。例如:
person1 = Person("John", 30) person1.introduce()
- 可以通过类创建对象。例如:
- 类定义
- 继承
- 定义子类
- 可以定义一个类继承自另一个类。例如,定义一个
Student
类继承自Person
类:class Student(Person):def __init__(self, name, age, grade):super().__init__(name, age)self.grade = gradedef introduce(self):super().introduce()print(f"I am in grade {self.grade}.")
- 可以定义一个类继承自另一个类。例如,定义一个
- 多态性
- 不同的子类可以重写父类的方法,实现多态性。例如:
student1 = Student("Alice", 15, 9) student1.introduce()
- 不同的子类可以重写父类的方法,实现多态性。例如:
- 定义子类
七、异常处理
-
try - except语句
- 在可能出现异常的代码块周围使用
try - except
语句。例如,在进行除法运算时可能会出现除以零的异常:try:num1 = 10num2 = 0result = num1 / num2 except ZeroDivisionError:print("除数不能为零,请重新输入正确的除数。")
- 还可以使用多个
except
块来处理不同类型的异常。例如,当读取文件时可能会出现文件不存在或者权限不足等异常:try:file = open('nonexistent_file.txt', 'r')content = file.read()file.close() except FileNotFoundError:print("文件不存在,请检查文件名是否正确。") except PermissionError:print("没有足够的权限打开文件,请检查权限设置。")
- 可以使用
finally
块来执行无论是否发生异常都需要执行的代码,例如关闭文件或者释放资源:try:file = open('test.txt', 'r')content = file.read() except FileNotFoundError:print("文件不存在。") finally:if 'file' in locals():file.close()
- 在可能出现异常的代码块周围使用
-
自定义异常
- 可以通过继承
Exception
类来创建自定义异常。例如,定义一个表示年龄无效的异常:class InvalidAgeException(Exception):def __init__(self, age):self.age = agesuper().__init__(f"年龄 {age} 无效,年龄必须为正数。")def check_age(age):if age < 0:raise InvalidAgeException(age)else:print(f"年龄 {age} 是有效的。")try:check_age(-5) except InvalidAgeException as e:print(e)
- 可以通过继承
八、迭代器和生成器
-
迭代器
- 迭代器是一个可以记住遍历的位置的对象。在Python中,可迭代对象(如列表、元组、字符串等)都可以使用迭代器来遍历。可以通过
iter()
函数获取一个可迭代对象的迭代器,然后使用next()
函数来获取下一个元素。例如:my_list = [1, 2, 3] my_iter = iter(my_list) print(next(my_iter)) # 1 print(next(my_iter)) # 2 print(next(my_iter)) # 3
- 自定义迭代器需要定义
__iter__()
和__next__()
方法。例如,定义一个简单的数字迭代器:class MyIterator:def __init__(self, limit):self.limit = limitself.current = 0def __iter__(self):return selfdef __next__(self):if self.current < self.limit:result = self.currentself.current += 1return resultelse:raise StopIteration
- 使用自定义迭代器:
my_iter = MyIterator(5) for num in my_iter:print(num)
- 迭代器是一个可以记住遍历的位置的对象。在Python中,可迭代对象(如列表、元组、字符串等)都可以使用迭代器来遍历。可以通过
-
生成器
- 生成器是一种特殊的迭代器,使用
yield
关键字来创建。例如,定义一个生成斐波那契数列的生成器:def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bmy_fib = fibonacci() for i in range(10):print(next(my_fib))
- 生成器函数在执行时,遇到
yield
语句会暂停执行并返回一个值,下次调用时从上次暂停的地方继续执行。这使得生成器在处理大量数据时非常高效,因为它不需要一次性生成所有的数据。
- 生成器是一种特殊的迭代器,使用
九、装饰器
-
装饰器基础
- 装饰器是一种用于修改函数或类的行为的函数。它接受一个函数或类作为参数,并返回一个修改后的函数或类。例如,定义一个简单的装饰器来计算函数的执行时间:
import timedef timer_decorator(func):def wrapper():start_time = time.time()func()end_time = time.time()print(f"函数 {func.__name__} 执行时间为: {end_time - start_time} 秒")returnreturn wrapper@timer_decorator def my_function():time.sleep(2)my_function()
- 在这个例子中,
timer_decorator
就是一个装饰器,它包裹了my_function
函数,在函数执行前后计算时间差并打印出来。
- 装饰器是一种用于修改函数或类的行为的函数。它接受一个函数或类作为参数,并返回一个修改后的函数或类。例如,定义一个简单的装饰器来计算函数的执行时间:
-
带参数的装饰器
- 可以定义带参数的装饰器。例如,定义一个可以指定延迟时间的装饰器:
import timedef delay_decorator(delay):def actual_decorator(func):def wrapper():time.sleep(delay)func()returnreturn wrapperreturn actual_decorator@delay_decorator(3) def another_function():print("函数执行了。")another_function()
- 这里
delay_decorator
是一个带参数的装饰器,它返回一个真正的装饰器actual_decorator
,然后actual_decorator
再修饰another_function
函数。
- 可以定义带参数的装饰器。例如,定义一个可以指定延迟时间的装饰器:
十、高级特性
-
列表推导式
- 列表推导式是一种简洁地创建列表的方式。例如,创建一个包含1到10的平方的列表:
squares = [i ** 2 for i in range(1, 11)] print(squares)
- 还可以使用条件判断在列表推导式中。例如,创建一个包含1到10中偶数的平方的列表:
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0] print(even_squares)
- 列表推导式是一种简洁地创建列表的方式。例如,创建一个包含1到10的平方的列表:
-
字典推导式和集合推导式
- 字典推导式用于创建字典。例如,创建一个以数字为键,数字的平方为值的字典:
squares_dict = {i: i ** 2 for i in range(1, 6)} print(squares_dict)
- 集合推导式用于创建集合。例如,创建一个包含1到10中奇数的集合:
odd_set = {i for i in range(1, 11) if i % 2!= 0} print(odd_set)
- 字典推导式用于创建字典。例如,创建一个以数字为键,数字的平方为值的字典:
-
函数式编程特性
- map函数
map
函数用于对可迭代对象中的每个元素应用一个函数,并返回一个迭代器。例如,将一个列表中的每个元素乘以2:my_list = [1, 2, 3, 4] result = map(lambda x: x * 2, my_list) print(list(result))
- filter函数
filter
函数用于根据一个条件过滤可迭代对象中的元素,并返回一个迭代器。例如,过滤出一个列表中的偶数:my_list = [1, 2, 3, 4] result = filter(lambda x: x % 2 == 0, my_list) print(list(result))
- reduce函数(需要从functools模块导入)
reduce
函数用于对可迭代对象中的元素进行累积计算。例如,计算一个列表中所有元素的乘积:from functools import reduce my_list = [1, 2, 3, 4] result = reduce(lambda x, y: x * y, my_list) print(result)
- map函数