day11 名称空间 作用域
一.三元运算符
def func(a, b):
return a if a > b else b
print(func(44,66))
二:函数注释
def func(a, b):
'''
这个函数是用来计算a和b的和
:param a: 第一个数据
:param b: 第二个数据
:return: 返回的是两个数的和
'''
return a + b
print(func.__doc__) #document 文档
三.命名空间(名称空间)
内置命名空间: 存放python为我们提供的名字
全局命名空间: py文件中, 函数外的变量
局部命名空间: py文件中, 函数内的变量
a = 10
def fn(): # fn也在全局名称空间, 可以认为顶格写的都是全局的
b = 20 # 变量 b 只有在函数调用时, 才会被用到
print(a)
def gn():
print(a)
fn()
gn()
# 名称空间的加载顺序: 内置-> 全局-> 局部
四.作用域: 就是作用范围, 按生效范围来分为
全局作用域: 全局和内置
局部作用域: 局部的
globals() locals()
a = 10
def fn():
b = 20
def en():
c = 30
print(globals()) #可以查看全局作用域中的内容
print(locals()) #查看当前作用域中的内容, 和locals()所在的作用域有关系
a = 10
def fn():
b = 20
def en():
print(globals()) #en 没有被调用, print 没有执行, fn()无结果
print(locals())
fn()
五.函数的嵌套
def outer():
print('i am in outer')
def inner():
print('i am in inner') #可以无限的往下套
inner()
outer()
六.global和nonlocal关键字
global 改全局
a = 10 #全局变量本身不安全, 不能随意修改(闭包可解决此事)
def func():
global a #不写global, 可以使用a, 但是不能改a 的值, 否则报错
a = 20 #在调用func()之后, 1.把全局的a 改成 20 2.创建全局变量 a
func()
print(a)
nonlocal 改上一层,还要有这个变量, 若没有,再往上找, 直到找最后一层, 找不到报错(但是不找全局)
a = 30
def outer():
a = 10 #找的这个,没有则报错
def inner():
nonlocal a
a = 20
inner()
print(a)
outer()
print(a) #全局的不找