一、三元运算
把条件成立的结果放左边,条件不成立的放右边
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()
局部调用locals()和globals()
站在全局看,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()
函数嵌套
作用域:每个函数都是一个作用域,作用域链查找是从小到大的顺序。