一、三元运算
把条件成立的结果放左边,条件不成立的放右边
res = a if 1>2 else b
二、命名空间
全局命名空间:创建的存储“变量名与值的关系”的空间叫做全局命名空间。文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入全局名称空间。
局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间。
内置命名空间:内置在python解释器中,拿过来就能使用的叫做内置命名空间。
三种命名空间之间的加载顺序和取值顺序:
加载顺序:内置---->全局---->局部---->内置
取值:在局部调用:局部命名空间--->全局命名空间----->内置命名空间
在全局调用:全局---->内置----->局部
使用:
全局不能使用局部的,局部的可以使用全局的。
三、作用域:作用范围
python中函数就是一个作用域,局部变量放置在其作用域中
代码定义完成后,作用域已经生成,作用域链向上查找
1、命名空间和作用域的分不开的
2、作用域分为两种
全局作用域:全局命名空间与内置命名空间的名字都属于全局范围,在整个文件的任意位置都能被引用,全局有效。
局部作用域:局部命名空间,只能在局部范围内生效。
3、站在全局看
使用名字的时候:如果全局有使用全局的。如果全局没有,用内置的。
4、使用作用域的好处
函数内的变量不会影响到全局。
5、globals方法:查看全局作用域的名字[print(globals())]
locals方法:查看局部作用的名字[print(locals())]
def func(): a = 12 b = 20 print(locals()) print(globals()) func()
站在全局看,globals is locals
global关键字:强制转换为全局变量。
name = "Alex" def change_name(): global name name = "peiqi" print("after change", name,id(name)) change_name() print("在外面看看name改了么?", name,id(name))
names = ['alex','peiqi','egon'] #大的整体,小的元素,字典,列表,set def change_names(): # del names[2] names[0] = 'Jack' print(names,id(names)) change_names() print(names,id(names))
age = 44 def func1(): # age = 33 # print(age) global age def func2(): # age = 22 print(age) age = 66 func2() #如果把age=22 去掉查找到的是两个33,一层一层的往外找 func1() print(age)
作用域链
age = 18 def func(): age = 19 def func1(): # age = 20 print(age) return func1 val = func() val()
函数名的本质就是函数的内存地址
def func(): print('func') print(func)#指向了函数的内存地址
四、函数名可以用作函数的参数
def func(): print('func') def func2(f): f() print('func2') func2(func)
函数嵌套定义
'''1、函数内部可以再次定义函数。2、执行需要被调用''' def func(): print("from func") def func_1(): print("from func_1") return func_1() func()
作用域:每个函数都是一个作用域,作用域链查找是从小到大的顺序。