函数
info
API的行为在任何两个连续版本之间不得以不兼容的方式更改,除非它正在经历弃用过程。不能在任何两个连续版本之间在没有通知的情况下删除功能。
函数
为了减少重复,自定义函数登场。
def
使用 def 关键字定义函数。参数为输入,return 返回输出。
def add(a, b):
"""
add two nums
:param a: first num
:param b: second num
:return: None
"""
print(a + b)
调用函数时传入具体参数值。
# Python并没有限定参数的类型,因此可以使用不同的参数类型:
print(add(2, 3))
print(add('foo', 'bar')) # foobar
参数传递方式:位置参数和关键字参数。
add(a=2, b=3)
add(b='morning', a='good')
add(2, b=3) # 5
return
return 语句返回值并终止函数执行。无 return 时返回 None。
def add(a, b):
return a + b
def add_none(a, b):
a + b
print(add(2, 3)) # 5
print(add_none(2, 3)) # None
yield
info
生成器让Python能够以内存高效的方式处理大量数据。它们实现了惰性求值,只在需要时计算值,体现了Python对性能和内存使用的关注。
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
yield 暂停函数执行并返回值。使用 yield 的函数称为生成器函数,返回生成器对象。适用于逐个产生大量数据的场景。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
yield from 委派子生成器,建立双向通道。
def g1(x):
yield range(x, 0, -1)
yield range(x)
print(list(g1(5)))
#[range(5, 0, -1), range(0, 5)]
def g2(x):
yield from range(x, 0, -1)
yield from range(x)
print(list(g2(5)))
#[5, 4, 3, 2, 1, 0, 1, 2, 3, 4]
tip
生成器表达式:使用圆括号创建生成器对象,内存效率更高。
(expression for item in iterable)
示例:
# 创建生成器
squares_gen = (x**2 for x in range(10))
print(type(squares_gen)) # <class 'generator'>
# 迭代生成器
for square in squares_gen:
print(square, end=' ') # 0 1 4 9 16 25 36 49 64 81
lambda
lambda 创建匿名函数,语法简洁。
def add(a, b):
return a + b
# 等价于
add = lambda a, b: a + b
print(add(2, 3)) # 5