第十二章:函数对象和名称空间

it2025-10-25  3

函数默认值的细节

如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值a = 100def fn(num=a):    print(num)  # 100a = 200fn()

 

三元表达式:就是if...else...的语法糖

三目运算符:用于简化 if...else...的语法结构     -- 1) 只能解决if...else...结构,其他if分支结构都不管     -- 2)一个分支提供一个结果: 如果一个分支提供了多个结果, 将多个结果通过元组返回​a = int(input('a: '))b = int(input('b: '))res = a if a > b else bprint(res)

 

列表与字典推导式

快速生成列表或字典的语法糖,且能在生成过程中添加简单的逻辑​能被列表推导式推导的数据源必须在循环取值时可以得到一个值ls = [v for v in range(1, 6)]print(ls)  # [1, 2, 3, 4, 5]​ls = ['奇数' if v % 2 != 0 else '偶数' for v in range(1, 6)]print(ls)  # ['奇数', '偶数', '奇数', '偶数', '奇数']​​ 能被字典推导式推导的数据源必须在循环取值时可以被解压赋值为两个值ls = [['A', 1], ('B', 2)]res = {k.lower(): v for k, v in ls}print(res)

 

函数对象

在python中,所有变量存放的值只要是地址,我们就称之为对象      -- 所有的变量都是用来存放地址的,所以都是对象      -- 存放整型的地址就是整型对象 | 存放函数的地址就是函数对象 | 存放文件的地址就是文件对象​函数对象:存放函数地址的变量就是函数对象def fn(): passmy_fn = fnmy_fn | fn都存着函数地址,所以都是函数对象,函数对象的使用就是 函数对象() 来调用函数​​函数对象的应用场景a.函数对象()就是调用函数b.函数对象可以直接作为变量赋值给其他变量c.函数对象可以作为函数的参数d.函数对象可以作为函数的返回值e.函数对象可以作为容器类型的成员​​a.函数对象()就是调用函数def fn1():    passfn1()b.函数对象可以直接作为变量赋值给其他变量def fn2():    passmy_fn = fn2print('>>>', my_fn, fn2)my_fn()c.函数对象可以作为函数的参数def fn3(func):  # func = my_fn = fn2    func()fn3(my_fn)d.函数对象可以作为函数的返回值def fn4():    return my_fnmy_fn2 = fn4()e.函数对象可以作为容器类型的成员ls = [my_fn, my_fn2]

 

 

名称空间

a.名称空间:就是名字与地址的对应关系,可以被Python解释器遍历查找,采用堆栈存储方式​

b. 三种名称空间# Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁

c.Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁

e. Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁​# 注:文件中的if、while、for、with这些能产生缩减的关键字并不能产生名称空间

加载顺序:Built-in > Global > Local​

 

 

函数嵌套定义

概念:在一个函数内部定义另一个函数def outer():    print('outer run')    a = 10函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,调用结束而销毁,所以只能在函数内部调用    def inner():        print('inner run')    inner()outer()

 

 

作用域

作用域:变量(名字|对象)起作用的范围四种作用域a. Built-in:内置作用域:作用所有文件的所有地方b. Global:全局作用域:作用当前文件的所有地方e.Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数d.Local:局部作用域:作用当前函数内部​注:a.不同作用域之间名字不冲突,以达到名字的重用b.每个作用域优先使用自己作用域中的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错查找顺序:Local > Enclosing > Global > Built-in

转载于:https://www.cnblogs.com/haojunliancheng/p/10774179.html

最新回复(0)