目录
一、推导式:
Python 推导式是一种非常强大且简洁的构建数据结构的方法,它允许你使用一行代码来创建列表、字典、集合和生成器。推导式不仅代码量少,而且执行效率高,是 Python 编程中常用的特性之一。
(1)列表推导式
列表推导式用于创建列表,格式为:
[expression for item in iterable if condition]
expression
是对每个元素进行的操作。item
是从iterable
中依次取出的元素。iterable
是一个序列。condition
是一个可选的条件表达式。
示例代码:
# 创建一个包含0到9的列表,每个元素加3
numbers = [x + 3 for x in range(10)]
print(numbers) # 输出: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
(2)字典推导式:
字典推导式用于创建字典,格式为:
{key_expression: value_expression for item in iterable if condition}
key_expression
和value_expression
分别是字典的键和值。item
是从iterable
中依次取出的元素。
示例代码:
# 创建一个字典,键是数字,值是数字的平方
squares = {x: x**2 for x in range(6)}
print(squares) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
(3)集合推导式:
集合推导式用于创建集合,格式为:
{expression for item in iterable if condition}
expression
是对每个元素进行的操作。item
是从iterable
中依次取出的元素。
示例代码:
# 创建一个集合,包含0到9的数字
numbers_set = {x for x in range(10)}
print(numbers_set) # 输出: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
(4)生成器表达式:
生成器表达式用于创建生成器,格式为:
(expression for item in iterable if condition)
expression
是对每个元素进行的操作。item
是从iterable
中依次取出的元素。
示例代码:
# 创建一个生成器,生成0到9的数字
numbers_gen = (x for x in range(10))
print(list(numbers_gen)) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(5)总结:
推导式是 Python 中一种非常有用的语法结构,它允许以一种简洁和高效的方式创建和操作数据结构。列表、字典、集合和生成器推导式各有其用途,可以根据需要选择使用。使用推导式时,应注意保持代码的可读性,避免过度复杂的表达式。
二、 迭代器和生成器:
Python 中的迭代器和生成器是处理数据集合的强大工具,它们提供了一种高效的方式来访问和生成数据序列。
(1)迭代器(Iterator):
- 迭代器是一个实现了迭代器协议的对象,即含有
__iter__()
和__next__()
方法的对象。迭代器从集合的第一个元素开始访问,直到所有元素被访问完毕。迭代器只能向前移动,不能后退。
(2)迭代器的创建:
- 通过内置的
iter()
函数,可以将列表、元组、字典等可迭代对象转换成迭代器。 - 自定义类实现
__iter__()
和__next__()
方法,使其成为迭代器。
(3)示例代码:
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
value = self.data[self.index]
self.index += 1
return value
else:
raise StopIteration
# 使用自定义迭代器
my_data = [1, 2, 3, 4, 5]
my_iter = MyIterator(my_data)
for value in my_iter:
print(value)
(4)生成器(Generator):
- 生成器是一种特殊的迭代器,它通过使用
yield
语句来产生值。生成器允许你定义一个函数,该函数的行为类似于迭代器,但更加简洁和高效。
(5)生成器的优势:
- 节省内存:生成器在每次迭代时只产生一个值,而不是一次性生成整个数据集合。
- 易于编写:使用
yield
语句可以轻松创建生成器。
(6)示例代码:
def my_generator():
for i in range(5):
yield i
# 使用生成器
gen = my_generator()
for value in gen:
print(value)
(7)生成器表达式:
- 生成器表达式是列表推导式的一个变体,它使用圆括号而不是方括号,并返回一个生成器。
(8)示例代码:
# 生成器表达式
gen_expr = (x * 2 for x in range(5))
for value in gen_expr:
print(value)
(9)总结:
- 迭代器和生成器是 Python 中处理序列数据的强大工具。迭代器提供了一种标准的方式来访问集合中的元素,而生成器则允许你以一种高效和内存友好的方式产生数据序列。生成器表达式进一步简化了生成器的创建过程,使得生成数据序列更加简洁。
三、 函数:
在Python中,函数是执行特定任务的代码块。你可以定义自己的函数,也可以使用Python提供的内建函数。下面将详细介绍Python函数的各个方面。
(1)定义函数:
- 在Python中,定义函数使用
def
关键字,后跟函数名、括号(可能包含参数)和冒号。函数体必须缩进。
(2)基本语法:
def 函数名(参数列表):
函数体
return [表达式]
(3)示例代码:
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # 输出: Hello, Alice!
(4)参数:
函数参数允许你向函数传递数据。
- 必需参数:调用函数时必须提供的参数。
- 关键字参数:调用时可以按任意顺序提供,只要指定了参数名。
- 默认参数:在定义函数时指定默认值,如果调用时未提供,则使用默认值。
- 不定长参数:允许你传递任意数量的参数。
(5)示例代码:
def power(base, exponent=2):
return base ** exponent
print(power(3, 3)) # 输出: 27
print(power(3)) # 输出: 9,使用默认指数2
(6)不定长参数:
使用星号(*
)定义不定长参数。
*args
:接收多个位置参数,作为元组。**kwargs
:接收多个关键字参数,作为字典。
(7)示例代码:
def make_points(x, y, **kwargs):
print("x =", x)
print("y =", y)
for key, value in kwargs.items():
print(f"{key} = {value}")
make_points(1, 7, shape='circle', size=5)
(8)匿名函数(Lambda函数):
使用lambda
关键字创建匿名函数,通常用于短暂的、不需要复用的小函数。
语法:
lambda 参数列表: 表达式
参数
:可以是一个或多个,多个参数间用逗号分隔。表达式
:必须是一个表达式,不能包含语句。
特点:
- 匿名性:
lambda
函数没有名称。 - 简洁性:适用于简单的函数定义,通常只有一行。
- 使用场景:常用于函数参数传递,如
map()
、filter()
、reduce()
等。
示例代码:
sum = lambda x, y: x + y
print(sum(5, 3)) # 输出: 8
返回值:
- 使用
return
语句从函数返回一个值。如果没有return
语句,函数默认返回None
。
示例代码:
def add(a, b):
return a + b
result = add(5, 8)
print(result) # 输出: 13
(9)参数传递
Python函数参数传递方式:
- 不可变类型(如整数、字符串、元组):按值传递。函数内修改参数不会影响原始数据。
- 可变类型(如列表、字典):按引用传递。函数内修改参数会影响原始数据。
示例代码:
def modify_list(input_list):
input_list.append(3)
my_list = [1, 2]
modify_list(my_list)
print(my_list) # 输出: [1, 2, 3]