web-dev-qa-db-ja.com

python:関数の入力パラメーターの値を変更するには?

以下のように、関数内の文字列の値を変更しようとしました:

>>> def appendFlag(target, value):
...     target += value
...     target += " "
...
>>> appendFlag
<function appendFlag at 0x102933398>
>>> appendFlag(m,"ok")
>>> m
''

まあ、「ターゲット」は関数内でのみ変更されるようですが、新しい値を関数外で実行可能にする方法は?ありがとう。

4
Hind Forsum

これはpythonで返されることによって処理されます。

def appendFlag(target, value):
   target += value
   target += " "
   return target

次のように使用できます。

m = appendFlag(m,"ok")

次のようないくつかの変数を返すこともできます。

def f(a,b):
   a += 1
   b += 1
   return a,b

次のように使用します。

a,b = f(4,5)
5

変更可能なオブジェクトを使用する必要があります

>>> m = []
>>> def appendFlag(target, value):
...     target.append(value)
...     target.append(" ")
...
>>> appendFlag(m, "ok")
>>> m
['ok', ' ']
2
Kylejie

関数は新しい値を返す必要があります。 target変数は、appendFlag関数内でのみスコープを持ちます。

def appendFlag(target, value):
   ...
   return target

m = appendFlag(m, "ok")
1
dwagon

mの値を更新するには、連結した値をreturnして変数mに割り当てる必要があります。

def appendFlag(target, value):
    target += value
    target += " "
    return  target

print(appendFlag)
m = "hey"
m = appendFlag(m,"ok")
print(m)

[〜#〜]出力[〜#〜]

<function appendFlag at 0x000001423C99F268>
heyok 
1
DirtyBit

関数内の変数は関数スコープのみを持っています。関数内から変数の値を変更した場合、関数外に反映されません。グローバル変数mの値を変更する場合は、関数の外部から次のように更新します

 `def a(target, value):
        target += value
        target += " "
        return target
  m=''
  m=a(m,'ok')

`

1
Agus Mathew