您好,登錄后才能下訂單哦!
Python 定義函數使用 def 關鍵字,一般格式如下:
def function_name(parameter_list):
pass
默認情況下,參數值和參數名稱按函數聲明中定義的順序進行匹配。
函數代碼塊以?def?關鍵詞開頭,后接函數標識符名稱和圓括號?()。
任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用于定義參數。
函數的第一行語句可以選擇性地使用文檔字符串描述函數說明。
函數內容以冒號起始,并且進行縮進。
函數的定義示例如下:
def add(x, y):
result = x + y
return result
函數使用return [表達式]?結束函數,返回一個或多個值給調用方。不帶表達式的return相當于返回 None。
def get_fruits():
apple = "Apple"
banana = "Banana"
orange = "Orange"
return apple, banana, orange
a,b,c = get_fruits()
print(a, b, c)
函數定義只給了函數一個名稱,指定了函數里包含的參數和代碼塊結構。
函數調用直接使用定義的函數名稱以及傳遞相應的參數進行調用。
Python默認設置了函數的最大遞歸調用次數,開發者可以直接進行設置。設置方法如下:
#!/usr/bin/python3
import sys
sys.setrecursionlimit(100) # 設置最大遞歸次數為100
必須參數是函數調用時必須傳遞的參數。
#!/usr/bin/python3
def add(x, y):
result = x + y
return result
add(3, 2)
關鍵字參數用于函數調用時,使用形式參數關鍵字將實際參數賦值給函數的相應形式參數,函數調用過程中傳遞實際參數順序可以與形式參數順序不匹配,但所有的必須參數必須被賦值。
#!/usr/bin/python3
def add(x, y):
result = x + y
return result
add(y=2, x=3)
上述代碼中,add函數的調用傳遞的實際參數通過指定關鍵字參數實際指定相應的形式參數,不必按照形式參數順序匹配,但必須參數都必須被傳遞。
函數在定義過程中可以為指定參數默認的值,并且必須參數必須放在默認參數的左側。
#!/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")
函數調用時,可以使用關鍵字參數對形式參數進行賦值,默認參數可以缺省,但必須參數必須被賦值,必須參數可以使用關鍵字參數賦值。如果必須參數不使用關鍵字參數,則必須參數必須嚴格按照函數定義的順序傳遞,其默認參數可以使用關鍵字參數選擇性賦值,沒有使用關鍵字參數傳遞的默認參數將使用默認值。
可變參數通過使用*
修飾形式參數定義可變參數。
函數定義時,可以定義可變參數,在函數調用時傳遞可變的多個實際參數。
#!/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中,如果函數定義時可變參數放在默認參數的左側,則默認參數需要使用關鍵字參數顯式指定。
關鍵字可變參數通過使用**
修飾形式參數定義,關鍵字可變參數為字典類型,關鍵字可變參數屬于可選參數。
#!/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關鍵字對相應全局變量進行聲明,表明本作用域內使用的是全局變量。
局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。
#!/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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。