簡體   English   中英

Python參數解包

[英]Python argument unpacking

有時,某些函數會交換一些非常特殊的數據元組。

>>> def foo():
...    return (1,2,4)
...
>>> def f(a, b, v):
...    x, y, z = v
...    # ...
...    # suppose there are 2-4 lines of some trivial code
...    # ...
...    print a, b, '(', x, y, z, ')'
...
>>> f(1, 2, foo())
1 2 ( 1 2 4 )

這里的用例是它確實是臨時數據集,因此我們不想引入新類。 (我們還假設元組本身只是一堆數據,因此通過索引訪問元組的元素,如print a, b, '(', v[0], v[1], v[2], ')'會讓讀者感到困惑。)

所以無論如何。 我們決定傳遞元組,我們想解包(解構)它們。 有什么好處的,你可以在函數的參數列表中解壓縮參數元組,所以f可以簡化一下:

>>> def f(a, b, (x,y,z)):
...    # ...
...    # the same implementation
...    # ...
...    print a, b, '(', x, y, z, ')'

它讓讀者感覺更清潔。 它只是一行代碼,但它也是完全不必要的代碼,它也使該函數的簽名看起來更清晰。

這種技術有任何隱藏的陷阱嗎? 它是一個普遍不贊成的功能(在這種情況下,我感興趣的原因)?

我使用python 2.7。 謝謝!

在Python3中, 刪除元組參數解包功能 按照PEP 3113:

不幸的是,Python豐富的功能簽名功能的這一特性雖然在某些情況下很方便,但卻導致了比它們更值得的問題。

所以不要使用它; 它將使您的代碼僅與Python2兼容。 避免在PEP中討論的元組參數解包的其他原因包括

  • 內省問題
  • 如果刪除,不會喪失能力
  • 規則的例外
  • 無信息的錯誤消息
  • 用處不多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM