day10 函数的动态参数 与 命名空间

函数的动态参数:

  动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。

 

 

def trans_para(*args,**kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))
trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"123","c":456},country="china")
 def func(*args):
#     print(args)
# func(1,2,3,4,5,7,8,9,1,2,3,4,5,6,7,8)
#*args 动态参数,万能参数
#args接受的就是实参对应的 所有位置参数,并将其放在元组中。
#形参对应顺序:
#位置参数,*args,默认参数
# def func(a,b,c,d,*args,e='男'):
#     print(a)
#     print(b)
#     print(c)
#     print(d)
#     print(args)
#     print(e)
# func(1,2,3,4,5,6,7,e='女')
#**kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。
# def func(a,b,c,**kwargs):
#     print(kwargs)
# func(1,2,r=4,b1=5,c1=6,c=7,)

# def func(a,b,c,d,*args,e='男',**kwargs):
#     print(a)
#     print(b)
#     print(c)
#     print(d)
#     print(args)
#     print(e)
#     print(kwargs)
# func(1,2,3,4,5,6,7,v=3,m=7,h=9,e='女')
# 最终顺序:位置参数,*args,默认参数,**kwargs

# def func1(*args,**kwargs):
#     pass
# func1()

# * 魔法运用
# def func(*args):
#     print(args) #(1,2,30,1,2,33.。。。。。)
# l1 = [1,2,30]
# l2 = [1,2,33,21,45,66]
# tu = (1,2,3)
# func(1,2,30,1,2,33,21,45,66)
# func(*'qweqrfdsaf')
# func(*{'name':'alex',"age":12})
# func(*l1,*l2)
# def func(*args):
#     print(args)
# func(1,2,3,10,20,80)

# def func(**kwargs):
#     print(kwargs)
#
# dic1 = {'name1':'alex','age1':46}
# dic2 = {'name':'老男孩','age':56}
# func(**dic1,**dic2)

# 在函数的调用执行时,
#   *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。
#  **字典,代表打散,将所有键值对放到一个kwargs字典里。

# 在函数定义时, *args,**kwargs代表的是聚合。
# def func(*args,**kwargs):
#     print(args)
#     print(kwargs)
#
# dic1 = {'name1':'alex','age1':46}
# dic2 = {'name':'老男孩','age':56}
# func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)

def func(*args,**kwargs):
    #args = (1,2,3,4)
    #kwargs = {'age': 56, 'name': '老男孩'}
    # print(*args)
    # print(**kwargs) #(age = 56 ,name = 老男孩)
# dic1 = {'name1':'alex','age1':46}
# dic2 = {'name':'老男孩','age':56}
# # func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)
# func(**dic2)

名称空间  临时名称空间

 

 

 a = 4
# b = 3
# c = [1,2,3,4]
# c1 = {'name':'alex'}
#
# def func1():
#     name = '老男孩'
#     print(name)
# func1()
#当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,
# 随着函数的执行完毕,临时空间自动关闭。
#input(),print(),len 内置函数

# name = '老男孩'
# def func1():
#     name = 'taibai'
#     print(name)
# func1()
# def my_len(argv):
#     return 666
# print(len([12,3,]))
a = 2
print(a)
def func1():
    age = 11
    print(age)
func1()

字典的嵌套

 

 

 函数什么时候执行? 函数调用的时候执行。
# 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。
# print(111)
# def func1():
#     print(333)
#
# def func2():
#     print(444)
#
# def func3():
#     print(555)
#     func2()
#
# func1()
# print(222)
# 111 333 222

# print(111)
# def func1():
#     print(333)
#     func2()
#     print(666)
#
# def func2():
#     print(444)
#
# def func3():
#     print(555)
#
# func1()
# print(222)
# 111 333 444 666 222


# print(111)
# def func1():
#     print(333)
#     func2()
#     print(666)
#
# def func2():
#     print(444)
#     func3()
#
# def func3():
#     print(555)
#
# func1()
# print(222)
# 111 333 444 555 666 222

# a = 2
# b = 3
# def func1():
#     c = 5
#     d = 6
#     print(globals())  # 全局变量放在一个字典中
#     return locals()  # {'c': 5, 'd': 6}
# print(func1())

# print(globals())  # 全局名称空间:所有变量
# print(locals())  # 局部名称空间:所有变量
 函数什么时候执行? 函数调用的时候执行。
# 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。
# print(111)
# def func1():
#     print(333)
#
# def func2():
#     print(444)
#
# def func3():
#     print(555)
#     func2()
#
# func1()
# print(222)
# 111 333 222

# print(111)
# def func1():
#     print(333)
#     func2()
#     print(666)
#
# def func2():
#     print(444)
#
# def func3():
#     print(555)
#
# func1()
# print(222)
# 111 333 444 666 222


# print(111)
# def func1():
#     print(333)
#     func2()
#     print(666)
#
# def func2():
#     print(444)
#     func3()
#
# def func3():
#     print(555)
#
# func1()
# print(222)
# 111 333 444 555 666 222

# a = 2
# b = 3
# def func1():
#     c = 5
#     d = 6
#     print(globals())  # 全局变量放在一个字典中
#     return locals()  # {'c': 5, 'd': 6}
# print(func1())

# print(globals())  # 全局名称空间:所有变量
# print(locals())  # 局部名称空间:所有变量

 

关键字 global,nonlocal

 

 

global
# 1,在局部空间内,声明一个全局变量
# def func1():
#     global name
#     name = '老男孩'
#     print(name)
# func1()
# print(name)
# 2,在局部空间内改变一个全局变量
a = 4
def func1():
    global a
    a = 5
    # print(name)
func1()
# print(a)

#nonlocal
# 1,不能修改全局变量。

# a = 4
# def func1():
#     nonlocal a
#     a = 5
#     # print(name)
# func1()
# print(a)
#在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
# 并且引用的哪层,从那层及以下此变量全部发生改变。
# a = 4
# def func1():
#     b = 6
#     def func2():
#         b = 666
#         print(b) #666
#     func2()
#     print(b) # 6
#
# func1()

# b = 4
# def func1():
#     global b
#     b = 6
#     def func2():
#         nonlocal b
#         b = 666
#         print(b) #
#     func2()
#     print(b) #
# print(b)
# func1()
View Code

 

posted @ 2018-03-29 14:13  Coca-Mirinda  阅读(211)  评论(0)    收藏  举报