傳遞的是不可變型別
string, tuple(),number中的內容是不可變的
def
func1
(num)
:print
(num)
#20print(+
str(
id(num)))
num =
10print
(num)
#10print(+
str(
id(num)))
num =
50print
(num)
#50print(+
str(
id(num)))
temp =
20func1(temp)
print
(temp)
#20print(+
str(
id(temp)
))
輸出:
20
1050
20
同一位址指向同一值,num和temp並不是指固定的位置的值,num和temp中儲存的是值的位址,傳遞的是位址內的值。
傳遞的是可變型別
list,dict{},set是可變的
def
func2
(lis)
:print
(lis)
print(+
str(
id(lis)))
lis[0]
=100
print
(lis)
print(+
str(
id(lis)))
li =[1
,2,3
,4,5
]print
(li)
print(+
str(
id(li)))
func2(li)
print
(li)
print(+
str(
id(li)
))
輸出:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[100, 2, 3, 4, 5]
[100, 2, 3, 4, 5]
函式始終改變的都是列表li位址中的內容,列表中的內容是可變的。
乙個有趣的引用傳遞的例子:
def
ddd(num=
):for i in
range(3
):print
(num)
print(+
str(
id(num)))
ddd(
)ddd([1
,3,4
])ddd(
)
輸出:
[0, 1, 2]
[1, 3, 4, 0, 1, 2]
[0, 1, 2, 0, 1, 2]
第一次呼叫ddd()且沒有傳遞引數時,使用值為空列表的預設引數位址;
當有傳遞引數時,使用傳遞引數的位址並按方法中的內容改變該位址中的值;
當沒有傳遞引數時,再次使用預設引數位址並改變其中的內容。
給每乙個引數定義乙個關鍵字,通過關鍵字呼叫引數。優點:允許函式呼叫時的引數的順序與定義時不一致。
func1(
*arr)
:print
(arr)
func1(
'1',
' 4'
,'hhh'
)#輸出(1, 4, 'hhh')
# *後面的變數存放所有未命名的變數引數,如沒有指定引數內容則是乙個空元組。
func2(
**arr)
:print
(arr)
func2(x=
1, y=
6, z=
'hhhh'
)#輸出:
#**後面表示的是鍵值對的引數字典,如沒有指定引數內容則是乙個空字典。
func3(
*args,
**kwargs)
:pass
#代表乙個空語句
格式:
lambda 引數1, 引數2, ……, 引數n:expression
expression中不能包含其他語句,但可以呼叫其他函式。
sum
=lambda num1, num2:num1 + num2
print
(sum(1
,2))
輸出:3
特點:1.簡單匿名函式 : lambda函式只是乙個表示式,函式體比def簡單。
2.不復用的函式 : 需要乙個抽象簡單的功能又不想單獨命名定義乙個函式。
3.為了**清晰 : 簡短更清晰易懂。
關於python函式幾點注意
有時候為了先構架好整個框架然後在逐步新增各種功能,這時候可能就會使用到空函式先佔位,這裡用到的就是pass語句 def nop pass defage judge age if age 18 pass對於函式輸入輸出型別錯誤後可能會造成麻煩,為了避免,經常會在函式中限制輸入輸出模擬,這招也是在做題時...
Python基礎 函式
函式設計原則 函式有多種方法獲得輸入產生輸出,一般使用引數作為輸入,return語句配合可變引數的改變作為輸出。函式輸入 函式輸出 def fun args returndef語句 def建立了乙個函式物件並將其賦值給乙個變數。def語句是實時執行的,在模組匯入時執行或者在互動模式下輸入時執行。始終...
python基礎 函式
def funcname params return value 如果沒有return 最後會返回none,如果只寫return 會返回none 返回值個數為乙個,但是可以返回tuple,表面上返回多個值 def f1 return x,y x,y f1 def nop passdef functe...