Python 函数
函数是一个组织良好的代码块,用于执行单个任务。它们为您的应用程序提供了更好的模块化和可重用性。
函数参数
函数可以接受 参数 和 返回值:
在下面的示例中,函数 say_hello 接收参数 “name” 并打印问候语:
# 定义一个接受一个参数的函数
def say_hello(name):
print(f'Hello {name}')
# 使用字符串参数调用函数
say_hello('Carlos')
Hello Carlos
say_hello('Wanda')
Hello Wanda
say_hello('Rose')
Hello Rose
关键字参数
为了提高代码的可读性,我们应该尽可能明确。我们可以通过使用 关键字参数 在函数中实现这一点:
# 带有多个参数的函数
def say_hi(name, greeting):
print(f"{greeting} {name}")
# 位置参数:顺序很重要
say_hi('John', 'Hello')
Hello John
# 关键字参数:顺序不重要,更具可读性
say_hi(name='Anna', greeting='Hi')
Hi Anna
登录后即可答题并追踪学习进度
返回值
在使用 def 语句创建函数时,您可以使用 return 语句指定返回值是什么。返回语句包括以下内容:
return关键字。函数应返回的值或表达式。
# 使用 return 语句返回一个值的函数
def sum_two_numbers(number_1, number_2):
return number_1 + number_2
# 调用函数并存储返回的值
result = sum_two_numbers(7, 8)
print(result)
15
登录后即可答题并追踪学习进度
returnoutputyieldexit局部和全局作用域
全局作用域中的代码不能使用任何局部变量。
但是,局部作用域可以访问全局变量。
函数的局部作用域中的代码不能使用任何其他局部作用域中的变量。
您可以使用相同的名称定义不同的变量,如果它们位于不同的作用域中。也就是说,可以有一个名为 spam 的局部变量和一个也名为 spam 的全局变量。
# 全局变量:随处可访问
global_variable = 'I am available everywhere'
def some_function():
print(global_variable) # 可以访问全局变量
# 局部变量:仅在此函数内存在
local_variable = "only available within this function"
print(local_variable)
# 这将引发 NameError:local_variable 在全局作用域中不存在
print(local_variable)
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
NameError: name 'local_variable' is not defined
global 语句
如果您需要在函数内部修改全局变量,请使用 global 语句:
# 使用 'global' 关键字从函数内部修改全局变量
def spam():
global eggs # 声明我们将修改全局变量
eggs = 'spam' # 这会更改全局变量
eggs = 'global'
spam() # 函数修改全局变量
print(eggs) # 打印 'spam',而不是 'global'
spam
登录后即可答题并追踪学习进度
nonlocalglobalextern判断变量是在局部作用域还是全局作用域有四个规则:
如果一个变量在全局作用域中使用(即在所有函数之外),那么它总是全局变量。
如果函数中存在该变量的全局语句,则它是全局变量。
否则,如果该变量在函数中的赋值语句中使用,则它是局部变量。
但如果该变量在赋值语句中未使用,则它是全局变量。
Lambda 函数
在 Python 中,lambda 函数是单行、匿名函数,可以有任意数量的参数,但只能有一个表达式。
来自 Python 3 教程
lambda 是一个最小函数定义,可以在表达式中使用。与 FunctionDef 不同,body 包含单个节点。
单行表达式
Lambda 函数只能评估一个表达式,例如单行代码。
这个函数:
# 常规函数定义
def add(x, y):
return x + y
add(5, 3)
8
等同于 lambda 函数:
# Lambda 函数:在一行中定义的匿名函数
# 语法:lambda arguments: expression
add = lambda x, y: x + y
add(5, 3)
8
登录后即可答题并追踪学习进度
与常规嵌套函数一样,lambda 也可以作为词法闭包:
# Lambda 闭包:从外部作用域捕获变量的 lambda 函数
def make_adder(n):
return lambda x: x + n # Lambda 从外部函数捕获 'n'
# 创建添加不同数量的函数
plus_3 = make_adder(3) # 返回一个加 3 的 lambda
plus_5 = make_adder(5) # 返回一个加 5 的 lambda
plus_3(4) # 返回 4 + 3 = 7
7
plus_5(4)
9
登录后即可答题并追踪学习进度