1. 程式人生 > >13、函數

13、函數

python函數 else語句 else 重用 第三方 區分 快速 return 表達式

函數

  • 函數就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給它取一個名字。

  • 可以通過函數名在程序的不同地方多次執行(這通常叫做函數調用),卻不需要在所有地方都重復編寫這些語句。

自定義函數

  • 用戶自己編寫的

預定義的Python函數

  • 系統自帶的一些函數,還有一些和第三方編寫的函數,如其他程序員編寫的一些函數,對於這些現成的函數用戶可以直接拿來使用。

為什麽使用函數

  • 降低編程的難度
    • 通常將一個復雜的大問題分解成一系列更簡單的小問題,然後將小問題繼續劃分成更小的問題,當問題細化為足夠簡單時,我們將可以分而治之。這時,我們可以使用函數來處理特定的問題,各個小問題解決了,大問題也就迎刃而解了。
  • 代碼重用
    • 我們定義的函數可以在一個程序的多個位置使用,也可以用於多個程序。此外,我們還可以把函數放到一個模塊中供其他程序員使用,同時,我們也可以使用其他程序定義的函數。這就避免了重復勞動,提供了工作效率。

函數定義和調用

  • 當我們自己定義一個函數時,通常使用def語句,其語法形式如下所示:

    def 函數名 (參數列表): #可以沒有參數函數體
    
    def add(a, b):
        print a + b
  • 調用函數的一般形式是:

    函數名(參數列表)
    
    add(1, 2)

形式參數和實際參數

  • 在定義函數時函數後面圓括號中的變量名稱叫做“形式參數”,或簡稱為“形參”

  • 在調用函數時,函數名後面圓括號中的變量名稱叫做“實際參數”,或簡稱為“實參”

缺省參數(默認參數)

  • 默認參數只能從右至左給定,如果需要第一個參數給默認值,其他參數不給,那麽把第一個參數移到最後一個即可。

    def add(a, b = 2):
        print a + b
    
    add(3)                  #result : 5

局部變量和全局變量

  • Python中的任何變量都有其特定的作用域。

  • 在函數中定義的變量一般只能在該函數內部使用,這些只能在程序的特定部分使用的變量我們稱之為局部變量。

  • 在一個文件頂部定義的變量可以供該文件中的任何函數調用,這些可以為整個程序所使用的變量稱為全局變量。

    x = 100         #全局變量,可以在文件任何地方調用
    
    def func():
        x = 200     #局部變量,只能在函數內部調用
        print x
    
    func()          #輸出200
    print x         #輸出100

global語句

  • 強制聲明為全局變量

    x = 100
    
    def func():
        global x    #強制聲明x為全局變量,導致值被覆蓋
        x = 200
    
    func()
    print x         #輸出200

函數返回值

  • 函數被調用後會返回一個指定的值

  • 函數調用後默認返回None

  • return返回值

  • 返回值可以是任意類型

  • return執行後,函數終止

  • 區分返回值和打印

    def add(a, b):
        return a + b
    
    ret = add(1, 2)     #將函數返回結果賦值給變量ret
    print ret           #輸出3

向函數傳入元組和字典

  • func (*args)

    def func(x, y):
        print x, y
    
    t = (1, 2)
    func(*t)
  • func (**kw)

    def func(name='jack', age=30):
        print name,age
    
    d = {'age': 22, 'name' : 'mike'};
    func(**d)

處理多余實參

  • def func(*args, **kw)

    def func(x, *args, **kw):
        print x
        print args
        print kw
    
    func(1, 2, 3, 4, 5, y=10, z=20)
    
    #輸出
    1
    (2, 3, 4, 5)
    {'y': 10, 'z': 20}

lambda表達式

  • 匿名函數
    • lambda函數是一種快速定義單行的最小函數,是從Lisp借用來的,可以用在任何需要函數的地方。

      lambda x,y:x*y
    • 使用Python寫一些執行腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡。
    • 對於一些抽象的,不會別的地方再復用的函數,有時候給函數起個名字也是個難題,使用lambda不需要考慮命名的問題。
    • 使用lambda在某些時候讓代碼更容易理解。

lambda基礎

  • lambda語句中,冒號前是參數,可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函數對象

    g = lambda x:x**2
    print g
    <function <lambda> at 0x0000000002643A58>

lambda應用實例

  • reduce為逐次操作list裏的每項,接收的參數為2個,最後返回的為一個結果。

    sum = reduce(lambda x,y:x*y, range(1,6))
    print sum

switch語句

  • switch語句用於編寫多分支結構的程序,類似與if...elif...else語句。
  • switch語句表達的分支結構比if...elif...else語句表達的更清晰,代碼的可讀性更高。
  • 但是python並沒有提供switch語句

switch實現

  • python可以通過字典實現switch語句的功能。
  • 實現方法分為兩步
    • 首先,定義一個字典
    • 其次,調用字典的get()獲取相應的表達式

函數調用

  • 通過字典調用函數

    def add(a, b):
        return a + b
    
    def sub(a, b):
        return a - b
    
    def mul(a, b):
        return a * b
    
    def div(a, b):
        return a / b
    
    operator = {'+': add, '-': sub, '*': mul, '/': div}     #通過字典實現switch語句的功能
    
    def calc(a, o, b):
        return operator.get(o)(a, b)
    
    print calc(4, '+', 2)
    print calc(4, '-', 2)
    print calc(4, '*', 2)
    print calc(4, '/', 2)

13、函數