可更改(mutable)與不可更改(immutable)物件
在 python 中,strings, tuples, 和 numbers 是不可更改的物件,而 list,dict 等則是可以修改的物件。
對於上述兩種型別,函式的引數傳遞也是不同的:
python中一切都是物件,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳可變物件。
預設引數必須放在引數列表的最後面
def
printinfo
( age=
35,name)
:# 預設引數不在最後,會報錯
不定長引數
傳遞不定長引數有兩種方法:
以元組的方式傳入
'''
'''def
printinfo
( arg1,
*vartuple )
:"列印任何傳入的引數"
print
("輸出: "
)print
(arg1)
print
(vartuple)
# 呼叫printinfo 函式
printinfo(70,
60,50)
結果:
輸出:70(
60,50)
使用中,*vartuple
這個引數可以不使用,也就是只傳arg1
這乙個引數是可以的。
以字典的方式傳入
def
printinfo
( arg1,
**vardict )
:"列印任何傳入的引數"
print
("輸出: "
)print
(arg1)
print
(vardict)
# 呼叫printinfo 函式
printinfo(
1, a=
2,b=
3)
結果:
輸出:
1
*
單獨出現
宣告函式時,引數中星號*
可以單獨出現,例如:
def
f(a, b,
*, c)
:return a+b+c
如果單獨出現星號,*
後的引數必須用關鍵字傳入。
'''
'''>>
> f(1,
2,3)
# 報錯
traceback (most recent call last)
: file ""
, line 1,in
typeerror: f(
) takes 2 positional arguments but 3 were given
>>
> f(1,
2,c=3)
# 正常
6
匿名函式lambda
比如:sum = lambda arg1, arg2: arg1 + arg2
,也就是引數: 表示式的形式。
使用方法:sum(1,2)
或者是sum(arg1=1, arg2=2)
和函式同理,可以設定預設引數sum = lambda arg1=0, arg2=0: arg1+arg2
,同樣的,預設引數的位置需要靠後。
強制位置函式
這是python3.8的特性。函式形參語法 / 用來指明:函式形參必須使用指定位置引數,不能使用關鍵字引數的形式。
def
f(a, b,
/, c, d,
*, e, f)
:print
(a, b, c, d, e, f)
/
之前的引數必須使用指定位置引數。形參 a 和 b 必須使用指定位置引數;
c 或 d 可以是位置形參或關鍵字形參;
*
之後的引數必須使用關鍵字引數。所以 e 或 f 要求為關鍵字形參。
f(10, 20, 30, d=40, e=50, f=60)
這種使用方法是正確的。
函式內可以訪問全域性變數,但不能改變其值
如果需要改變全域性變數的值,可以使用global方法:
'''
'''a =
10def
sum(n)
:global a
a += n
sum(1)
;print
(a)
可見,a
的值變成了11。
函式作為引數
這個乙個很有意思的封裝。
def
execute
(f):
f()defhello()
:print
("hello"
)execute(hello)
python函式使用易錯點 Python易錯例題
為了更好檢測效果,請在作答時最好不要複製 去執行 第一題 實踐 請使用zip函式將已給dict的key和value倒置 原dict 要求結果 第二題 高頻易錯 def add a if a 1 return 1 else return a add a 1 def print to add a pri...
Python易錯點總結
三個單引號 或者雙引號 既可以注釋也可以當作字串。python 中的淺拷貝只拷貝父物件不拷貝子物件,深拷貝父物件子物件全部拷貝。import copy a 1,2,3,4,a b b a c copy.copy a d copy.deepcopy a 5 a 4 c python中的命名方式 參考 ...
Python易錯點總結
1.定義只有乙個元素的元組必須要加逗號,否則只是乙個數.tuple 1,print tuple 2.對於列表和元組,下標值為 1都代表是最後乙個元素的下標,2代表倒數第二個元素的下標,依次類推.print list 1 print tuple 1 3.元組和列表的不同之處在於,元組一經初始化後就不能...