10-函数进阶

函数的动态传输

  *args:动态接受参数(万能参数):

    接受的就是实参对应的所有位置参数。并将其放在元组中
    形参对应顺序:
      形参角度:
        位置参数,*args,关键字参数
        位置参数,*args,关键字参数 **kwargs
   *的作用:
     在函数的调用中
       *可迭代对象 代表解包,或打散。(lsit,tuple,str,dic(只有键)),将元素意义添加到args。

       **字典,代表打散,将所有的键值对放到一个kwargs的字典中

       在函数的定义时, *args 代表的是聚合,**kwargs代表的是聚合。

 

    **kwargs:动态传参,只接受关键字参数(非位置对应的)并将它放在一个字典中。

1 def test1(w,**kwargs):
2     print(kwargs)
3 test1(1,q= 0,l =0)
4 
5 def test2(a,b,c,d,e,*args,f = 6):
6     print(a,b,c,d,e,f,args)
7 test2(1,2,5,6,9,7,4,3,6,5,2,f =12)

def func(*args):
print(*args) #(1,2,30,1,2,33.。。。。。)
l1 = [1,2,30]
l2= [1,2,33,21,45,66]
func(*l1,*l2)

加载顺序与取值顺序:
  加载顺序:
    内置名称空间--->全局名称空间--->(函数执行时)局部名称空间。
  取值顺序:
    (函数执行时)局部名称空间--->全局名称空间--->内置名称空间

全局作用域,局部作用域:
  全局作用域:全局名称空间、内置名称空间
  局部作用域:局部作用域

函数的嵌套:

  函数的嵌套主要在于逻辑,每当遇到函数调用函数时,函数才会执行,否则,函数不会执行。

 1 def test1():
 2     print(8)
 3     def test2():
 4         def test3():
 5             print(6)
 6             return True
 7         print(7)
 8         test3()
 9     test2()
10     print(1)
11 test1()

 

 

loals(),golbals():
  golbals():全局名称空间:所有变量

  loals():局部名称空间:所有变量
    将局部变量整合到字典当中,可以返回给函数调用者使用。

 1 a = 1
 2 b = 5
 3 def test4():
 4     c = 2
 5     d = 4
 6     print(globals())
 7     print(locals())
 8 
 9 test4()
10 
11 
12 
13 输出结果:
14     globals输出全局变量:
15 {'test4': <function test4 at 0x000001AF0B4DE950>, 'b': 5, '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001AF0B416B38>, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__cached__': None, 'a': 1, '__file__': 'E:/Programming/python11/day10/关键字.py'}
16   locals输出局部变量(函数体之内的变量):
17 {'c': 2, 'd': 4}

 


nonlocal,golbal:
  nonlocal:
    >不能修改全局变量
    >在局部作用域中,对父级作用域(或者更外层作用域非全局变量)的变量

 1 a = 5
 2 def test6():
 3     b = 7
 4     def test7():
 5         a = 200
 6         b = 500
 7         def test8():
 8             nonlocal a
 9             nonlocal b
10 
11             a = 12
12             b = 44
13             print(a,b)
14 
15         test8()
16         print(a, b)
17     test7()
18     print(b)
19 test6()
20 print(a)
21 
22 
23 输出结果:
24 12 44
25 12 44
26 7
27 5

 

 

 


  golbal:
    >在局部空间内建立\声明一个全局变量。

1 def test5():
2     global name
3     name = 'cat'
4     print(name)
5 
6 
7 test5()
8 print(name)

 


    >在局部变量中修改全局变量

1 name = 'kuoiea'
2 def test5():
3     global name
4     name = 'cat'  #改变全局变量
5     print(name)
6 
7 print(name) #先打印出kuoiea
8 test5()
9 print(name) #打印cat

 

posted @ 2018-03-29 19:05  kuoiea  阅读(189)  评论(0)    收藏  举报