由於Python的範圍規則,在範圍內初始化之後的所有變量都可用。由於條件不會引入新的範圍,因此不一定需要其他語言的構造(例如在該條件之前初始化變量)。例如,我們可能有:條件變量初始化的pythonic方式是什麼?
def foo(optionalvar = None):
# some processing, resulting in...
message = get_message()
if optionalvar is not None:
# some other processing, resulting in...
message = get_other_message()
# ... rest of function that uses message
或者,我們可以有替代:
def foo(optionalvar = None):
if optionalvar is None:
# processing, resulting in...
message = get_message()
else:
# other processing, resulting in...
message = get_other_message()
# ... rest of function that uses message
當然,get_message
和get_other_message
功能可能是多行代碼,並基本上不相關的(你可以假設每個路徑之後的程序狀態是相同的);這裏的目標是使message
可以在該部分的功能之外使用。
我見過的其他問題,多次使用後一種結構,如:
其中結構會更容易接受?
這不完全取決於您是否希望'get_message'有條件地或無條件地運行嗎? – delnan
這裏的想法不是調用的函數,而是'message'的構造:函數本身是不相關的。 –
無論是否爲函數,其中一種語義差異是無條件地運行一半的代碼。如果它有所作爲,那麼辯論風格就沒什麼意義了。 – delnan