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解释器打开后,运行文件的时候才会产生全局名称空间

局部名称空间:在运行文件的过程中,遇到函数被调用时,就会产生局部名称空间

顺序:内置-->全局-->局部

查找顺序

从文件执行的地方开始查找,查找顺序为:局部-->全局-->内置。

全局作用域

全局有效,全局存活

全局作用域包括内置名称空间和全局名称空间

局部作用域

局部存活

局部作用域只有局部名称空间

原文地址:https://www.cnblogs.com/2222bai/p/11558956.html