2017-09-26 18 views
-2

私のPython関数は、私が期待している値を返していません。ここMWEは次のとおりです。関数が実行されていません

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

random_function(c) 
print(c) 

私は、この関数は3を印刷することを期待し、代わりにそれは私がちょうど2.7から3.6に更新しており、これは2.7で働いていた0出力します - 私が間違って何をやっているの?

+4

の下にあなたがここに 'C'という名前の2つの完全に独立変数の持っているように、あなたの関数呼び出しを変更する必要がある - 地元を'random_function()'の中にある変数(実際にはパラメータ)と同じ名前のグローバル変数です。 2つの間に絶対的な接続はありません - 'c'パラメータの値がそのような接続を作成しないので、グローバル' c'を渡します。 – jasonharper

+1

'/'演算子の違いにより、あなたの 'random_function'が何か異なったものを返してきましたが、' print(c) 'は' 0両方ともに。 –

+0

'c 'を関数の先頭に' global c'文でグローバルに宣言します。関数内で作成される変数は、デフォルトではローカルです。より良い選択肢は、戻り値を外側の 'c'変数に明示的に代入することです。 – martineau

答えて

3

メソッドから返された値を格納する必要があります。

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

c= random_function(c) 
print(c) 
+0

しかし、スコープが彼のためにうまくいかない理由を説明してください。 – ifconfig

+2

'必要なもの'を割り当てる... – wwii

+1

戻り値を割り当てるために別の名前を選ぶべきでしょう - 元の 'c'は*消えません*。 – wwii

2

@Dharmeshが言ったように、あなたはそれがrandom_function()から出てきたときにcの値を格納する必要があります。

すなわちc = random_function(c)

理由:

範囲がすべてです。関数内からcの値を変更すると、その関数のスコープ内のcの値にのみ影響し、グローバルコンテキストではその値は変更されません。

cに割り当てられた値を関数内から保持するには、関数によって返された値をcに割り当てる必要があります。

0

グローバルに割り当てられたc値を印刷しています。

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c # -- this variable scope is local 

random_function(c) 
print(c)  #-- prints Global variable 

あなたが期待通りに印刷する、あなたは

print (random_function(c)) 

または

c = random_function(c) # this will re assign global value of 'c' with function return value 
print(c) 
関連する問題