函数参数类型
不可变类型参数:整型,字符串,元组。fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
def hanshu(a):
a+=3 #a=a+3
print("函数内部a=",a)
x=10
hanshu(x)
print('x=',x)
可变类型参数:列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会收到影响。
def hanshu(a):
a.append(3)
print(a)
x=[1,2]
hanshu(x)
print(x)
def hanshu(a):
a['name']='李四'
print(a)
x={'name':'张三','age':18}
hanshu(x)
print(x)
命名空间的访问
局部命名空间使用 locals() 函数来访问
全局命名空间的访问使用 global() 函数访问
a=3
b=4
def hanshu(x):
c=5
d=6
print(locals())
print(globals())
hanshu(6)
作用域
作用域指的是变量在程序中的可应用范围
作用域按照变量的定义位置可以划分为4类即 LEGB;
Local(函数内部)局部作用域
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)
Global(模块全局)全局作用域
Built-in(内建)内建作用域。(指的是builtins.py模块)
a=3
b=30
c=300
def hsw():
a=4
b=40
def hsn():
a=5
print(a)
print(b)
print(c)
print(__name__)
hsn()
hsw()
在Python中,模块(module),类(class),函数(def 、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if… . .else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的。
x=18
if x<46:
b=20
print(b)
全局变量和局部变量
在函数中定义的变量称为局部变量,只在函数内部生效。
def hanshu():
b=3
print("函数内部",b)
print(a)
a=6
hanshu()
在函数外部定义的变量称为全局变量,全局变量的作用域从定义开始到程序结束。
def hanahu():
global a
a+=10
print("函数内部",a)
a=20
hanahu()
print("函数外部",a)
全局变量是不可变数据类型,函数无法修改全局变量的值
a=10
def x():
a=8
print(a)
x()
print(a)
全局变量是可变数据类型,函数可以修改全局变量的值
a=10
b=[]
def x():
a=8
print(a)
b=9
x()
print(a)
print(b)