trim 不是可以识别的 内置函数名称。_年薪百万之路--第十四天 名称空间和作用域...

本文介绍了Python中函数参数的种类及其使用方式,包括位置参数、默认参数、可变参数等,并详细阐述了名称空间的概念,包括其种类、生命周期及名字的查找规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

146a8374ba021add1a0035c47d9515be.png

一 参数内容补充

1. 命名关键字参数

命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数

命名关键字实参必须按照key=value的形式为其传值

def func(x,y,*,a,b): # 其中,a和b称之为命名关键字参数
   print(x,y)
   print(a,b)

func(1,2,b=222,a=111)

2. 组合使用

形参混用的顺序:位置形参,默认形参,*args,命名关键字形参,**kwargs

def func(x,y,z,a,b,c):
    print(x)
    print(y)
    print(z)
    print(a)
    print(b)
    print(c)

二 名称空间

namespacs:存放名字的地方,是对栈区的划分

名称空间分为三种

1 . 内置名称空间

存放的名字:存放的python解释器内置的名字

存活周期:python解释器启动则产生,python解释器关闭则销毁

2 . 全局名称空间

存放的名字:只要不是函数内定义、也不是内置的,剩下的都是全局名称空间的名字
存活周期:python文件执行则产生,python文件运行完毕后销毁

3 局部名称空间


存放的名字:在调用函数时,运行函数体代码过程中产生的函数内的名字
存活周期:在调用函数时存活,函数调用完毕后则销毁

4 名称空间的加载顺序

内置名称空间>全局名称空间>局部名称空间

销毁顺序:

局部名称空间>全局名空间>内置名称空间

5. 名字的查找优先级:当前所在的位置向上一层一层查找(局部名称空间—>全局名称空间->内置名称空间)

input=333

def func():
    # input=444
    print(input)

func()

Python支持函数的嵌套定义,在内嵌的函数内查找名字时,会优先查找自己局部作用域的名字,然后由内而外一层层查找外部嵌套函数定义的作用域,没有找到,则查找全局作用域

PS: 名称空间的"嵌套"关系是以函数定义阶段为准,与调用位置无关

x=1
def func():
   print(x)


def foo():
    x=222
    func()

foo()

三 . 作用域

按照名字作用范围的不同可以将三个名称空间划分为两个区域:

  1. 全局作用域:位于全局名称空间、内建名称空间中的名字属于全局范围,该范围内的名字全局存活(除非被删除,否则在整个文件执行过程中存活)、全局有效(在任意位置都可以使用)
  2. 局部作用域:位于局部名称空间中的名字属于局部范围。该范围内的名字临时存活(即在函数调用时临时生成,函数调用结束后就释放)、局部有效(只能在函数内使用)

四 . locals()和globals()

若要在函数内修改全局名称空间中名字的值,当值为不可变类型时,则需要用到global关键字

x=111

def func():
    global x # 声明x这个名字是全局的名字,不要再造新的名字了
    x=222

func()
print(x)
222

nonlocal(了解): 修改函数外层函数包含的名字对应的值(不可变类型)

x=0
def f1():
    x=11
    def f2():
        nonlocal x
        x=22
    f2()
    print('f1内的x:',x)

f1()
f1内的x: 22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值