python函数的坑

一、默认参数的坑,如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个。



def func(a,list=[]):
   list.append(a)
return list

print(func(10,),id(list)) #[10]
print(func(20,[]),id(list)) #20 [] 这里传了一个空列表,只要传了值,就用传值的。
print(func(100,),id(list)) #[10, 100] 没有传值,故沿用第一个空列表,而第一个空列表在第一次执行时加了一个10.

def func(a,list=[]):
list.append(a)
return list

ret1=func(10,)
ret2=func(20,[])
ret3=func(100,)
print(ret1) #[10, 100] 此组是执行完了func(100,)再打印,故ret1和ret3是同一个列表,值也相同。
print(ret2) # [20]
print(ret3) #[10, 100] 此组是执行完了func(100,)再打印,故ret1和ret3是同一个列表,值也相同。

二。global和nonlocal
# def wrapper():
# count=1
# def inner():
# nonlocal count #内层函数对外层函数的局部变量进行修改用nonlocal。
# count+=1
# print(count)
# inner()
# wrapper()

def func():
global name
name='太白金星'
print(name)
func()
print(name) #使用global在局部申明(创建)了一个全局变量,函数一执行,name就可以打印。
# 但如果注释掉上一句func(),则函数只是加载,没有执行,就会报name错误。
原文地址:https://www.cnblogs.com/qqq789001/p/13363066.html