day9_10
https://www.cnblogs.com/Eva-J/articles/7156261.html
https://www.cnblogs.com/Eva-J/articles/7125925.html
Day9
函数的返回值
无返回值
有返回值
返回多个或一个值。 return 1,2,3 一个元组。
函数的参数:形参和实参
调用函数的时候:位置参数,关键字传参,
定义函数的时候:参数默认值,
动态参数:*args 位置参数,一个元组, **kwargs 关键字参数,一个字典
调用的时候,将序列或字典的参数前加*,来调用。 list1[2,3,1,] fun2(*list1)
args是一个元组,*args是一个散列,打散
kwargs **kwargs同理
顺序:位置参数,**args,默认参数,**kwargs(关键字参数)
默认参数的陷阱问题:
# 如果默认参数的值是一个可变数据类型,
# 那么每一次调用函数的时候,
# 如果不传值就公用这个数据类型的资源
Day10
函数里可以查看全局变量,如果想要修改,则需要加global
# 对于不可变数据类型 在局部可是查看全局作用域中的变量
# 但是不能直接修改
# 如果想要修改,需要在程序的一开始添加global声明
# 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
ask=111
def fun2():
global ask
ask+=1
print(ask)
这两个函数,包含本作用域的变量名字。
#globals 永远打印全局的名字
#locals 输出什么 根据locals所在的位置
print(locals())
print(globals()) 包含内置的名字
#一般这样来解决global的变量使用
# a = 1
# def func(a):
# a = 2
# return a
#
# a = func(a)
# print(a)
函数的调用嵌套
函数定义的嵌套
如果还是想对函数内的不可变的变量的值进行修改,那得用nonlocal进行声明,一层一层的找,直到找到,但不会去全局找。
nonlocal 声明上个作用的变量,跟global类似
函数名是第一类对象
函数名可以赋值,函数名就是变量名
闭包:嵌套函数,内部函数调用外部函数的变量
def outer():
dd="sjkd"
def inner():
print(dd)
print(inner.__closure__)
inner()
outer()
在外部调用内部函数。
一般是这样使用闭包,返回函数名,这样减少内存的开辟、销毁的消耗,因为我们之前想要使用inner,则必须先调用outer。
def outer():
dd="sjkd"
def inner():
print(dd)
print(inner.__closure__)
return inner
funiner=outer()
funiner()
inner.__closure__ 返回的是cell类型,说明是个闭包
posted on 2022-05-09 11:22 castiel_lee 阅读(26) 评论(0) 收藏 举报
浙公网安备 33010602011771号