Python3快速入門(五)Python3函數

一、函數定義

1、函數定義

Python 定義函數使用 def 關鍵字,一般格式如下:


def function_name(parameter_list):

    pass

默認情況下,參數值和參數名稱按函數聲明中定義的順序進行匹配。

函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號 ()。

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

函數的第一行語句可以選擇性地使用文檔字符串描述函數說明。

函數內容以冒號起始,並且進行縮進。

函數的定義示例如下:


def add(x, y):

    result = x + y

    return result

2、函數的返回值

函數使用return [表達式] 結束函數,返回一個或多個值給調用方。不帶表達式的return相當於返回 None。

在學習過程中有什麼不懂得可以加我的
python學習資源qun,855-408-893
羣裏有不錯的學習視頻教程、開發工具與電子書籍。
與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容

def get_fruits():

    apple = "Apple"

    banana = "Banana"

    orange = "Orange"

    return apple, banana, orange

a,b,c = get_fruits()

print(a, b, c)

二、函數調用

1、函數調用

函數定義只給了函數一個名稱,指定了函數裏包含的參數和代碼塊結構。

函數調用直接使用定義的函數名稱以及傳遞相應的參數進行調用。

2、函數調用的遞歸限制

Python默認設置了函數的最大遞歸調用次數,開發者可以直接進行設置。設置方法如下:


#!/usr/bin/python3

import sys

sys.setrecursionlimit(100) # 設置最大遞歸次數爲100

三、函數參數

1、必須參數

必須參數是函數調用時必須傳遞的參數。


#!/usr/bin/python3

def add(x, y):

    result = x + y

    return result

add(3, 2)

2、關鍵字參數

關鍵字參數用於函數調用時,使用形式參數關鍵字將實際參數賦值給函數的相應形式參數,函數調用過程中傳遞實際參數順序可以與形式參數順序不匹配,但所有的必須參數必須被賦值。


#!/usr/bin/python3

def add(x, y):

    result = x + y

    return result

add(y=2, x=3)

上述代碼中,add函數的調用傳遞的實際參數通過指定關鍵字參數實際指定相應的形式參數,不必按照形式參數順序匹配,但必須參數都必須被傳遞。

3、默認參數

函數在定義過程中可以爲指定參數默認的值,並且必須參數必須放在默認參數的左側。


#!/usr/bin/python3

def print_student(name, gender="男", age=28):

    print(name)

    print(gender)

    print(age)

print_student("Bauer", "男", 30)

print_student("Lee")

print_student("Lisa","女")

print_student(age=30, name="Bob")

函數調用時,可以使用關鍵字參數對形式參數進行賦值,默認參數可以缺省,但必須參數必須被賦值,必須參數可以使用關鍵字參數賦值。如果必須參數不使用關鍵字參數,則必須參數必須嚴格按照函數定義的順序傳遞,其默認參數可以使用關鍵字參數選擇性賦值,沒有使用關鍵字參數傳遞的默認參數將使用默認值。

4、可變參數

可變參數通過使用*修飾形式參數定義可變參數。

函數定義時,可以定義可變參數,在函數調用時傳遞可變的多個實際參數。


#!/usr/bin/python3

def add(*args):

    result = 0;

    for x in args:

        result += x

    return result

c = add(1, 2, 3, 4)

print(c)

c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(c)

tup1 = 1, 2, 3, 4

c = add(*tup1) # 傳入序列

print(c)

list1 = [1, 2, 3]

c = add(*list1)

print(c)

對應定義了可變參數的的函數,如果需要傳入序列作爲實際參數,需要在序列前加*

如果函數定義時有可變參數和默認參數,函數調用時可以使用關鍵字參數用於指定默認參數。


#!/usr/bin/python3

def add(x, *args, y=100):

    result = x + y;

    for i in args:

        result += i

    return result

c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 155

print(c)

c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, y=10) # 55

print(c)

Python中,如果函數定義時可變參數放在默認參數的左側,則默認參數需要使用關鍵字參數顯式指定。

5、關鍵字可變參數

關鍵字可變參數通過使用**修飾形式參數定義,關鍵字可變參數爲字典類型,關鍵字可變參數屬於可選參數。


#!/usr/bin/python3

def average_score(**args):

    result = 0;

    for key, value in args.items():

        result += value

        print(key + ": ", value)

    result = result / len(args)

    print("Average score is ", result)

    return result

book = {"Bauer": 90, "Bob": 100, "Lisa": 70, "Lee": 100}

average_score(**book)

average_score(Bauer=100, Lisa=70, Lee=100)

函數調用時,關鍵字可變參數可以傳遞多個鍵值對,頁可以直接傳遞dictionary類型變量,此時需要使用**修飾字典變量。

四、匿名函數

python 使用 lambda表達式來創建匿名函數,函數定義如下:

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

Lambda表達式定義的匿名函數的函數體不是一個代碼塊,因此,僅能在lambda表達式中封裝有限的邏輯。

Lambda表達式擁有自己的命名空間,且不能訪問自有參數列表外或全局命名空間裏的參數。

雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。


#!/usr/bin/python3

# -*- coding:utf-8 -*-

sum = lambda arg1, arg2: arg1 + arg2;

# 調用sum函數

print(sum(10, 20))

print(sum(20, 20))

五、變量作用域

程序的所有的變量並不是在任何位置都可以訪問的,訪問權限決定於變量是在哪裏賦值的。變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。

定義在函數內部的變量擁有局部作用域,定義在函數外的擁有全局作用域,代碼塊內部局部變量會覆蓋全局變量,在局部作用域內修改全局變量的值時,需要使用global關鍵字對相應全局變量進行聲明,表明本作用域內使用的是全局變量。

局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。

在學習過程中有什麼不懂得可以加我的
python學習資源qun,855-408-893
羣裏有不錯的學習視頻教程、開發工具與電子書籍。
與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容
#!/usr/bin/python3

# -*- coding:utf-8 -*-

base = 100

def sum(*args):

    global base

    base = 0

    result = 0;

    for i in args:

        result += i

    return result + base;

c = sum(1,2,3,4,5,6,7,8,9,10)

print(c) # 55

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