day11总结

一、可变长参数

*形参

调用函数时,用元组接收多余的位置实参

def f1(*args): 一般约定俗成用args来做形参的变量名
print(args)

**形参

调用函数时,用字典接收多余的关键字实参

def f1(**kwargs): # 一般约定俗成用kwargs来做*形参的变量名
print(kwargs)

*实参

传参时,把列表中的元素打散成位置实参然后依次传给位置形参

def f1(a, b, c, e, d, f, g):
print(a, b, c, e, d, f, g)
lt = [1, 2, 3, 4, 5, 6, 7]
f1(*lt)

**实参

传参时,把字典中的元素打散成关键字实参然后依次传给位置形参

def f1(z, b):
print(z, b)

dic = {'z': 1, 'b': 2} # a=1,b=2
f1(**dic)

二、函数对象

python中一切皆对象

函数也是一种对象

函数对象 = 函数名

函数名+() 就是在调用,就是在调用

引用(拷贝)

def f1():
    print('from f1')  

func = f1
print('f1:', f1)
print('func:', func)

func()

容器元素

def f1():
    print('from f1')

lt = [f1, 1, 2, 3]

print('lt[0]', lt[0])
print('f1', f1)

lt[0]()

作为函数的实参

def f1():
    print('from f1')   

def f2(f2_f1):
    print('f2_f1',f2_f1)
    f2_f1()

f2(f1)

作为函数的返回值

def f1():
    print('from f1')     

def f2(f2_f1):
    return f2_f1


res = f2(f1)  # 即res = f1
print('res', res)
print('f1', f1)

res()

三、函数嵌套

函数嵌套 :函数里面有函数

定义函数时,只检测语法,不会执行代码

函数内部定义的函数,外部不能用

四、名称空间和作用域

名称空间的执行(生成)顺序

  1. 内置内置名称空间:python解释器启动的时候就有了
  2. 全局名称空间:执行文件代码的时候才会有全局
  3. 局部名称空间:函数调用的时候才会有局部

搜索顺序

先从当前所在位置寻找,找不到再按照这种顺序,不会逆着方向寻找

局部 --》 全局 --》 内置 --》 报错

名称空间

内存中专门用来储存名称的空间

内置名称空间

储存了内置方法的名称的空间

全局名称空间

除了内置和局部都叫全局

局部名称空间

函数内部定义的都叫局部

作用域

全局作用域

内置名称空间+全局名称空间 = 全局作用域

局部作用域

局部名称空间 = 局部作用域

局部作用域的特点

  1. 全局作用域的 x 和局部作用域的 x 没有半毛钱的关系
  2. 局部作用域1的x和局部作用域2的x也没有任何关系,即使局部作用域1和局部作用域2再同一个局部作用域下

猜你喜欢

转载自www.cnblogs.com/zhm-cyt/p/11566905.html