Python基礎(10):函式

Ryan_Bai發表於2019-02-19

一、標準函式 def

你可以定義一個由自己想要功能的函式,以下是簡單的規則:

  • 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號 ()。

  • 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。

  • 函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。

  • 函式內容以冒號起始,並且縮排。

  • return [表示式] 結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None。

語法:

def <name>(arg1, arg2,...argN):
    <statements>
    return <value>

二、匿名函式 lambda

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

  • lambda 只是一個表示式,函式體比 def 簡單很多。

  • lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

  • lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。

  • 雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。

語法:

lambda [arg1 [,arg2,.....argn]]:expression

例項:

# 可寫函式說明
sum = lambda arg1, arg2: arg1 + arg2;
# 呼叫sum函式
print ("相加後的值為 : ", sum( 10, 20 ))
print ("相加後的值為 : ", sum( 20, 20 ))
相加後的值為 :  30
相加後的值為 :  40

三、return 語句

return 語句用於退出函式,選擇性地向呼叫方返回一個表示式。不帶引數值的return語句返回None。

語法:

return [表示式]

四、作用域

變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。Python的作用域一共有4種,分別是:

  • L (Local) 區域性作用域

  • E (Enclosing) 閉包函式外的函式中

  • G (Global) 全域性作用域

  • B (Built-in) 內建作用域

以 L –> E –> G –>B 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

x = int(2.9)  # 內建作用域
 
g_count = 0  # 全域性作用域
def outer():
    o_count = 1  # 閉包函式外的函式中
    def inner():
        i_count = 2  # 區域性作用域

Python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的程式碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這這些語句內定義的變數,外部也可以訪問

  • 全域性變數和區域性變數

    • 定義在函式內部的變數擁有一個區域性作用域,定義在函式外的擁有全域性作用域。

    • 區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。

  • global 和 nonlocal關鍵字

    當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

    • global

      num = 1
      def fun1():
          global num  # 需要使用 global 關鍵字宣告
          print(num)
          num = 123
          print(num)
      fun1()
       
      以上例項輸出結果:
      1
      123
      
    • nonlocal

      如果要修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數則需要 nonlocal 關鍵字了。

      def outer():
          num = 10
          def inner():
              nonlocal num  # nonlocal關鍵字宣告
              num = 100
              print(num)
          inner()
          print(num)
      outer()
       
      以上例項輸出結果:
      100
      100
      


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2636340/,如需轉載,請註明出處,否則將追究法律責任。

相關文章