下面是我在做什麼:使用適用於三元操作參數(例如,*操作參數應用到字符串)
def func(a,b=1,*args):
print('a:',a,'b:',b,'args:',*args if args else 'No args')
func(1,2)
這裏是我所期待的:
#a:1 b: 2 args: No args
這裏是我的實際得到:
#a:1 b: 2 args: N o a r g s
的*
操作員拆包'No args'
串。因此,這裏是我一直在做的事情:
#Produces expected result:
def func(a,b=1,*args):
print('a:',a,'b:',b,'args:',*args if args else ['No args'])
所以*
操作被應用到整個三元聲明。但是,這似乎並沒有與-
操作發生:
def func(a,b=1,*args):
print('a:',a,'b:',b,'negative args[0]:', -args[0] if args else 1000000)
func(1,2)
#expected result:
#a:1 b: 2 negative args[0]: -1000000
#actual result:
#a:1 b: 2 negative args[0]: 1000000
負-
操作並不適用於整個三元聲明,而*
操作一樣。爲什麼? *
運營商有什麼特別之處?
謝謝你對你的回答非常友善和解釋,基本上(和正確的):「它只是。」 ;) – 2014-12-05 20:28:26
@RickTeachey:在某種程度上,任何語言的運算符優先級規則都是任意的。但實際上,語言設計者試圖提出優先規則,這會使事情更頻繁地更易讀。 (Python的設計者還增加了一個額外的約束,試圖使優先規則變得簡單和簡約,所以當它不明顯時,它至少容易記住。) – abarnert 2014-12-05 20:32:08
這很好。 – 2014-12-05 20:33:23