在Python中,不同的函数可以具有相同的参数名。在函数中已经声明过变量名,在函数外还可以继续使用。在脚本运行的过程中,其值并不相互影响。
def fun1(x): # 声明一个函数
a = [1] # 定义一个名为 a 的列表
a.append(x)
print(a)
fun1(2) # 调用函数,输出函数中列表的值
a = [2, 3, 4] # 在函数外定义一个名为 a 的列表值
print(a) # 输出函数中名为 a 的列表值
注:函数调用结果和直接输出结果的值是不一样的。
上述代码中,两个同名的列表之所以值不同,是因为它们处于不同的作用域里。在Python中,作用于可以分为内置作用域、全局作用域和局部作用域。
内置作用域——是Python预先定义的
全局作用域——是所编写的整个脚本
局部作用域——是在某个函数内部范围
上述代码中,函数中的列表 a 处于局部作用域中。而函数外的列表 a 处于全局作用域内。局部作用域内变量的改变并不影响全局作用域内的变量,除非通过引用的形式传递参数。
在函数中使用函数外的变量,可以在变量名前使用 global 关键字,如下:
def fun( x ): # 声明函数
global a # 使用 global 关键字声明全局变量
return a + x
a = 5 # a 为全局变量,即 fun 函数中的 a
print(fun(3)) # 输出调用函数的值
a = 2 # 修改 a 的值
print(fun(3)) # 再次输出调用函数的值
两次输出结果: