day12

函数默认值的细节

# 如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值
# 默认参数就是对一个变量的值拷贝,当变量在函数定义之后改变值并不影响默认参数,这是值拷贝的机制

三元表达式 | 列表/字典 推导式

# 三元表达式:用于简化if...else...的语法结构 
# 注意,只能解决if...else...结构, 其他if分支结构不管
# 一个分支提供一个结果,如果一个分支提供了多个结果,返回一个存有多个结果的元组
'''
语法: res = a if a>b else b
三元运算的结果可以通过变量res存起来
'''
列表推导式:快速生成列表的语法糖,能够在生成的过程中添加简单的逻辑
'''
ls = []                   ls = [v for v in range(1,6)]
for v in range(1,6):       ls = [v*2 for v in range(1,6)]
ls.append(v)
print(ls)

注:能被列表推导是推导的数据源必须在循环取值时得到一个值
'''
字典推导式:快速生成字典的语法糖,能够在生成的过程添加简单的逻辑
'''
ls = [['A', 1], ('B', 2)]
res = {k.lower(): v for k, v in ls}
print(res)
注:能被字典推导式推导的数据源必须在循环取值时可以被解压赋值为两个值
'''

函数对象:函数名的各种应用场景

'''
在python中,所有变量存放的值只要式地址,我们就称之为对象
在python中,所有的变量都是用来存放地址的,所以都是地址
存放整型的就是整型对象,存放函数地址的就是函数对象,存放文件地址的就是文件对象
'''
#函数对象()就是调用函数
#函数对象可以直接作为变量赋值给其他变量
#函数对象可以作为函数的参数
#函数对象可以作为函数的返回值
#函数对象可以作为容器类型的成员

名称空间与作用域 (解决变量的重复与冲突问题)

#名称空间就是名字与地址的对应关系,可以被python解释器遍历查找,采用堆栈存储方式
#被指名称空间,全局名称空间,局部名称空间
#文件中的if while for with 这些能产生缩进的关键字斌不能产生名称空间
#加载顺序:内部名称空间 => 全局名称空间 => 局部名称空间

函数的嵌套定义:在函数类型定义函数

#在一个函数内部调用另一个函数
#函数对象(变量)与普通对象(对象)一样,在函数内部定义,随函数调用而产生,调用结束而销毁,所以只能在函数内部调用

作用域:

#作用域:变量(名字|对象)起作用的范围
#四种作用域
#内置作用域:(built-in):作用所有文件的所有地方
#全局作用域:(Global):作用当前文件的所有地方
#嵌套作用域:(Enclosing):作用当前函数和内部被嵌套的函数
#局部作用域:(Local):作用当前函数内部
#不同的作用域之间名字补充突,已达到名字的重用,每个作用域中优先使用自己作用域的名字,没有再找到更大的名称空间的名字,知道内置函数,没有就报错
#查找顺序,先找离自己最近的,得益于堆栈的存储方式
posted @ 2019-04-26 20:59  月薪20k  阅读(103)  评论(0编辑  收藏  举报