def 函式名(引數列表):
函式體
簡單函式例項:
#定義乙個函式名為printname的函式,函式無返回值,只是列印一串字元,()函式呼叫符,可以看出呼叫printname函式後,列印
>>>
defprintname
(): print("best today")
>>> printname()
best today
>>>
#定義乙個待返回值的函式printname,將傳入的值返回給函式名為sendrose的函式,列印輸出語句
>>>
defprintname
(name):
return name
>>>
defsendrose
(name):
if name == "yun":
print("send rose")
elif name == "yue":
print("send lily")
>>> sendrose(printname("yun"))
send rose
6、傳遞引數有兩種,一是可更改的物件,另一種是不可更改物件,在python中strings, tuples, 和 numbers 是不可更改的物件,而 list,dict 等則是可以修改的物件,接下來我們看些例子:
#python中number被識別是number型的資料,我們把number傳進去,可以看做是讓num指向5存放的記憶體空間,修改num其實就是讓num重新指向新的記憶體空間,而number則還是指向5的這塊記憶體(個人理解)
>>> number = 5
>>>
defrevisenum
(num):
num = 10
print(num)
>>> revisenum(number)
10>>> print(number)
5>>>
#python中name被識別是string型的資料,我們把name傳進去,可以看做是讓引數name也指向「wang」存放的記憶體空間,修改引數name其實就是讓引數name重新指向新的記憶體空間,而name則還是指向「wang」的這塊記憶體(個人理解)
>>> name = "wang"
>>>
defrevisename
(name):
name = name + "yun"
print(name,id(name))
>>> revisename(name)
wangyun 4590679520
>>> print(name)
wang
>>> id(name)
4591245776
>>> id("wang")
4591245776
>>> id("wangyun")
4591245608
>>>
#特別注意::::我們定義乙個revisetuple可以傳遞乙個元組的引數,該元組包含乙個列表和兩個字串,我們在函式內修改元組中列表的值,輸出後,元組裡面的資料也發生變化,當我們修改字串時,編譯器會報出「typeerror: 'tuple' object does not support item assignment」,這點有人就該問,我明明修改元組裡面的值,為什麼元組說是不可改變的呢?其實我們可以認為元組裡面存放的時元素的位址,元素改變位址肯定改變,而列表和字典支援原位修改的,修改後只是記憶體大小的改變而位址是不改變的,所以我們修改了列表後,元組也發生了改變,從這點我們也可以看出當我們傳入字典或者列表進行修改,同樣會修改原來的值,原因是一樣,列表和字典支援原位修改,而位址不變(個人理解)
//修改列表
>>> t1 = ([1,2,3],"wang","yun")
>>> t1
([1, 2, 3], 'wang', 'yun')
>>>
defrevisetuple
(t):
l1 = t[0]
l1[0] = 10
print(t)
>>> revisetuple(t1)
([10, 2, 3], 'wang', 'yun')
>>> print(t1)
([10, 2, 3], 'wang', 'yun')
>>>
//修改字典
>>> t1 = (,"wang","yun")
>>> t1
(, 'wang', 'yun')
>>>
defrevisetuple
(t):
dict1 = t[0]
dict1["wang"] = "bad"
print(t)
>>> revisetuple(t1)
(, 'wang', 'yun')
>>> t1
(, 'wang', 'yun')
>>>
7、引數傳遞中引數設定
(1).必需引數,我們上面的簡單示例的sendrose(name),name這個引數在呼叫的時候是必須要傳遞的否則會報錯,且必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣
(2).關鍵字引數,使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致
#傳入引數可以和呼叫的不一致
>>>
defprintnameandage
(str, int):
print("%s : %d" %(str,int))
>>> printnameandage(int =30,str ="wang")
wang : 30
>>>
(3).預設引數,呼叫函式時,如果沒有傳遞引數,則會使用預設引數
>>>
defprintnameandage
(name, age = 25):
#注意:::預設引數必須放在最後
print("%s : %d" %(name, age))
>>> printnameandage("wang")
wang : 25
>>> printnameandage("wang", 16)
wang : 16
#這樣呼叫函式也可以使呼叫引數與宣告的不一致(必須指定引數賦值)
>>> printnameandage(age = 16, name = "wang")
wang : 16
>>>
(4)不定長引數,當你宣告乙個函式,但是不知道需要多少引數合適時,這時不定引數就派上用場了
>>>
defprintname
(name1,name2, *randomtuple):
print(name1,name2)
for name in randomtuple:
print(name)
>>> printname("wang", "yun", "xiaomi","iphone")
wang yun
xiaomi
iphone
>>> printname("wang", "yun", "xiaomi","iphone","wang", "yun", "xiaomi","iphone")
wang yun
xiaomi
iphone
wang
yunxiaomi
iphone
>>>
8、匿名函式,關鍵字lambda,可以理解為是乙個表示式不是**塊,以lambda開頭返回乙個函式,但是lambda 函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數
語法結構: lambda [arg1 [,arg2,…..argn]]:expression
#簡單使用
>>> count = lambda num1,num2:num1 * num2
>>>
print (count(num2 = 15, num1 = 22))
330>>>
print (count(10, 100))
1000
>>>
9、python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的**塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這這些語句內定義的變數,外部也可以訪問
>>>
defprintage
(): num = 10
#區域性》 num
traceback (most recent call last):
file "", line 1, in
numnameerror: name 'num'
isnot defined
>>>
iftrue:
num1 = 20
>>> num1
20
python學習 函式
學習 def my abs x if x 0 return x else return x函式呼叫可以按順序使用預設引數,也可以不按順序提供部分引數但是需要把引數名寫上。def enroll name,gender,age 6,city beijing print name name print g...
Python學習 函式
函式 可以實現乙個功能的 組 自定義函式的定義必須要使用def關鍵字 函式命名通常使用英文結合數字或下劃線,嚴格區分大小寫,不能和關鍵字相同 格式 def 函式名 函式功能語句1 函式功能語句2 函式名 具有引數的函式結構 def 函式 引數名,引數名.函式功能語句1 函式功能語句2 函式名 值,值...
Python學習 函式
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。函式的使用可以提高 的重用 提高程式設計的效率。def functionname params,函式的文字說明 main fun return 1 函式 塊 是以def開頭,後面接函式名和圓括號 2 圓括號裡面放函式引數,或者說引數的規...