『壹』 python中定義函數默認參數值的使用注意事項

4.7.1. 默認參數值
最常用的一種形式是為一個或多個參數指定默認值。這會創建一個可以使用比定義是允許的參數更少的參數調用的函數,例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('uncooperative user')
print(complaint)
這個函數可以通過幾種不同的方式調用:
只給出必要的參數:
ask_ok('Do you really want to quit?')
給出一個可選的參數:
ask_ok('OK to overwrite the file?', 2)
或者給出所有的參數:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
這個例子還介紹了 in 關鍵字。它測定序列中是否包含某個確定的值。
默認值在函數 定義 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
將會輸出 5。
重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
這將輸出:
[1]
[1, 2]
[1, 2, 3]
如果你不想讓默認值在後續調用中累積,你可以像下面一樣定義函數:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L

『貳』 python 默認參數在函數定義的時候已經求值了

#有默認參數
#定義默認參數 age = 1, gender = 'M'
def person( name, age = 1, gender='M'):
print 'name: %s age: %d gender: %s' % (name, age, gender)

#這里只傳一個值給第一個參數which is name, age 和 gender已經有默認值,
#就算不傳新值給 age or gender也沒問題
person('Jacky')
#output --> name: Jacky age: 1 gender: M

#沒有默認參數
def person(name, age, gender):
print 'name: %s age: %d gender: %s' % (name, age, gender)

# person('Jacky') <-- error, 3個參數只傳了一個值
#沒有默認參數,就一定要傳 N(total 參數) 個值給 function.
person('Jacky', 19, 'M')

******************************************************

#關鍵字參數
#用上面第一個例子 person( name, age=1, gender='M')
#用關鍵字給function傳值時,不雖要跟著順序來也沒問題

#就算 age 和 name 順序不同, 但因為是用關鍵字來傳值,所以沒問題
person( age=18, name='Jacky')
#output --> name: Jacky age: 18 gender: 'M'

person( gender='F', age=17, name='Ashley')
#output --> name: Ashley age: 17 gender: 'F'

# Error, 沒用關鍵字去傳值
# person( 20, 'M', 'Jacky') <-- 沒用關鍵字時,一定要按順序去傳值

i tried to explain as clear as i can.xP

『叄』 關於python函數的默認參數,是只被設置一次,還是每次調用都被設置

如果是可變對象,只被設置一次
如果是不可變對象,每次都分配一個新的對象

『肆』 python 如何查看自帶函數的默認參數

按住 control 鍵,點擊 linspace ,走你,就可以看到函數具體都需要哪些參數了

『伍』 python 為什麼默認參數不能放在必選參數前面

簡單來講就是會產生歧義。
不妨想一想,如果確實如你所說,有默認值的參數位於無默認值之前,則調用函數時就必須使用key=Value的形式,而不能使用直接送入Value的形式了。為了調用函數時可以更便捷地使用後者,而同時又不產生歧義,在定義函數時,無默認值參數就必須位於前面了。考慮到定義函數只要一次,調用函數可能是很多地方、很多人使用,定義函數時稍微注意點是可以理解的了。

『陸』 Python函數里的默認參數和關鍵字參數有什麼區別

#有默認參數
#定義默認參數
age
=
1,
gender
=
'm'
def
person(
name,
age
=
1,
gender='m'):
print
'name:
%s
age:
%d
gender:
%s'
%
(name,
age,
gender)
#這里只傳一個值給第一個參數which
is
name,
age

gender已經有默認值,
#就算不傳新值給
age
or
gender也沒問題
person('jacky')
#output
-->
name:
jacky
age:
1
gender:
m
#沒有默認參數
def
person(name,
age,
gender):
print
'name:
%s
age:
%d
gender:
%s'
%
(name,
age,
gender)
#
person('jacky')
<--
error,
3個參數只傳了一個值
#沒有默認參數,就一定要傳
n(total
參數)
個值給
function.
person('jacky',
19,
'm')
******************************************************
#關鍵字參數
#用上面第一個例子
person(
name,
age=1,
gender='m')
#用關鍵字給function傳值時,不雖要跟著順序來也沒問題
#就算
age

name
順序不同,
但因為是用關鍵字來傳值,所以沒問題
person(
age=18,
name='jacky')
#output
-->
name:
jacky
age:
18
gender:
'm'
person(
gender='f',
age=17,
name='ashley')
#output
-->
name:
ashley
age:
17
gender:
'f'
#
error,
沒用關鍵字去傳值
#
person(
20,
'm',
'jacky')
<--
沒用關鍵字時,一定要按順序去傳值
i
tried
to
explain
as
clear
as
i
can....xp

『柒』 PYthon關於使用函數默認參數的問題

你先要把默認值用變數接收。
然後再判斷input的內容是不是空字元「」,如果是,就使用前面接收的默認值。

『捌』 在PYTHON中,如果一個函數的參數已經有默認值,如何才能知道調用該函數時是否傳

有默認值的參數,在調用時,如果該參數的實參與默認值相同,可以不傳。

『玖』 關於python帶默認值的參數只能放在後面的問題

第一個那個*x是*args的意思,就是任意個參數,C++里的 va_arg,...符號這種,python函數里可以有*args和**kwargs。
*args之後可專以隨便放有默認值的和沒有默認值的。
因為這之後的任何東西都得用」y=1「」z=1「這種來賦值。
比如說第一個函數,def fun(*x, y=4, z),我寫fun(1,2,3,4,5),這五個數全跑到*x里了。我想給y和z賦值必須要寫fun(1,2,3,4,5,y=6,z=7)。相當於z跟有默認值的那種也差不多了。所以規定可以把z放在*x後面的任何位置,包括y=4後面,它們的位置關系已經沒有用了。
規定def fun(x=4, y) y必須放在x前,就是要保留這種位置關系,要不我寫fun(1),你說這個1是給x的還是y的?就有了歧義。所以必須要有正確的位置關系。但是*x後面所有東西都是用參數名賦值的,屬位置關系不起作用了,所以可以任意順序了。
要理解規定背後的原因。同理,**kwargs放在最後,也是這個原因。消除歧義性。

『拾』 python 函數參數沒有默認值怎麼表示

沒有默認值,你不設置就是了,如:
def GetLibraryGroup(name, groupKey='month', orderBy = 』name』):
上面的函數定義中,name沒有給默認值,其餘的都給了,調用時,相應的參數如果你不給值,那麼函數會以默認值來運行,比如
GetLibraryGroup('filetable'),這個調用沒有給groupKey,orderBy 兩個參數,但是函數定義時,給了默認的值,就相當於GetLibraryGroup('filetable','month',,』name』)了,當然如果你調用時給默認的參數賦了其他值,那麼以你的調用為准,如
GetLibraryGroup('filetable','year',,』createTime』),這個調用groupKey,orderBy兩個參數就會是你調用時給的'year',,』createTime』。