python五 函數

函數

在數學中函數就是完成了數字的某項變換,輸入參數,它就可以輸出一個結果。

在編程中,函數同樣也有類似的作用。它的作用也是爲了完成某個功能,當有大量重複代碼時,就可以使用函數來解決,

當需要精簡代碼邏輯時也可以使用函數。

定義函數 

# 函數的一般格式
# 可變參數一定要在位置參數的後面
# 如果可變參數有列表類型的可變參數*args, 還有字典類型的可變參數**args1 那麼*args要在**args1前面
# 如果參數有默認值,那麼該參數應該放在一般參數後面,不定參數前面
# 因爲python是解釋型語言,因此在使用指定函數時,該函數應該已被定義
def fun_name(args0, args1=default_value, *args2, **args3):
    # 函數體
    # 函數返回值
    return ...
# 階乘計算
def jie_cheng(a):
    total = 1
    for i in range(a):
        total *= (i+1)
    return total

函數的參數

python的函數的參數,支持默認參數,支持可變參數

# 階乘計算, 默認爲0的階乘
def jie_cheng(a=0):
    total = 1
    for i in range(a):
        total *= (i+1)
    return total


# 使用可變參數
def info(*args1, **args2):
    for arg1 in args1:
        print(arg1)
    for arg2 in args2:
        print(arg2)
        
info('hello', 'yes', {'name':'china'})

 

函數的管理

當我們有多個函數,或者這引起函數是相關的,共同完成某項功能,那麼這時就可以使用模塊來管理這些函數(模塊可以簡單理解爲是一個文件夾) 

module1:

def func1(a):
    print(a)

def func2(a):
    print(a**2)

module2:

def func3(a):
    print(a)

def func4(a):
    print(a**2)

 要使用這些模塊內的函數,直接用import module_name 就可以了

from moudule1 import * #這種方式容易引起重名
import moudule1 as md #推薦使用這種方式

遞歸函數

函數自己調用自己

注意事項:一定要設置一個遞歸終止條件,防止形成死遞歸

# 階乘計算
def jie_cheng(a=0):
    if a == 0:
        return 1
    return a*jie_cheng(a-1)

變量的作用域

函數外定義的變量,可以在函數內使用

在函數內定義的變量,其作用域爲從定義開始到函數結束 

 

函數變量

當我們定義一個函數後,我們就查使用函數名來調用這個函數

函數名存儲的就是該函數的引用地址,本身也是一個變量

既然函數是一種變量,那麼我們也可以把它作爲一個參數傳遞給另外一個函數 

 

嵌套函數 

 

匿名函數

匿名函數定義規則: lambda 形參:返回值 

 

裝飾器

應用場景:當需要增加某函數的功能,但又不能直接修改源代碼,就可以使用裝飾器了

import time

# 一級裝飾
def use_time(f):
    def wrapper(a, b):
        start = time.time()
        re = f(a, b)
        end = time.time()
        print('總共用時:%d' % (end - start))
        return re
    return wrapper

# 多層裝飾,裝飾時可以帶參數
def type_info(info):
    def wrapper1(f):
        def wrapper2(a, b):
            start = time.time()
            re = f(a, b)
            end = time.time()
            print('%s 總共用時:%d' % (info, end - start))
            return re
        return wrapper2
    return wrapper1

@type_info(info='mc')  # 這個實際上是 func2 = type_info(info, func2)
@use_time              #這個實際上是 func2 = use_time(func2)
def func2(a, b):
    def add(a, b):
        return a + b
    return add(a, b)

func2(2,3)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章