python -- 函數進階

1、函數參數-動態傳參
 
    一、形參:
 
       *   在形參位置, 表示此參數爲不定參數,接受的是位置參數
           而且接收到的位置參數的動態傳參都是元組
def func(* jiemu): # 在形參這裏把接受過來的實參進行聚合,集合成一個元組
print(jiemu)

func('奇葩說','知識就是力量','老梁說故事','吐槽大會')

#  結果:('奇葩說', '知識就是力量', '老梁說故事', '吐槽大會')
 **   在形參表示動態傳參 -- 關鍵字參數
            關鍵字動態參數,接收到的是字典
def func(**tianqi): # 聚合, ** 聚合成字典
print(tianqi)

# func(1,2,3,4,5) # 位置參數或報錯, func() takes 0 positional arguments but 5 were given
func(today='晴天', tomorrow='大晴天', yesterday='陰天')
# 結果:{'today': '晴天', 'tomorrow': '大晴天', 'yesterday': '陰天'}
順序
 
位置   *args   默認值   **kwargs      ,能夠隨意搭配,必須按照順序來
# 無敵參數
def func(*args,**kwargs):     # argument  參數   key argument   關鍵字參數
print(args,kwargs)

func('a','b',1,2,3,f='小熊',g = '小虎')

# 結果:('a', 'b', 1, 2, 3) {'f': '小熊', 'g': '小虎'}

 

二、實參 
 
   *   在實參是打散,把列表,元組,字符串打散成位置參數進行傳遞
def eat(*food):
print(food)

eat(*"你今天吃了什麼")

# 結果:('你', '今', '天', '吃', '了', '什', '麼')

 **  在形參表示動態傳參 -- 關鍵字參數; 打散,打散成關鍵字 python

def tianqi(**day):  # 聚合,聚合字典
print(day)

dic = {'today':'晴天','tomorrow':'要下雪',}   # 打散,打散關鍵字
tianqi(**dic,abs= '仍是要下雪')

# 結果:{'today': '晴天', 'tomorrow': '要下雪', 'abs': '仍是要下雪'}
2、做用域和名稱空間
 
     一、名稱空間:用來存放名字(變量,函數名,類名,引入的模塊名)
 
        一、全局名稱空間:咱們在py文件中本身寫的變量,函數,類,
        二、內置名稱空間:咱們python解釋器提供好的一些內置內容(print,imput,list,tuple,str,int...)
        三、局部名稱空間:在函數中聲明的變量會放在局部命名空間
            
        名稱空間可能會有無數個,和局部名稱空間是相對獨立的,通常互不干擾
 
         加載順序:一、內置命名空間  二、全局命名空間 三、局部命名空間(函數被調用的時候)
         取值順序:一、局部命名  二、全局命名空間  三、內置命名空間
 
        從全局中去找局部  -》找不到
        從局部去找全局 -》 能夠找到
        
        二、做用域
 
            做用域就是做用範圍,按照生效範圍來看分爲全局做用域和局部做用域
 
            一、全局做用域:包含內置命名空間和全局命名空間,在整個文件的任何位置均可以使用
            二、局部做用域:局部命名空間,在函數內部使用
 
              經過 globals()函數來查看全局做用域中的內容,也能夠經過locals()來查看局部做用域中的變量和函數信息
a = 10
def func():
a = 20
c = 30
def abc():
print('who are you?')
print(a,c) # 這裏使用的是局部做用域
print(globals()) # 打印全局做用域中的內容
print(locals()) # 打印局部做用域中的內容

func()

 3、函數的嵌套 函數

def func1():
    print(1)
    def func2():
        print(2)
        def func3():
            print(3)
        func3()
     print(4)
     func2()
     print(5)

func1()

4、關鍵字global和nonlocal spa

a = 10
def func2():
a = 20
print('內部的:',a)

func2()
print('外部的:',a)

# 內部的: 20
# 外部的: 10

  global表示,再也不使用局部做用域中的內容了,而改用全局做用域中的變量 code

# 全局變量通常是不能隨意改變得
a = 10
def func2():
    # 慎用
    global a # 表示從全局把一個變量引到局部,後面使用的a都是全局變量
    a += 20 # 如今a 是全局變量,在試圖改全局變量
    print('內部的:',a)

func2()
print('外部的:',a)

# 內部的: 30
# 外部的: 30

   在局部引入一個全局變量,若是這個變量在全局不存在,global會自動建立一個全局變量blog

def func():
    global a  # 建立一個全局變量
    a = 10
print(a)
func()
print(a)

 

nonlocal 表示在局部做用域中,調用父級命名空間(離它最近的一個)中的變量 作用域

相關文章
相關標籤/搜索