我是Python的初學者,試圖理解函數參數及其類型和順序。試圖瞭解Python中的可選,列表和命名參數
我想嘗試用一下不同種說法,這裏是我的實驗
def main():
test_a(2, 33, 44)
test_b(2, 33)
test_c(2)
## test_d(2,,44) **Produces Invalid syntax**
test_e(2,33,44,55,66)
test_f(2, 44,55,66, y = 44)
test_g(2, 33, 44,55,66, rofa = 777, nard = 888)
##test_h(2, 33, foo = 777, boo = 888, 44,55,66) **Invalid Syntax in Function definition
##test_l(2, 44,55,66 , foo= 777, boo = 888, y = 900) **Invalid Syntax in Function definition
test_m(2, 44,55,66 , y = 900, foo=77777 , boo = 88888)
#############################################################
## NO optional arguments
def test_a(x,y,z):
print("test_a : x = {}, y = {}, z = {} ".format(x ,y ,z))
## One optional argument at the end
def test_b(x, y, z = 22):
print("test_b : x = {}, y = {}, z = {} ".format(x ,y ,z))
## TWO optional arguments at the end
def test_c(x, y = 11, z = 22):
print("test_c : x = {}, y = {}, z = {} ".format(x ,y ,z))
## ONE optional argument at the middle
## Produces Non-default argument follows default argument
#### **** DEFAULT ARGUMENTS MUST COME AT THE END **** ####
## def test_d(x, y = 11, z):
## print("test_d : x = {}, y = {}, z = {} ".format(x ,y ,z))
#################################################################
## NO optional argument + One List argument
def test_e(x, y, *args):
print("test_e : x = {}, y = {} ||".format(x, y), end= " ")
for i in args :
print(i)
## One optional argument + One list argument
def test_f(x, *args , y = 5):
print("test_f : x = {}, y = {} ||".format(x, y), end= " ")
for i in args :
print(i)
################################################################
## No optional argument, one list, one keyword arguments
def test_g(x,y,*args, **kwargs):
print(x, y)
for i in args:
print(i)
for i, v in kwargs.items():
print(i, v)
## **kwargs befor *args produces syntax error !!!
##def test_h(x,y, **kwargs, *args):
## print(x, y)
## for i in args:
## print(i)
##
## for i, v in kwargs.items():
## print(i, v)
## **kwargs befor optional argument produces syntax error !!!
##def test_l(x,*args,**kwargs, y = 5):
## print(x, y)
## for i in args:
## print(i)
##
## for i, v in kwargs.items():
## print(i, v)
##
## One optiona, list and keyword arguments
def test_m(x,*args,y = 5, **kwargs):
print(x, y)
for i in args:
print(i)
for i, v in kwargs.items():
print(i, v)
if __name__ == "__main__":
main()
我真正理解大部分的東西,這個實驗後。但有一個問題我不能進入我的腦海。
在test_h
和test_m
函數定義,其中**kwargs
是可選的參數和list參數定義,當我運行該程序,即使我沒有使用該功能,只需定義它。它產生Syntax Error
..我感謝知道爲什麼會發生這種情況?
謝謝。
'def'語句在代碼中到達時執行;如果您稍後調用該函數,則無關緊要。 (這是一個像其他任何聲明一樣)。 – geoffspear 2013-05-09 17:38:25
不僅如此 - 整個腳本都會進行語法檢查,無論它是否可以執行。如果你做了'if False:!syntax_error',你仍然會得到一個語法錯誤,即使body不會被執行。 – bbayles 2013-05-09 17:41:48