自定义函数_python3基础07函数(自定义)
"pythonic生物人"的第43篇分享。
詳細介紹python中:自定義函數的構建;參數傳遞;模塊中調用函數。目錄
0、楔子
1、自定義函數格式
2、編寫函數說明文檔
3、函數參數
? 函數形參和實參區別
? 位置實參
? 關鍵字實參
? 默認實參
? 讓實參可選
? 傳遞任意數量的實參
? 結合使用位置實參和任意數量實參
? 使用任意數量的關鍵字實參
4、函數返回值
? 將函數存儲在模塊中并導入新程序中
正文開始啦
0、楔子
函數可以理解為多條語句整合而成的代碼塊,指定特定的名稱, 用于實現具體的功能。函數可以實現代碼更好的復用,是結構化編程的核心。例如,已知圓的半徑r求圓的面積,可以通過如下代碼解決。
import?mathr?=?3
S?=?math.pi*r*r
print(S)
28.274333882308138
但是,當需要求多個圓的面積時,反復寫上面代碼就顯得很繁瑣,這時可以定義一個求圓面積的函數s_circle,每次只需傳入不同圓的半徑,即可計算不同圓面積。
def?s_circle(r):????S?=?math.pi*r*rreturn?S
print(s_circle(3))
print(s_circle(333))
28.274333882308138
348368.06776391855
1、 自定義函數格式
格式如下:
def?fun_name(args):????fun_bodyreturn?xx
fun_name,自定義的函數名;
args,傳入函數的參數;
fun_body,函數體,即函數想實現的功能;return?xx,return結束函數,函數返回值?xx,不指定則返回None。
舉個栗子,定義一個計算圓面積的函數:
def?s_circle(r):#自定義函數s_circle,傳入的參數r。????S?=?math.pi*r*r#函數體return?S????#返回圓的面積S
print(s_circle(3))#函數名()調用函數,括號內為傳入
28.274333882308138
當函數體只有一行時,可以置于def語句同一行。
def?for_multi(x,y):?print(x*y)#函數定義for_multi(10,12)#調用函數
120
2、編寫函數說明文檔
說明文檔置于函數開頭處,作為函數的一部分存儲起來,通過函數名.__doc__可查看說明文檔。
def?s_circle(r):"compute?the?circular?area?with?radius"#函數說明文檔內容????S?=?math.pi*r*rreturn?S
s_circle.__doc__#函數__doc__屬性存儲函數說明文檔
'compute the circular area with radius'
3、函數參數
形參和實參區別
- 形參:定義函數時,函數名稱后面括號里的內容為形參;
- 實參:調用函數時,括號里的內容為實參。
?????print("Hello?%s!"%sb.title())
hello2sb("jack")?#此處jack為調用hello2sb的實參,是調用函數時傳遞給函數的信息。?
Hello Jack!
位置實參
調用函數時按照形參的順序關聯實參。
def?des_sb(name,provice):"""describe?sb"""????print("%s?comes?from?%s."%(name.title(),provice.title()))#title函數返回標題化字符,單詞的開頭為大寫,其余為小寫
des_sb("cao","anhui")
Cao comes from Anhui.
關鍵字實參
形參=實參傳遞參數,無需考慮實參順序。
def?des_sb(name,provice):"""describe?sb"""????print("%s?comes?from?%s."%(name.title(),provice.title()))#無需考慮輸入實參順序,以下兩種輸出一樣
des_sb(name?=?"cao",provice?=?"anhui")
des_sb(provice?=?"anhui",name?=?"cao")#顛倒實參順序
Cao comes from Anhui.
Cao comes from Anhui.
默認實參
定義函數時,給形參一個默認值,調用函數時若提供了實參則使用提供值,否則使用默認值。
def?des_sb(name,provice,dynasty="Three?Kingdoms?Era"):#定義時形參dynasty指定默認值"""describe?sb"""????print("%s?comes?from?%s?of?%s."%(name.title(),provice.title(),dynasty))
des_sb(name?=?"cao",provice?=?"anhui")#形參此處未指定實參,調用默認值
des_sb(name?=?"cao",provice?=?"anhui",dynasty?=?"Qin")#dynasty指定實參,使用實參
Cao comes from Anhui of Three Kingdoms Era.
Cao comes from Anhui of Qin.
**注意:**以上三種參數傳遞方式可以混用,自己最容易理解的調用方式即可。
讓實參可選
指定形參默認值為空字符串,放到所有形參最后,則該形參可空(可以提供實參也可以不用)。
def?return_fullname(firstname,lastname,middlename=""):"""Show?fullname"""if?middlename:????????fullname?=?"?".join((middlename.title()+""+lastname,firstname.title()))else:
????????fullname?=?"?".join((lastname.title(),firstname.title()))return?fullname#返回fullname#調用函數
fullname?=?return_fullname(firstname?=?"cao",lastname?=?"cao")#middlename形參為空
fullname1?=?return_fullname(firstname?=?"cao",middlename?=?"meng",lastname?=?"de")
print(fullname)
print(fullname1)
Cao Cao
Mengde Cao
傳遞任意數量的實參
定義函數時使用:*形參名稱。
def?known_tangera(*heros):#星號(*)使得Python將所有實參存入heros元組中"""show?known?heros?in?tang"""????print(heros)
known_tangera("yuanba?li","shiming?li")
known_tangera("yuanba?li","shiming?li","cheng?nuo")
('yuba li', 'shiming li')
('yuba li', 'shiming li', 'cheng nuo')
結合使用位置實參和任意數量實參
在函數定義中將接納任意數量實參的形參(*形參名)放在最后.。
def?make_pizza(size,?*toppings):"""概述要制作的比薩"""????print("\nMaking?a?"?+?str(size)?+?"-inch?pizza?with?the?following?toppings:")for?topping?in?toppings:#toppings元組存儲任意數量的實參
????????print("-?"?+?topping)
make_pizza(16,?'pepperoni')
make_pizza(12,?'mushrooms',?'green?peppers',?'extra?cheese')
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms -
- green peppers
- extra cheese
使用任意數量的關鍵字實參
定義函數時使用:**形參名稱。
def?build_profile(first,?last,?**user_info):#形參**user_info?中的兩個星號讓Python創建一個名為user_info?的空字典,?#并將收到的所有名稱—值對都封裝到這個字典中。"""創建一個字典,?其中包含我們知道的有關用戶的一切"""????profile?=?{}
????profile['first_name']?=?first
????profile['last_name']?=?lastfor?key,?value?in?user_info.items():
????????profile[key]?=?valuereturn?profile#傳遞
user_profile?=?build_profile('albert',?'einstein',
?????????????????????????????location='princeton',
?????????????????????????????field='physics')
print(user_profile)
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
4、函數返回值
在函數中, 可使用return 語句將值返回到調用函數的代碼行。
將函數存儲在模塊中并導入新程序中
將函數存儲在被稱為模塊的獨立文件(模塊可以理解為以.py結尾的文件)中,再將模塊導入到主程序中。import 語句允許在當前運行的程序文件中使用模塊中的代碼。導入模塊的方法有多種, 下面對每種都作簡要的介紹
- 導入整個模塊
下面創建pizza模塊,pizza.py:
def?make_pizza(size,?*toppings):"""概述要制作的比薩"""????print("\nMaking?a?"?+?str(size)?+"-inch?pizza?with?the?following?toppings:")for?topping?in?toppings:
????????print("-?"?+?topping)
- 在pizza.py所在的目錄中創建另一個名為making_pizzas.py的模塊:
pizza.make_pizza(16,?'pepperoni')#調用pizza模塊中make_pizza函數
pizza.make_pizza(12,?'mushrooms',?'green?peppers',?'extra?cheese')
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
- 導入模塊特定的函數
#從module_name模塊中導入任意數量函數,函數之間逗號分割。
from module_name import function_0, function_1, function_2
making_pizzas.py
from?pizza?import?make_pizza#只導入pizza模塊中的make_pizza函數make_pizza(16,?'pepperoni')#調用pizza模塊中make_pizza函數
make_pizza(12,?'mushrooms',?'green?peppers',?'extra?cheese')
- 導入模塊中的所有函數
使用星號(* ) 運算符可讓Python導入模塊中的所有函數。
from?pizza?import?*#導入pizza模塊所有函數make_pizza(16,?'pepperoni')
make_pizza(12,?'mushrooms',?'green?peppers',?'extra?cheese')
- 使用as 給函數指定別名
mp(16,?'pepperoni')
mp(12,?'mushrooms',?'green?peppers',?'extra?cheese')
- 使用as 給模塊指定別名
p.make_pizza(16,?'pepperoni')
p.make_pizza(12,?'mushrooms',?'green?peppers',?'extra?cheese'
參考資料
Python編程:從入門到實踐Python基礎教程(第3版)
同系列文章python3基礎04字典(dict)和集合(set)python3基礎05布爾類型和比較運算符python3基礎06流程控制語句
原創不易"點贊"、"在看"鼓勵下唄!
總結
以上是生活随笔為你收集整理的自定义函数_python3基础07函数(自定义)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ai电磁组属于什么组_RPA+AI 创新
- 下一篇: centos7建站php_centos7