2017-11-03 60 views
0

所以我有這樣的代碼,並叫我白癡哈哈,但我不能讓這個打印無則7.爲什麼這不打印無,然後7? Python的

代碼:

def function(parameter): 
    parameter = parameter + 1 
parameter = 6 
print(function(parameter)) 
print(parameter == 7) 

我需要知道如何改變具有可變與函數中的參數名稱相同。

任何幫助將不勝感激,如果你不明白這個問題,我會很樂意解釋更多。

+0

如果您*必須*將其用作參數,則不能,因爲參數被強制爲局部變量。無論如何,這聽起來不是一個好主意。 –

+0

理想情況下,您不希望使用全局變量,因爲它們不如局部變量那麼高效 - 爲什麼不簡單地返回'parameter + 1'並設置'parameter = function(parameter)'或者沿着這些行? –

+0

可能重複:https://stackoverflow.com/questions/10235973/modifying-global-variable-with-same-name-as-local-variable – Attie

回答

0

定義parameter全球和實際上並不把它作爲參數:

def function(): 
    global parameter 
    parameter += 1 
+1

然後將最終的打印改爲'print(parameter)',而不是'print (paramater == 7)',如果你想要它實際打印'7'。 – ShadowRanger

+0

事實上,我甚至沒有注意到在他的代碼 – GPhilo

2

它打印None因爲你function()不返回任何東西。

它打印False,因爲parameter(這是目前6)不等於7


要改變正在由局部變量屏蔽了全局變量,使用globals()功能:

def function(parameter): 
    globals()['parameter'] += 1 
+0

DRY:'globals()['parameter'] + = 1' – ShadowRanger

+0

或者說,相同的效果。 (我試圖儘可能少地改變他) – Attie

1

因爲我真的恨全局變量,這是我會怎麼做:

def function(parameter): 
    return parameter + 1 
parameter = function(6) 
print(parameter) 
print(parameter == 7) 

輸出

7 
True 

基本上,通過指定一個與參數名稱相同的變量並分配函數,您可以將parameter更改爲如同一個變量。請注意,事實並非如此,它實際上並不是同一個對象。但是,如果你的目標是使用它的作品相同的名稱。

0

可以做的是指它作爲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' 

然而,有一個原因,我把這種瘋狂的,這是因爲如果一個函數有副作用,你永遠無法從外面出來。這就是你想避免的複雜性。因爲你的代碼應該儘可能地預測。原因很明顯。

0

使用全局變量既不是線程安全的也不推薦使用。看起來最乾淨的解決方案是將參數參數傳遞給可變容器。請參閱​​