python 动态传参,名称空间和作用域,函数的嵌套,global和nonlocal
一、动态传参
1.位置参数动态传参
def func(*args): *表示动态传参
* 在这里表示接受位置参数的动态传参,接收到的是元组。
def fun(*args): print(args) fun('aaa',3,5,6,'ccc') # 结果('aaa', 3, 5, 6, 'ccc')
2.关键字的动态传参
def func(**kwargs):
函数体(代码块)
func(n=7,m="aa"):
**表示接收关键字参数的动态传参,接收到的是字典。
def fun(**kwargs): print(kwargs) fun(name="Tom",age="男",hobby="女") # 结果 {'name': 'Tom', 'age': '男', 'hobby': '女'}
顺序:位置参数 => *arg(arguments)(位参动态传参) => 默认值 => **kwargs(关键字参数)
以上参数可以随意搭配使用
3.函数的注释
def fun():
"""
注释,说明这个函数用来干什么
”“”
print(fun.__doc__) #document文档
def fun(a,b): """ 注释,说明这个函数用来干什么 :param a: :param b: :return: """ return fun(5,6) print(fun.__doc__) #打印出函数的注释
4.接收所有参数
def fun(*args,**kwargs): #无敌传参
pass
*,** 实参位置是打散
*,** 形参位置是聚合
def fun(*args,**kwargs): print(args,kwargs) li = ['r','n','g','w','i','n'] dic = {'name': 'uzi','age':'男','hobby':'adc'} fun(*li,**dic) # 结果 ('r', 'n', 'g', 'w', 'i', 'n') {'name': 'uzi', 'age': '男', 'hobby': 'adc'}
二、命名空间与作用域
1.全局作用域:
全局命名空间,内置命名空间
2.局部作用域:
局部命名空间
globals() 可以查看全局作用域中的内容
locals() 查看当前作用域中的内容
a = 5 # 全局变量 def fun(): a = 10 #局部变量 print(locals()) print(globals()) fun()
函数的嵌套
函数可以相互嵌套
a = 1 def fun(): a = 5 def inner(): a = 10 print(a) inner() print(a) print(a) fun()
global
1.可以把全局中的内容引入到函数的内部
2.在全局创建一个变量
(在函数内部想改变外部的值时会引用,全局变量本身就不安全,不能随意修改)
a = 1 def fun(): global a a += 5 print(a) # 6 print(a) # 1 fun() print(a) # 6
nonlocal
寻找外层函数中离他最近的那个变量
a = 1 def fun(): a = 5 def inner(): nonlocal a a += 5 print(a) # 10 print(a) # 5 inner() print(a) # 10 print(a) # 1 fun() print(a) # 1