day22

可变长参数

*

*形参

用元组加收多余的位置实参

约定俗成形参名为 *args

def f1(*args): # 调用函数时,有多少个参数就接受多少个
    res = 0
    for num in args:
        res += num
    return res

res = sum_self(1,2,3,4)
print(res) # 10      

*实参

打散列表,然后以位置实参传给位置形参

def func(x,y,z,*args):
    print(x,y,z,args)
    
func(1,*(1,2),3,4)
# 1 1 2 (3,4)

**

**形参

用字典接收多余的关键字实参

约定俗成形参名为 **kwargs

def func(**kwargs)
print(kwargs)

func(a=5) # 接收关键字实参 ('a':5)

**实参

打散字典,然后以关键字实参传给位置形参

def func(x,y,z,**kwargs):
    print(x,y,z,kwargs)
    
func(1,3,4,*{'a':1,'b':2}) # 1 3 4 {'a':1,'b':2}

*形参 **形参

接收所有多余的参数

函数的对象

作为函数的返回值

函数对象 == 函数名,变量对象可以做的函数对象也可以

四大功能:

1.引用

2.当作容器类元素

3.当作参数传给一个函数

4.当作函数的返回值

函数嵌套

def 函数名():
    def 函数名():
        pass

外面不能引用内部定义的函数

名称空间与作用域

名称空间

内置名称空间

存放python解释器子弟啊的名字,如int、float、len

生命周期:在解释器启动时生效,在解释器关闭时失效

全局名称空间

出了内置和局部名称空间之外,其余都存放在全局名称空间

生命周期:在文件执行时生效,在文件执行结束后失效

局部名称空间

用于存放函数调用期间函数产生的名

生命周期:在文件执行时调用期间生效,在函数执行结束失效

执行顺序

内置--》局部-》全局

作用域

作用域关系在函数定义阶段就固定死了,与函数的调用无关

全局作用域

全局作用域的x和局部作用域的x没有半毛钱关系,可变数据类型除外

局部作用域

局部作用域1的x和局部作用域2的x没有半毛钱关系

global

局部可以修改全局的

nonlocal

局部的修改外层局部的

legb

posted @ 2019-09-22 21:13  Isayama  阅读(259)  评论(0编辑  收藏  举报