什么是函數(shù)?
函數(shù)其實就是把許多代碼放在一起蹬刷,包裝好之后的一種形式,使得他可以被多次復(fù)用频丘。
函數(shù)的簡單定義:
如下面代碼塊所示办成,首先是一個關(guān)鍵字def,然后一個空格搂漠,后面跟函數(shù)名迂卢,一個小括號,冒號桐汤,后面就是代碼塊了冷守,當(dāng)然記得加一個tab縮進(jìn);調(diào)用就直接使用函數(shù)名就OK了惊科;
def simple():
????print("我是函數(shù)的簡單定義")
simple()
傳一個參數(shù):
def simple(str):
????print(str)
simple('一個參數(shù)的函數(shù)')
傳多個參數(shù):參數(shù)之間以逗號隔開拍摇,在調(diào)用的時候有兩種方式,一種是一一對應(yīng)馆截,一種是關(guān)鍵字參數(shù)對應(yīng)
1.
def sum(x,y):
????print(x+y)
sum(1,2)
2.
def sum(x,y):
????print(x+y)
sum(y=5,x=7)
傳不定長參數(shù):如下面代碼塊所示充活,首先形參前面加一個*,表示傳過來的參數(shù)應(yīng)該是元組類型,那么t就是一個元組蜡娶,在使用函數(shù)的時候混卵,直接傳多個參數(shù)就行;如果是參數(shù)前面加兩個**窖张,表示傳過來的參數(shù)類型應(yīng)該是字典幕随,那么在使用函數(shù)的時候傳參就應(yīng)該是字典格式的,
1
def indefinite(*t):
????print(t,type(t))
????for i in t: i+=i print(i)
indefinite(1,2,3)
2
def indefinnite(**d):
????print(d,type(d))
????items=d.items()
????result=0
????for k,v in items:
????????print(v)
????????result+=v
print(result)
indefinnite(a=4,b=5)
參數(shù)的裝包和拆包:
裝包:就是把多個值裝成元組或者字典宿接,比如傳多個參數(shù)的時候赘淮,就需要把多個元素進(jìn)行裝包,拆包睦霎,就是把元組或者字典轉(zhuǎn)成多個值梢卸;如下面代碼所示,把1.2.3三個值轉(zhuǎn)為了元組副女,就是裝包過程蛤高,把agrs元組轉(zhuǎn)成了三個值就是拆包的過程;
def sum(a,b,c):
????print(a+b+c)
def tupl(*args):
????print(args)
????print(*args)
????sum(*args)
tupl(1,2,3)
缺省參數(shù):如下代碼所示,name就是缺省參數(shù)戴陡,缺省參數(shù)就是調(diào)用函數(shù)的時候可以寫也不可以不寫的參數(shù)塞绿,默認(rèn)有一個默認(rèn)值,如下代碼默認(rèn)值就是monther;
def love(name='monther'):
????print("i love",name)
love()
值傳遞和引用傳遞:值傳遞的意思是說我只是把內(nèi)容給了你恤批,就好像我一個籮筐有五個蘋果位隶,我只是給了你五個蘋果,我的籮筐沒給你开皿,籮筐還是我的籮筐;引用傳遞呢就是我不僅把五個蘋果給你了篮昧,我還把籮筐都給你了赋荆;籮筐都給你的意思就是如果你重新裝了6個蘋果,那么我從籮筐取出來就會是6個蘋果懊昨,說白了就是你可以改變我給的那個變量窄潭,但是在python里面又分了不可變類型和可變類型,這樣的話酵颁,你就只能改變可變類型的變量嫉你,不可變類型是不能改變的,不可變類型改變之后躏惋,已經(jīng)不是同一個變量了幽污;那么針對python語言,使用的都是引用傳遞簿姨,下面上代碼:
1.這段代碼驗證了當(dāng)x的值發(fā)生改變之后距误,他的id其實已經(jīng)改變了,換句話說他已經(jīng)不是以前的x了
def transfer(x):
????print(id(x))
????x+=1
????print(id(x))
y=5
print(id(y))
transfer(y)
print(id(y))
結(jié)果:
1734399856 1734399856 1734399872 1734399856
2.這段代碼驗證了可變類型是可變改變他本身的值:
def transfer(x):
????x.append(5)
y=[1,2]
transfer(y)
print(y)
結(jié)果:
[1, 2, 5]
補充:Python的每個對象都分為可變和不可變扁位,主要的核心類型中准潭,數(shù)字、字符串域仇、元組是不可變的刑然,列表、字典是可變的暇务。
函數(shù)的返回值:
在代碼塊的最后加一個return語句就可以把值返回出去泼掠,需要注意的是,return后續(xù)的代碼不會執(zhí)行
def sum(x,y):
????s=x+y
????d=x-y
????return s,d
result=sum(9,5)
print(result)
函數(shù)使用描述:其實就是注釋垦细,對于函數(shù)的注釋有他的規(guī)范武鲁,就是在代碼塊的第一行,用三個雙引號進(jìn)行注釋蝠检,注釋需要說清的幾個點沐鼠,函數(shù)功能,參數(shù)類型,參數(shù)意義饲梭,返回值類型以及意義乘盖;獲取函數(shù)的注釋用help函數(shù)獲取憔涉;
def sum(x,y=1):
????""" 求兩個數(shù)的和
????:param x: 數(shù)值1订框,數(shù)值類型,必填
????:param y: 數(shù)值2兜叨,數(shù)值類型穿扳,選填,默認(rèn)值為1
????:return: 兩個和国旷,數(shù)值類型 """
????result=x+y
????return result
help(sum)