函数嵌套 动态运算符 名称空间
三元运算符:
# 变量 = 条件成立的结果 条件判断 条件不成立的结果
a = 30
b = 20
c = a if a > b else b
print(c)
1.函数的动态参数
*args,**kwargs (能够接受动态的位置参数和动态的关键字参数)
定义阶段(*args,**kwargs) 聚合
*args - tuple
**kwargs -- dict
使用阶段*args,*kwargs 打散
*args - 源数据类型
*kwargs - 打散是字典的键
优先级: 位置 > 动态位置> 默认 > 动态关键字
lst = [12,23,3,4,5,6]
def func(*args):
print(*args)
func(lst[0],lst[1]) # 笨的办法
func(*lst)
dic = {"key":1,"key1":34}
def func(**kwargs):
print(kwargs)
func(**dic)
2.函数的注释
"""
每次写函数的时候需要写注释
函数名.__doc__
"""
3.名称空间
内置空间: Python解释器自带的
全局空间: 当前文件(.py文件)
局部空间: 函数体开辟的空间
加载顺序: 内置 > 全局 > 局部
取值顺序: 局部 > 全局 > 内置
作用域:
全局作用域: 内置 + 全局
局部作用域: 局部
4.函数嵌套
函数中套函数
函数嵌套调用
函数嵌套参数的传递
函数嵌套返回值的传递
5.global nonlocal
global 秀爱全局空间的变量对应的值
nonlocal 在外层的函数中,修改局部空间的变量值,完全不干涉全局变量
# 只修改离它最近的一层,醉的一层没有变量继续向上找,直到找到找到最外层函数
6.三元运算符
a = 10
b = 20
c = a if a > b else b
1.函数的动态参数
def func(a, b=1):
print(a, b)
func(1)
*args
def func(a, b, *args): # *args 是万能(接受任意多个)的未知参数 *在函数定义的时候叫做聚合
print(a, b, args)
func(1, 2, 3, 4, 5, 6)
def func(a, b, *args): # *args 是万能(接受任意多个)的未知参数 *在函数定义的时候叫做聚合
print(a, b, *args)
func(1, 2, 3, 4, 5, 6)
未知参数 > 动态位置参数 > 默认参数
def func(*args, a=1, b=2):
print(a, b, args) # 元组(接受的位置参数)
func(12, 23, 43, 54, 654)
*kwargs
def func(a, b, **kwargs):
print(a, b, kwargs) # 字典(接受的关键字的参数)
func(12, 21, f=3)
def func(a, b, *args, c=1, d=2):
print(a, b, *args, c, d)
func(1, 2, 3, 4)
def func(a, b, *args, c=1, d=2, **kwargs):
print(a, b, *args, c, d, kwargs) # *kwargs -- 获取到的字典的键
func(1, 2, 3, 4, c=8, d=10, e="alex", f="wusir")
综合
def func(*agrs, **kwargs): # 万能传参
print(agrs, kwargs)
func(1, 2, 3, 4, 5, 6, 7, 8, a=1, b=2, c=3)
总结
# 参数的优先级: 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数
# 1.万能参数; 动态位置参数,关键字参数(最常用***********)
# 2.未知参数,动态位置参数
# 3.动态位置参数,关键字参数,动态关键字参数
2.函数的注释
def func(a,b):
"""
逻辑判断...
:param a: str
:param b: int
:return: bool
"""
print(a,b)
def func1(user,password):
"""
密码加密
:param user: 用户名 str
:param password: 密码 str
:return: 加密的密码 MD5
"""
print(user,password)
print(func.__doc__)
print(func1.__doc__)
print(func.__name__)
3.名称空间
print(11)
a=10
def func():
b = 20
print(b)
内置空间: print input len
全局空间: 当前.py文件需要开辟的空间存放在全局空间
局部空间: 函数中开辟的空间就是局部空间
加载顺序:
内置空间 > 全局空间 > 局部空间
取值顺序:
局部空间 > 全局空间 > 内置空间(找不到就报错了!)
作用域:
全局作用域: 内置空间 + 全局空间
局部作用域: 局部空间
4.函数的嵌套
def func():
print(1)
def f1():
print(2)
return f1()
func()
不管在什么位置,只要是函数名+() 就是在跳用此函数
函数调用执行后,函数重新开辟的空间就自动销毁
def func():
a = 1
def foo():
b = 2
print(b) # 2
print(a) # 1
def f1():
print(b) # 2
return f1()
return foo()
print(func())
函数的调用
def func():
a = 1
foo()
print(a)
def foo():
b = 2
print(b)
func()
def a():
a1 = 1
c()
print(c)
def b():
b1 = 2
print(b1)
def c():
c1 = 3
print(a)
def run():
a()
run()
def func():
a = 1
def b():
print(a)
def foo():
b = 1
def z():
print(func)
print(b)
ret = z()
func()
return ret
def run():
foo()
print(run())
def func(a):
foo(a) #10
def foo(e):
b(e) # return 10
def b(c):
print(c)
return 10
print(func(5))
5.gloabal,nonlocal
def func():
global a # 声明修改全局变量的值
a += 1
print(a)
func()
print(a)
a = 10
def f1():
a = 10
def f2():
a = 15
def f3():
global a
a += 1
print(a) # 11
print(a) # 15
f3()
print(a) # 10
f2()
f1()
a = 10
def func():
def f1():
global a
a += 1
def foo():
nonlocal a
a += 1
print(a) # 31
foo()
print(a) # 31
f1()
func()
print(a) # 10
总结
global : 修改全局空间的变量对应的值
nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数