有時函數會給出一個您只想丟棄的返回值,而不是發送到輸出流。處理這個問題的優雅方式是什麼?如何優雅地忽略Python函數的某些返回值?
請注意,我們正在討論的功能會返回一些您無法更改的功能。
def fn():
return 5
我個人曾經使用null
,但我正在尋找一個更Python的方式:
null = fn()
有時函數會給出一個您只想丟棄的返回值,而不是發送到輸出流。處理這個問題的優雅方式是什麼?如何優雅地忽略Python函數的某些返回值?
請注意,我們正在討論的功能會返回一些您無法更改的功能。
def fn():
return 5
我個人曾經使用null
,但我正在尋找一個更Python的方式:
null = fn()
表明這一點的標準方法是分配你不想_
結果。舉例來說,如果一個函數返回兩個值,但你只想要第一個,這樣做:
value, _ = myfunction(param)
大多數Python的棉短絨是否承認所用的_
,而不是抱怨未使用的變量。
如果你想忽略所有的回報,那麼根本不要分配任何東西;除非你告訴它,否則Python不會對結果做任何事情。打印結果只是Python shell中的一個功能。
你不會忽略它,你將它分配給一個全局變量。引用nosklo:當你將gettext功能添加到別人的代碼(定義了一個叫'_'的函數)時,「這個」約定「很糟糕」,所以它應該被禁止。如果有人使用他們的最後輸出作爲輸入怎麼辦? – JohnJohn 2018-01-24 00:49:05
我真的很喜歡分配給空的想法 - 但它確實有一個意想不到的副作用:
>>> print divmod(5, 3)
(1, 2)
>>> x, null = divmod(5, 3)
>>> print null
2
對於那些誰碼大多是在Python,這可能不是一個問題:空應該是公正儘可能多的垃圾價值_。
但是,如果您要在Javascript之類的其他語言之間切換,則完全可能會意外地使用null而不是None來編寫比較。 Python並沒有吐出與未知變量比較的常見錯誤,而只是默默接受它,現在你得到的是真實和錯誤的條件,你完全沒有想到......這是你盯着的那種錯誤一小時的代碼並不能確定是錯誤的,直到它突然襲擊你,你覺得自己像一個白癡。
明顯的修復不起作用,或者:
>>> x, None = divmod(5, 3)
File "<stdin>", line 1
SyntaxError: cannot assign to None
...這實在是令人失望。 Python中(和地球上所有其他語言)允許的參數所有是隱含扔掉,不管返回多少個變量:
>>> divmod(5, 3)
...但明確扔掉參數通過分配給他們是不允許的?
它感覺有點愚蠢的Python解釋器的特點是分配給無作爲語法錯誤,而不是有意的選擇與明確的結果。任何人都可以想到一個理由嗎?
「發送到輸出流」是什麼意思? – BrenBarn 2014-10-08 07:58:17
僅在全局範圍內評估'fn()'會「打印」值5. – PascalVKooten 2014-10-08 07:58:44
這隻在交互式解釋器中才是正確的。如果將文件作爲腳本運行,它不會發生,並且不會影響任何內容。我不認爲在交互式會話中抑制輸出的需要是一個足夠大的交易,不僅僅是您已經擁有的解決方案。 – BrenBarn 2014-10-08 07:59:58