寫在前面
函數(shù)是組織好的、可重復(fù)使用的列牺,用來實現(xiàn)特定功能的代碼段整陌。通過函數(shù)的定義與使用能夠提高代碼的復(fù)用性、減少重復(fù)代碼瞎领,8從而讓各位碼Python的過程變的高級泌辫、優(yōu)雅~
一、函數(shù)演示
例如我們上一講循環(huán)(Python循環(huán)語句)中提到的打印99乘法表:
for hang in range(1,10):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
我們需要改成8X8的乘法表則需要:
for hang in range(1,9):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
這樣不僅把四行代碼全部重復(fù)敲了出來九默,而且明明我們需要的是8X8的乘法表震放,在寫range時卻需要寫range(1,9),非常的不高效驼修、優(yōu)雅殿遂。在實戰(zhàn)過程中重復(fù)的代碼可能不僅僅是四行,而是成百上千行乙各,這時我們就可以定義一個函數(shù)墨礁。通過關(guān)鍵字def(definition的縮寫)語句來完成函數(shù)定義:
def my_mul_tab(my_num):
for hang in range(1,my_num+1):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
這時,我們可以僅用一行代碼就輸出對應(yīng)數(shù)字的乘法表:
my_mul_tab(8)
并且換成其它數(shù)字也依舊可以使用:
二耳峦、函數(shù)的定義方式
上面的函數(shù)定義我們沒有設(shè)置返回值而是直接將結(jié)果print出來恩静,需要接受返回值的標(biāo)準(zhǔn)函數(shù)定義格式為:
def 函數(shù)名(形式參數(shù)):
函數(shù)體
return 返回值
上述形式參數(shù)可以不止一個,比如這里我們定義一個用于求和并返回結(jié)果提示語的計算器蹲坷,有一點智障驶乾,其實一個加號就能搞定,但是給大家演示一下定義并使用函數(shù)的過程:
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的結(jié)果是:{my_num1 + my_num2}"
return sum_num
myresult = my_add(1,5)
print(myresult)
是可以直接輸入求和的結(jié)果的:
三循签、函數(shù)返回值
這個內(nèi)容我們在上文中已經(jīng)使用到了轻掩,即關(guān)鍵字return能夠?qū)⒑瘮?shù)運行過程中的一個變量作為結(jié)果傳出,這也就是為什么我們能夠用myresult這個變量去接受求和的結(jié)果懦底,不過需要注意的是函數(shù)中return后的代碼無法執(zhí)行(有點類似于continue后的語句)唇牧。
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的結(jié)果是:{my_num1 + my_num2}"
return sum_num
print("求和完成")
myresult = my_add(1,5)
print(myresult)
例如罕扎,這里return下一行的"求和完成"字符并沒有被執(zhí)行并輸出
如果不通過return返回值,則函數(shù)自動返回None(在條件語句中可以等同于False)
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的結(jié)果是:{my_num1 + my_num2}"
myresult = my_add(1,5)
print(f"函數(shù)的返回值為:{myresult}")
print(f"函數(shù)的返回值類型為:{type(myresult)}")
顯然丐重,這樣是無法得到計算結(jié)果的腔召,我們來看一下None的返回結(jié)果與類型:
四、函數(shù)說明文檔
其實就是在函數(shù)中添加一段多行注釋扮惦,例如對于上面函數(shù)來說臀蛛,可以改成:
def my_add(my_num1,my_num2):
"""
my_add函數(shù)可以接受兩個參數(shù),這兩個參數(shù)均為數(shù)字崖蜜,運行此函數(shù)可以將兩數(shù)相加
:param my_num1: 形參中的數(shù)字1
:param my_num2: 形參中的數(shù)字2
:return my_num1與my_num2相加的結(jié)果
"""
sum_num = f"{my_num1}+{my_num2}的結(jié)果是:{my_num1 + my_num2}"
return sum_num
myresult = my_add(1,5)
print(myresult)
這時浊仆,神奇的事情就發(fā)生了,當(dāng)你的鼠標(biāo)懸停在"my_add"這個函數(shù)上時豫领,會自動彈出一個方框抡柿,其中以標(biāo)準(zhǔn)格式展示了此函數(shù)的幫助文檔。
五等恐、局部變量與全局變量
局部變量僅在函數(shù)內(nèi)生效洲劣,全局變量可以在腳本中定義該變量后的任意位置生效,例如课蔬,下面的modify_2()雖然可以在函數(shù)內(nèi)容修改temp_var的值囱稽,但在全局變量的print()中返回的依舊是代碼開頭全局變量的值。
temp_var = "我是一個全局變量"
def modify_1():
print(temp_var)
def modify_2():
temp_var = "我是一個臨時變量"
print(temp_var)
modify_1()
modify_2()
print(temp_var)
如何解決這一問題呢二跋,只需要在定義函數(shù)時用關(guān)鍵字global聲明該變量為全局變量:
temp_var = "我是一個全局變量"
def modify_1():
print(temp_var)
def modify_2():
global temp_var
temp_var = "我是一個臨時變量"
print(temp_var)
modify_1()
modify_2()
print(temp_var)
這時modify_2()返回的則是修改后的值
六战惊、方法
函數(shù)是一個能提供特定功能呢的封裝好的代碼單元。而在Python
中扎即,如果將函數(shù)定義為class
(類)的成員吞获,那么函數(shù)會稱之為方法。方法的定義方式為:
class myclass:
def add(x, y):
return x + y
# 那么使用起來就是: 類名.函數(shù)名()
myclass.add(1,2)
# 方法的其它用法均與函數(shù)類似
## 3
往期回顧
一文了解Python基礎(chǔ):字面量铺遂、注釋衫哥、變量、類型襟锐、運算符
如何聯(lián)系我們
公眾號后臺消息更新不及時撤逢,超過48h便不允許回復(fù)讀者消息,這里給大家留一下領(lǐng)取資料粮坞、免費服務(wù)器(有root權(quán)限的共享服務(wù)器,注冊即送200¥)的微信號蚊荣,方便各位隨時交流、提建議(科研任務(wù)繁重莫杈,回復(fù)不及時請見諒)互例。此外呼聲一直很高的交流群也建好了,歡迎大家入群討論:永久免費的千人生信筝闹、科研交流群
大家可以閱讀完這幾篇之后添加
給生信入門初學(xué)者的小貼士
如何搜索公眾號過往發(fā)布內(nèi)容