所以我有這樣的代碼,並叫我白癡哈哈,但我不能讓這個打印無則7.爲什麼這不打印無,然後7? Python的
代碼:
def function(parameter):
parameter = parameter + 1
parameter = 6
print(function(parameter))
print(parameter == 7)
我需要知道如何改變具有可變與函數中的參數名稱相同。
任何幫助將不勝感激,如果你不明白這個問題,我會很樂意解釋更多。
所以我有這樣的代碼,並叫我白癡哈哈,但我不能讓這個打印無則7.爲什麼這不打印無,然後7? Python的
代碼:
def function(parameter):
parameter = parameter + 1
parameter = 6
print(function(parameter))
print(parameter == 7)
我需要知道如何改變具有可變與函數中的參數名稱相同。
任何幫助將不勝感激,如果你不明白這個問題,我會很樂意解釋更多。
定義parameter
全球和實際上並不把它作爲參數:
def function():
global parameter
parameter += 1
然後將最終的打印改爲'print(parameter)',而不是'print (paramater == 7)',如果你想要它實際打印'7'。 – ShadowRanger
事實上,我甚至沒有注意到在他的代碼 – GPhilo
它打印None
因爲你function()
不返回任何東西。
它打印False
,因爲parameter
(這是目前6
)不等於7
。
要改變正在由局部變量屏蔽了全局變量,使用globals()
功能:
def function(parameter):
globals()['parameter'] += 1
DRY:'globals()['parameter'] + = 1' – ShadowRanger
或者說,相同的效果。 (我試圖儘可能少地改變他) – Attie
因爲我真的恨全局變量,這是我會怎麼做:
def function(parameter):
return parameter + 1
parameter = function(6)
print(parameter)
print(parameter == 7)
輸出
7
True
基本上,通過指定一個與參數名稱相同的變量並分配函數,您可以將parameter
更改爲如同一個變量。請注意,事實並非如此,它實際上並不是同一個對象。但是,如果你的目標是使用它的作品相同的名稱。
你可以做的是指它作爲global
。什麼可能會幫助你更好的是使用函數的概念,它們是:提供任何給定的輸入,它們產生一些結果。
所以,你可能想使用一個return
:
def fun(val):
return val;
parameter = val(10)
print(parameter) # prints '10'
不過,如果你想參考變量,在Python中,你可以做各種瘋狂的東西,比如訪問模塊範圍作爲一個對象,並改變它的值有:
def fun(val):
import sys;
sys.modules[__name__].parameter = val
parameter = 10
fun(1)
print(parameter) # prints '1'
然而,有一個原因,我把這種瘋狂的,這是因爲如果一個函數有副作用,你永遠無法從外面出來。這就是你想避免的複雜性。因爲你的代碼應該儘可能地預測。原因很明顯。
使用全局變量既不是線程安全的也不推薦使用。看起來最乾淨的解決方案是將參數參數傳遞給可變容器。請參閱
如果您*必須*將其用作參數,則不能,因爲參數被強制爲局部變量。無論如何,這聽起來不是一個好主意。 –
理想情況下,您不希望使用全局變量,因爲它們不如局部變量那麼高效 - 爲什麼不簡單地返回'parameter + 1'並設置'parameter = function(parameter)'或者沿着這些行? –
可能重複:https://stackoverflow.com/questions/10235973/modifying-global-variable-with-same-name-as-local-variable – Attie