自我总结10

可变长函数

# *形参
def f1(*args):  # 调用函数时,有多少个位置实参,我就接收多少个参数
    print(args)

# *args(约定俗称的),用 元组 接收多余的 位置实参


# **形参
def f1(**kwargs):
    print(kwargs)

# **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)  
# *lt把列表中的元素打散成 位置实参 依次传给位置形参


# **实参
def f1(z, b):
    print(z, b)
dic = {'z': 1, 'b': 2}  # a=1,b=2
f1(**dic)  # **dic把字典打散成 关键字实参 然后传给函数f1

函数对象

# 1. 引用
func = f1
print('f1:', f1)
print('func:', func)

func()

# 2.当作容器类元素
lt = [f1, 1, 2, 3]

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

lt[0]()

# 3. 当作函数参数
def f2(f2_f1):
    print('f2_f1',f2_f1)
    f2_f1()

f2(f1)

print('f1', f1)


# 4. 当作函数的返回值
def f2(f2_f1):
    return f2_f1

函数嵌套

函数里面有函数

def 函数名():
	def 函数名():
		代码块
		
def f1():
    print('from f1')

    def f2():
        print('from f2')
res = f1()

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

名称空间和作用域

名称空间

变量名/函数名---》名称-->名称空间:专门存储名称空间的

内置名称空间:数据类型自带内置方法如:len,list,dict

全局名称空间:除了内置和局部都叫全局

局部名称空间:函数内部定义的都叫局部

执行顺序

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

搜索顺序

先从当前位置寻找,找不到在按照这种顺序,不会逆着方向寻找 局部--》全局--》内置--》报错

作用域

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

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

全部作用域x和局部作用域y没有任何关系

局部作用域1和局部作用域2没有任何关系

# global和nonlocal了解,尽量不要使用

global   让global以下的局部的x变成全局的x
nonlocal 让x成为成为顶层函数的局部,不让他成为全局

所有可变类型可以打破以上规则

posted @ 2019-09-22 23:30  jzm1201  阅读(68)  评论(0编辑  收藏  举报