Day 11 可变长函数/函数对象/函数嵌套/名称空间和作用域
可变长函数
*实参
在函数调用时传入带*的实参时,会把*后的参数循环取出,打散成位置实参
*形参
以元组的形式存储多余的接收的位置实参,然后将元组赋值给*后的参数
需要注意的是:*后的参数名约定俗成为args
**实参
在函数调用时传入带**的实参时,会把**后的参数循环取出,打散成关键字参数
**形参
以字典的形式存储多余的接收的关键字实参,然后将字典赋值给**后的参数
需要注意的是:**后的参数名约定俗成为kwargs
函数对象
引用
def func():
print('123')
f = func
print(f)
<function func at 0x0024F8E8>
容器
def func():
print('123')
lt = [func]
print(lt[0])
<function func at 0x001CF8E8>
参数
def f1():
print('123')
def f2(x):
f1()
f2(f1)
123
返回值
def f1():
print('123')
def f2(x):
return f1()
f2(f1)
123
函数的嵌套
函数的嵌套定义
def f1():
def f2():
print(1)
f2()
1
函数的嵌套调用
def min(x, y):
if x > y:
return y
else:
return x
print(min(1, min(5, 6)))
1
名称空间和作用域
内置名称空间
存放python解释器自带的名字,如len,list
生命周期:在解释器启动时生效,在解释器关闭时失效
全局名称空间
除了内置名字和局部的名字以外,其余都放在全局名称空间
生命周期:在文件执行时生效,在文件执行结束后失效
局部名称空间
用于存放函数调用期间函数体产生的名字
生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效
加载顺序
内置名称空间:python解释器打开的过程中内置名称空间就已经产生了
全局名称空间:在python解释器打开后,运行文件的时候才会产生全局名称空间
局部名称空间:在运行文件的过程中,遇到函数被调用时,就会产生局部名称空间
顺序:内置-->全局-->局部
查找顺序
从文件执行的地方开始查找,查找顺序为:局部-->全局-->内置。
全局作用域
全局有效,全局存活
全局作用域包括内置名称空间和全局名称空间
局部作用域
局部存活
局部作用域只有局部名称空间