函数的进阶

本节的只要内容

     1.函数参数--动态传参

      2.名称空间,几部名称空间,全局名称空间,作用域,加载顺序.

      3.   函数的嵌套

      4.  gloabal, nonlocal  关键字

一 ,

       函数参数--动态参数

       当在参数不确定是用动态参数,又是形参的第三种:动态参数

      动态参数又分为两种

       1,动态接收位置参数

   固定位置的传参

def chi(quality_food,junk_food):
    print("我要吃",quality_food,junk_food)

chi('大米饭',"小米饭")  #大米饭传递给quality_food
                         #小米饭传递给junk_food
# 按照位置传递
结果
我要吃 大米饭 小米饭

接收任意内容的传参  "*"

def li(*wan):
            print('我要玩',wan)
li('足球','篮球','平棒球')
结果
我要玩 ('足球', '篮球', '平棒球')

      注;      动态接收参数的时候要注意顺序,动态参数要在位置参数的后面

def li(*wan,a,b):
            print('我要玩',wan,a,b)
li('足球','篮球','平棒球')
  
    结果
当位置参数在动态参数的后面时,所输入的参数全被动态参数接收,a,b不会接收到参数
       所以程序会报错
在这里主要强调位置参数与动态参数的先后顺序

当用关键字时a='篮球' b='平棒球'这时候a与b就会有值,从这里知道默认参数是在动态参数的后面
这样的话那么位置参数就是在动态参数的前面,这样位置参数才能得到值

          顺序 :     位置参数.动态参数*.默认值参数

      动态关键字参数

1 def li(**wan):
2             print('我要玩',wan)
3 li(a='足球',b='篮球',c='平棒球')
4 
5 结果
6 我要玩 {'a': '足球', 'b': '篮球', 'c': '平棒球'}
7         
8     这时候输出的结果为一个字典型的

在这个**kwargs的位置顺序:   

  位置参数>*args>默认值>**kwargs       注:   在**kwargs的情况下实参必须用关键字传参

def li(**wan):
            print('我要玩',wan)
li('足球','篮球','平棒球')
   
    结果
Traceback (most recent call last):
  File "F:/qwer/0713课堂.py", line 26, in <module>
    li('足球','篮球','平棒球')
TypeError: li() takes 0 positional arguments but 3 were given
   在这种情况下实参没有用关键字来传参,程序会出现报错

位置参数必须在关键字参数的前面,动态接收关键字参数也要在后面

1 def li(*args,**wan):
2            print('我要玩',args,wan)
3 li('足球','篮球',a='平棒球')
4 结果
5   我要玩 ('足球', '篮球') {'a': '平棒球'}
动态参数的的另一种传递参数
def li(*args):
print('我要玩',args)
li1 = ['你好','在干吗','啦啦']
li(li1[0],li1[1],li1[2])
结果
我要玩 ('你好', '在干吗', '啦啦')
当fun(*lst) #可以使用*把一个列表按顺序打散
s = "你好呀"
# 字符串也是可以打散(可迭代对象)

函数的注释

...

     注释主要是对自己写的程序与变量的解释

 ...

二,命名空间

 1.全局命名空间

2.局部命名空间

3.内置命名空间

    加载的顺序;

                       1.内置命名空间

                        2.全局命名空间

                        3.局部命名空间

      取值顺序:

                         1.局部命名空间

                         2.全局命名空间

                          3.内置命名空间

作用域命名空间:

             全局作用域:    全局命名空间+内置命名空间

              局部作用域:    局部命名空间

三  函数的嵌套

                  1.只要有()存在就是函数的调用,如果没有(就不用函数的调用)

                    2.   函数的执行顺序

四 关键字globals和nonlocal

    首先我们写这样一个代码,首先全局一个变量,然后在局部的调用这个变量,并改变这个变量的值

 

 1 a = 100
 2 def li():
 3     global a    #  global表示.a不再是局部的a了而是全局的a
 4     a = 28
 5     print(a)
 6 li()
 7 print(a)
 8   
 9         结果:
10           28
11           28    

nonloal  :  表示在局部作用域中,调用最近一级命名空间的变量

 1 a = 5
 2 def li():
 3     a = 65
 4     def l1():
 5         nonlocal a
 6         a = 11
 7         print(a)
 8     l1()
 9     print(a)
10 li()
11       结果
12           11
13            11  
14 
15 不加nonlocal
16 
17 
18  a = 5
19 def li():
20     a = 65
21     def l1():
22         a = 11
23         print(a)
24     l1()
25     print(a)
26 li()
27       结果
28           11
29            65

                                        五个英文单词:

                                                           1.nonlocal:表示局部作用域

                                                           2.global:表示全局作用域

                                                           3.**kwargs:表示动态关键字参数

                                                           4. *args:动态接收位置参数     

                                                           5.split:切割

 

posted @ 2019-06-06 17:09  7411  阅读(114)  评论(0)    收藏  举报