2016-11-17 62 views
0

考慮的Atom是一個類,其中apply()函數和使用類對象的函數調用有什麼區別?

  • form.name是一個字符串
  • convert返回值

是什麼下面兩行之間的差別的列表?

  • apply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))

  • Atom(form.name, [convert(arg, subst) for arg in form.args])

從技術文檔,

申請(...) 申請(對象[,ARGS [,kwargs]]) - >值
調用a可調用對象,其中包含來自元組參數的位置參數 以及從可選字典kwargs中取得的關鍵字參數。 請注意,類可以調用,如調用()方法。

我無法理解兩行之間的區別。我想在Python 3.5

回答

2

apply找到apply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))等效代碼是一個老派的unpacking arguments 方式。換句話說,下面都產生相同的結果:

results = apply(foo, [1, 2, 3]) 
results = foo(*[1, 2, 3]) 
results = foo(1, 2, 3) 

既然你在哪裏python3.5 apply不再存在正在工作時,該選項無效。此外,您正在將參數作爲列表工作,因此您無法真正使用第三個選項。剩下的唯一選擇就是第二個。我們可以很容易地將您的表情轉換爲該格式。在python3.5等效是:

Atom(*([form.name] + [convert(arg, subst) for arg in list(form.args)])) 

這是在python2.3棄用!

+0

它的工作原理..但你能告訴我在這裏使用哪個概念,以便我可以閱讀它。什麼是原子(* ...)? *代表什麼? –

+0

明白了! http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-parameters –

+1

@丹尼斯 - 這就是我們現在如何在現代python中解壓參數。我已經在上面添加了一個鏈接,你可以在python教程中閱讀更多關於 – mgilson

相關問題