可以在函数体内访问全局变量,但是要对其进行修改,我们首先必须声明 global var_name 才能更改全局变量。
def foo1():
x = number # 全局变量只能在这里访问
print('number in function:', x)
number = 0
foo1()
# 修改全局变量
def foo2():
global number # 现在可以访问和修改全局变量
number = 3
print('number before foo2(): ', number)
foo2() # 修改全局变量
print('number after foo2(): ', number)
number in function: 0
number before foo2(): 0
number after foo2(): 3
如果我们不写 global var_name 并给与全局变量同名的变量赋一个新值,这将在函数内创建一个局部变量。 全局变量保持不变。
number = 0
def foo3():
number = 3 # 这是局部变量
print('number before foo3(): ', number)
foo3() # 不会修改全局变量
print('number after foo3(): ', number)
在本文中,我们将详细讨论函数形参(parameters)和函数实参(arguments)。 我们将学习:
*args
和**kwargs
)形参和实参之间的区别
位置和关键字参数
我们可以将参数作为位置参数或关键字参数传递。 关键字参数的一些好处可能是:
默认参数
函数可以具有带有预定义值的默认参数。 可以忽略此参数,然后将默认值传递给函数,或者可以将参数与其他值一起使用。 注意,必须将默认参数定义为函数中的最后一个参数。
变长参数(
*args
和**kwargs
)*
)标记参数,则可以将任意数量的位置参数传递给函数(通常称为*args
)**
)标记参数,则可以将任意数量的关键字参数传递给该函数(通常称为**kwargs
)。强制关键字参数
有时你想要仅使用关键字的参数。 你可以执行以下操作:
*,
,则此后的所有参数都必须作为关键字参数传递。拆包成参数
*
)拆包为参数。**
)的参数,其长度和键与函数参数匹配。局部变量与全局变量
可以在函数体内访问全局变量,但是要对其进行修改,我们首先必须声明
global var_name
才能更改全局变量。如果我们不写
global var_name
并给与全局变量同名的变量赋一个新值,这将在函数内创建一个局部变量。 全局变量保持不变。参数传递
Python使用一种称为“对象调用”或“对象引用调用”的机制。必须考虑以下规则:
这意味着:
对于可变类型,请小心使用
+=
和=
操作。 第一个操作对传递的参数有影响,而后者则没有: