1.函数参数类型
不可变类型参数:整数,字符串,元组
fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身
可变类型参数:列表,字典
将la真正的传过去,修改后fun内部的la也会受影响
2.传递不可变类型参数
def func(a):
a += 3
print(‘函数内部:’,a)
x = 10
func(x)
print(x)
3.传递可变类型参数
def func(a):
a.append(3)
print(a)
x = [1, 2]
func(x)
print(x)
def func(a=[]):
a.append(10)
print(a)
func()
func()
4.命名空间值保存程序中的变量名和值的地方。命名空间的本质是一个字典,用来记录变量名称和值。字典的key是变量的名称,字典的value对赢的是变量的值。
命名空间一共有三种:局部命名空间,全局命名空间,内置命名空间
局部命名空间访问:
locals()
全局命名空间访问:
globals()
5.
a=3
b=4
def func(x):
c=5
d=6
print(locals())
print(globals())
func(6)
6.命名空间加载顺序
内置命名空间->全局命名空间->局部命名空间
7.命名空间查找顺序
当使用某个变量的时候,先从局部命名空间中找,如果找到就停止搜索,如果找不到就去全局命名空间查找,如果找到就停止搜索,找不到就去内置名称命名空间查找,找不到就报错。
8.作用域
作用域指的是定义位置在程序中的可应用范围
作用域按照变量的定义位置可以划分4类即LEGB
Local (函数内部)局部作用域
Enclosing(嵌套函数的外层函数内部)嵌套作用域
Global(模块全局)全局作用域
Built-in(内建)内建作用域
a=3
b=30
c=300
def hsw():
a=4
b=40
def hsn():
a=5
print(a) #L Local 优先使用局部定义变量
print(b) #E Enclosig 局部作用域没有的,寻找嵌套作用域
print© #G Global 嵌套作用域没有的,找全局作用域
print(name) #B Built-in全局作用域没有的,找内置作用域
hsn()
hsw()
10.全局变量和局部变量
在函数中定义的变量成为局部变量,只在函数内部生效
在函数外部定义的变量成为全局变量,全局变量的作用域是从定义开始到程序结束
global和nonlocal关键字
def func():
global a
a+=10
print(a)
a=20
func()
print(a)
def hsw():
a=9
def hsn():
nonlocal a
a=98
print(‘nei bu’,a)
hsn()
print(‘wai bu’,a)
hsw()
12.内置函数
abs(),max(),map(),filter(),zip()lambda函数
13.在定义函数是不想给函数起一个名字,就可以用lambda定义一个匿名函数
语法:
变量名=lambda 参数:表达式
表达式不能包含循环、return,可以有if else
表达式的结果直接返回