10 函数动态参数和命名空间

函数
一. 动态传参
1.只接收位置传参 * 默认*args
def func(*args):
pass
return args #返回一个元组
1.接受所有的 位置参数
2.返回一个元组()
2.只接收关键字传参 ** 默认**kwargs
def func(**kwargs):
pass
return kwargs #返回一个字典
3.传参的顺序:
位置参数>*args>关键字参数>**kwargs
4.*,** 在形参用时,聚合作用;在实参用时,打散作用
def func(*args,**kwargs):
print(args,kwargs)
list1=[1,2,3,4,"r"]
dic={"a":1,"b":2}
func(*list1,**dic)
二.命名空间
1.全局命名空间:我们在py文件中,函数外申明的变量都属于全局命名空间
2.局部命名空间:在函数中生成的变量会放在局部命名空间
3.内置命名空间:存放在python解释器为我们提供名字,list,tuple,str,int 这些都是内置命名空间

加载顺序:
1.内置命名空间
2.全局命名空间
3.局部命名空间
取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间
作用命名空间:
全局作用域:全局命名空间+内置命名空间
局部作用域:局部命名空间
三.locals()和globals()
1.locals() 查看当前作用域中的名字(相对的)
b=1
def chi():
a=3
print(locals()) #查看局部作用域中的内容
print(locals()) #查看当前作用域中的名字

2.globals() 只查看全局作用域中(内置+全局)的内容
a=1
def chi():
pass
print(globals()) #查看全局作用域中(内置+全局)的内容

四.global 和 nonlocal
1.global
1.可以改变全局变量
a=1
def chi():
global a #直接从全局把变量a引进 可以修改全局变量
a=10
chi()
print(a) #10
2.变量在全局不存在时,可以创建全局变量
def chi():
global a #全局变量中没有定义a时,可以用global a 创建全局变量
a=12
chi()
print(a)
2.nonlocal
1.在局部, 引入上一次名字空间中的名字,如果上一层没有继续引入上一层......
2.不能引入全局中的变量
def outer():
a=3
def inner():
nonlocal a
print(a)
print(a)
inner()
print(a)
outer()
#写函数,传入一个参数n,返回n的阶乘
例如:cal(7)  计算7*6*5*4*3*2*1

def cal(n):
    j=1
    for i in range(1,n+1):
        j=j*i
    return j
print(cal(4))

  

posted @ 2018-10-30 21:38  冰底熊  阅读(168)  评论(0编辑  收藏  举报