今日所学:
函数默认值:
如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值
a = 100
def fn(num=a):
print(num) # 100
a = 200
fn()
三元表达式:只能解决if...else...结构,其他if分支结构都不管
-- 2)一个分支提供一个结果: 如果一个分支提供了多个结果, 将多个结果通过元组返回
列表与字典推导式
快速生成列表或字典的语法糖,且能在生成过程中添加简单的逻辑
能被列表推导式推导的数据源必须在循环取值时可以得到一个值 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(): pass my_fn = fn # my_fn | fn都存着函数地址,所以都是函数对象,函数对象的使用就是 函数对象() 来调用函数
函数对象的应用场景
1.函数对象()就是调用函数
2.函数对象可以直接作为变量赋值给其他变量
3.函数对象可以作为函数的参数
4.函数对象可以作为函数的返回值
5.函数对象可以作为容器类型的成员
1.函数对象()就是调用函数 def fn1(): pass fn1()
2.函数对象可以直接作为变量赋值给其他变量 def fn2(): pass my_fn = fn2 print('>>>', my_fn, fn2) my_fn()
3.函数对象可以作为函数的参数 def fn3(func): func = my_fn = fn2 func() fn3(my_fn)
4.函数对象可以作为函数的返回值 def fn4(): return my_fn my_fn2 = fn4()
5.函数对象可以作为容器类型的成员 ls = [my_fn, my_fn2]
函数嵌套定义
概念:在一个函数内部定义另一个函数
def outer():
print('outer run')
a = 10
函数对象(变量)与普通对象(变量)一样,在函数内部定义,随函数调用而产生,
调用结束而销毁,所以只能在函数内部调用
def inner():
print('inner run')
inner()
outer()
作用域
作用域:变量(名字|对象)起作用的范围
四种作用域 # Built-in:内置作用域:作用所有文件的所有地方
Global:全局作用域:作用当前文件的所有地方
Enclosing:嵌套作用域:作用当前函数已内部被嵌套函数
Local:局部作用域:作用当前函数内部
注: 不同作用域之间名字不冲突,以达到名字的重用 每个作用域优先使用自己作用域中的名字,没有再找更大的名称空间的名字,直到内置,还没有就报错
查找顺序:Local > Enclosing > Global > Built-in