3.乙個例子
二、函式的一些細節
多值引數
遞迴首先需要記住的一點是,在python中,變數的賦值是使用引用來傳遞的。這也就意味著,不管這個物件是已經存在的還是新建立的,在賦值的時候都將傳遞這個物件的引用。
不可變資料型別
可變資料型別
a =
1print(id
(1))
# 1print(id
(a))
# 2 same to 1
a =2
print(id
(a))
# 3 diff from 1
b =1
print(id
(b))
# 4 same to 1
c = a
print(id
(c))
# 5 same to 3
若無指定返回值,則函式預設返回值型別為nonetype
num =
5# 函式的定義部分需要與上面語句間隔兩行
deffunc()
:# todo(cui) 此語句可用於解釋將要做什麼
"""函式體的整體注釋"""
tmp_1 =
10 tmp_2 =
12print(id
(tmp_1),id
(tmp_2)
)# global 宣告變數後,可以修改全域性變數,否則python在函式中修改全域性變數無效
# 如果不使用global修飾的話,預設在本地建立乙個與全域性變數同名的新變數
# return (tmp_1, tmp_2)
return tmp_1, tmp_2 # 這樣預設返回的是元組的形式
# return [tmp_1, tmp_2]
# result = func() # 使用 列表/元組 接收
tmp1, tmp2 = func(
)# 接收的變數個數應與返回引數的個數一致,否則報錯
print
(tmp1, tmp2)
print(id
(tmp1),id
(tmp2)
)# id()可以用於取變數的位址
可變型別變數作為引數傳遞時,在函式體內部改變該引數值不會對形參造成影響
不可變型別變數作為引數傳遞時,~~會造成改變
模擬於c++中的預設引數,預設引數可有可無。
python中預設引數的注意事項:
有時可能可能需要乙個函式能夠處理的引數個數是不確定的,這個時候,就可以使用多值引數。
例如程式:
def
func
(num,
*args,
**kwargs)
:print
(num)
print
(args)
print
(kwargs)
func(0,
1,2,
3,4, name=
"xiaoming"
, age=18)
# 不使用拆包
拆包語法
使用情況:呼叫函式時,將乙個元組變數或乙個字典變數直接傳遞給相應的形參
使用方法:
**:
def
func
(num,
*args,
**kwargs)
:print
(num)
print
(args)
print
(kwargs)
tp =(1
,2,3
,4)dc =
func(0,
*tp,
**dc)
# 拆包
演算法方面,不再贅述。 Python 可變型別和不可變型別總結
可變型別 list,set,dict 不可變型別 int,str,tuple 物件的三要素 value,type,id 判斷type是否相同 true 判斷value是否相同 true 判斷id是否相同 a abc b 123 print id a id b b abc print a is b,i...
python可變與不可變
可變與不可變型別的實質實際上就是儲存機制的不同 不可變型別 比如字串 被稱為不可變的字串行,每個字元底層均有規範的unicode碼對應,記憶體規定無法對單一的乙個字元進行修改,要修改字串必須重新指向乙個全新的字串 可變型別 一方面,該列表可以保證在位址不變的前提下,改變列表內容 另一方面,該引用也可...
python可變與不可變
不可變作用和意義 物件所指的記憶體中的值是可以改變的。變數名儲存的是乙個位址,該位址指向乙個具體的物件,並且不管對變數的值進行怎樣的操作,都不會改變變數名的儲存位址。字典dict 列表list 集合set 1.list list1 1 2,3 4 print list1,id list1 1,2,3...