2017-11-03 20 views
0

は、だから私はこのコードを持っていると馬鹿笑私を呼び出すが、私は、これはその後、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

あなたfunction()は何も返さないので、それはNoneを印刷します。

parameter(現在は6)が7と等しくないため、Falseが表示されます。


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

グローバルを使用すると、スレッドセーフではなく、推奨されません。最もクリーンな解決策のように、可変引数のコンテナにパラメータの引数を渡すようにしてください。​​

関連する問題