python學習記錄三

2022-04-08 05:42:31 字數 2595 閱讀 3254

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):

2 print('a=%s'%a)

3 print('b=%s'%b)

4 5 func(2, 3)

6 func(3, 2)

③關鍵字引數:使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。

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):

2 print('a=%s'%a)

3 print('b=%s'%b)

4 5 func(2)

⑤不定長引數:def 函式名(形參1,*形參2)       加了星號*的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。

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...