3

私が抱えているこの小さな問題を手短に教えていただければ、本当にありがたいです。これまでプログラミングで C をいくつかやったことがありますが、Python で関数を介して変数を渡す方法について混乱しています。

この質問は何度も聞かれていると思いますが、何を検索すればよいかわかりません。

私のコードは次のとおりです。

x=0
def getinput(x):
    x = input('Enter x: ')
def addtwo(x):
    x = x + 2
def printans(x):
    print 'x is', + x

getinput(x)
addtwo(x)
printans(x)

printans常に印刷を終了します0。関数内の変数がローカルであるためだと確信していますが、Pythonでそれを修正する方法がわかりません。

助けてくれてありがとう!

4

3 に答える 3

6

問題は、関数内で取得/計算した値を返していないことです。

すべてのコードを紹介することはできませんが、この例を理解すれば、Python でのプログラミング学習の一環として、必要に応じて独自のコードの残りの部分に必要な調整を加えることができます。

def addtwo(x):
    x = x + 2 # compute your result
    return x  # return the result to caller


result = addtwo(5) # save the returned value
print result       # print it out

収量

7

getinput()プログラムで使用したい値を取得するため、 function にも似たようなことをしたいと考えています。これは、printans()単に情報を印刷するだけで、返す必要のあるものを計算しない とは対照的です。

これに慣れてきたら、コード/式を短くできることに注意してください。したがって、上記の例では、関数全体を次のように構成できます。

 def addtwo(x):
    return x + 2

しかし、それまでは、物事を段階的に明示的に行うことに何の問題もありません。

于 2012-07-08T02:27:21.260 に答える
3

これは、グローバル スコープとローカル スコープに関する問題です。関数はxグローバル スコープ値としてアクセスできますが、変数を再割り当てすると、グローバルをシャドウしますが、値は返されません。

# return local 
def getinput(x):
    x = input('Enter x: ')
    return x

# affect global 
def getinput(x):
    global x
    x = input('Enter x: ')

ローカル変数を使用して値を返すことは、完全に正当な状況がない限り、通常、グローバルを変更するよりも望ましい方法です。

可変型と不変型に関する注意

この状況には 2 番目のケースがあり、それは影響しているオブジェクトのタイプに関するものです。たとえば、 と は不変ですintstring結果として新しいオブジェクトを作成せずに値を変更することはできません。listまたはdictは可変型の例です。それらの値を変更して、それらに追加および削除できます。

可変型を検討するlist

aList = []
def func():
    aList.append(1)

print aList # prints []
func()
print aList # prints [1]

これは、グローバル キーワードを指定しなくても問題なくグローバル リストに追加されます。これは、リスト自体が同じリスト オブジェクトであるためです。ただし、そのリストをグローバルなしで新しいリストで上書きすると、グローバルには有効になりません。

aList = []
def func():
    aList = [1]

簡単に言えば、オブジェクトの内容を変更するだけで、新しいオブジェクトを割り当てない場合、変更可能な型に global キーワードは必要ありません。

于 2012-07-08T02:28:00.390 に答える
2

あなたが言ったように、関数内の変数はローカルです。これを修正する方法は、関数から値を返すことです。

def getinput():
    return input('Enter x: ')

def addtwo(x):
    return x + 2

def printans(x):
    print 'x is', + x

x = getinput()
x = addtwo(x)
printans(x)

C 用語で言えば、数値を扱う場合、すべてが値渡しであるかのように機能します。

于 2012-07-08T02:27:26.287 に答える