def 函式名(引數列表)在python中,一切都是物件,型別也屬於物件,變數是沒有型別的。函式體
a = [1,2,3]
a = "helloworld"
以上**中,[1,2,3]是list型別,"helloworld"是string型別,而變數a是沒有型別的,它僅僅是乙個物件的引用(乙個指標),可以是指向list型別物件,也可以指向string型別物件。
在python中,string,tuples,numbers是不可更改物件,而list,dictionary等是可修改物件。
①不可變型別:變數賦值a = 5後再賦值a = 10,這裡實際是新生成乙個int值物件10,再讓a指向它,而5被丟棄,不是改變了a的值,相當於新生成了a.
②可變型別:變數賦值list= [1,2,3,4]後再賦值list[2] = 5,則是將列表list的第三個元素值更改,本身沒有動,只是內部的一部分值被修改了。
①不可變型別:類似於(值傳遞),如 整數(number)、字串(string)、元組(tuple)。如fun(a),傳遞的只是a的值,沒有影響a物件本身。
比如在 fun(a)內部修改 a 的值,只是修改另乙個複製的物件,不會影響 a 本身。
1 defchange(a, b):輸出結果:2 """傳遞不可變物件,交換兩個數的值"""
3 c =a
4 a =b
5 b =c
6 7 x = 2
8 y = 3
9 10 change(x, y)
11 12 print(x, y)
2 3可以發現,將x,y的值傳入change函式,進行交換後,輸出x,y的值還是原來的值,這就是不可變型別傳遞。
②可變型別: 類似於(引用傳遞),如 列表(list),字典(dict)。如 fun(list),則是將 list 真正的傳過去,修改後fun外部的list也會受影響。
1 defalter_list(list):輸出結果:2 """傳遞可變物件,修改列表的值"""
3 list[0] = 3
4 5 list1 = [1, 2, 3, 4, 5]
6 alter_list(list1)
7 print(list1)
[3, 2, 3, 4, 5]可以發現,list1中的值發生了改變,同樣的寫法,上面的例子中的值沒有改變,而下面的值卻改變,這就是因為不可變型別和可變型別的引數傳遞。
注意:python 中一切都是物件,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳可變物件。
必須引數,位置引數,關鍵字引數,預設引數,不定長引數。
①必須引數: 呼叫函式時必須傳入乙個引數。
1 deffunc(a):②位置引數:在傳遞引數時必須與形參的順序對應。2 print(a)
3
4 func() #沒有引數會報錯
1 deffunc(a, b):③關鍵字引數:使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。2 print('a=%s'%a)
3 print('b=%s'%b)
4 5 func(2, 3)
6 func(3, 2)
1 deffunc(a, b):④預設引數:呼叫函式時,如果沒有傳遞引數,則會使用預設引數。2 print('a=%s'%a)
3 print('b=%s'%b)
4 5 func(a=2, b=3)
6 func(b=3, a=2)
1 def func(a, b=3):⑤不定長引數:def 函式名(形參1,*形參2) 加了星號*的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。2 print('a=%s'%a)
3 print('b=%s'%b)
4 5 func(2)
def 函式名(形參1,**形參2) 加了兩個星號**的引數會以字典的形式匯入。
1 def func1(a, *b):輸出結果:2 print(a)
3 print(b)
4 5 func1(3, 4, 5, 'a', [1, 2, 3])
6 7 def func2(a, **b):
8 print(a)
9 print(b)
10 11 func2(3, c=4, d=5) # 因為**要以字典的形式儲存,而字典需要key值和value值,所以傳參的時候要用這種方式
3(4, 5, 'a', [1, 2, 3])3
python學習記錄(三)
1 if else 1 是從上往下判斷,如果在某個判斷上是true,把該判斷對應的語句執行後,就忽略掉剩下的elif和else age 3 if age 18 print adult elif age 6 print teenager else print kid 2 判斷條件還可以簡寫 if x ...
學習記錄(三)
new出來的空間都會給個預設值 基本型別預設值是0,引用型別預設值是null,布林型別預設值是false 方法內的new沒給預設值的確沒有,物件內沒給會有預設值 陣列的資料空間是連續的,申請的時候預設連續 一般連續放資料,但比如桶排序會不按順序放入 導線互相匯聚,網路通過電訊號傳播 電壓,高電壓1,...
python學習記錄
python 3 整除,複數表示,slice,range,pass關鍵字,函式用引數名呼叫,函式的 arg和 arg,預設引數,unpacking argument lists,sequence 型別 list,set tuple,dictionary,queue,stack loop相關 enum...