web-dev-qa-db-ja.com

ある関数内で定義された変数を別の関数から呼び出す

私がこれを持っている場合:

_def oneFunction(lists):
    category=random.choice(list(lists.keys()))
    Word=random.choice(lists[category])

def anotherFunction():
    for letter in Word:              #problem is here
        print("_",end=" ")
_

以前にlistsを定義したので、oneFunction(lists)は完全に機能します。

私の問題は、6行目でWordを呼び出すことです。同じWord=random.choice(lists[category])定義で最初の関数の外側でWordを定義しようとしましたが、それはWordになりますoneFunction(lists)を呼び出しても常に同じです。

最初の関数を呼び出してから2番目の関数を呼び出すたびに、異なるWordを使用できるようにします。

WordoneFunction(lists)の外側に定義せずにこれを行うことはできますか?

18
JNat

はい。クラスで関数を定義することと、Wordをメンバーにすることの両方を検討する必要があります。これはきれいです

class Spam:
    def oneFunction(self,lists):
        category=random.choice(list(lists.keys()))
        self.Word=random.choice(lists[category])

    def anotherFunction(self):
        for letter in self.Word:              
        print("_",end=" ")

クラスを作成したら、それをオブジェクトにインスタンス化し、メンバー関数にアクセスする必要があります。

s = Spam()
s.oneFunction(lists)
s.anotherFunction()

別のアプローチは、oneFunctionでWordを返すようにして、oneFunctionでWordの代わりにanotherFunctionを使用できるようにすることです。

>>> def oneFunction(lists):
        category=random.choice(list(lists.keys()))
        return random.choice(lists[category])


>>> def anotherFunction():
        for letter in oneFunction(lists):              
        print("_",end=" ")

そして最後に、anotherFunctionを作成し、oneFunctionを呼び出した結果から渡すことができるパラメーターとしてWordを受け入れることもできます。

>>> def anotherFunction(words):
        for letter in words:              
        print("_",end=" ")
>>> anotherFunction(oneFunction(lists))
34
Abhijit

pythonのすべてがオブジェクトと見なされるため、関数もオブジェクトです。このメソッドも使用できます。

def fun1():
    fun1.var = 100
    print(fun1.var)

def fun2():
    print(fun1.var)

fun1()
fun2()

print(fun1.var)
14
Python Learner

最も簡単なオプションは、グローバル変数を使用することです。次に、現在のWordを取得する関数を作成します。

current_Word = ''
def oneFunction(lists):
    global current_Word
    Word=random.choice(lists[category])
    current_Word = Word

def anotherFunction():
    for letter in get_Word():              
          print("_",end=" ")

 def get_Word():
      return current_Word

この利点は、関数が異なるモジュールにあり、変数にアクセスする必要がある可能性があることです。

1
0n10n_
def anotherFunction(Word):
    for letter in Word:              
        print("_", end=" ")

def oneFunction(lists):
    category = random.choice(list(lists.keys()))
    Word = random.choice(lists[category])
    return anotherFunction(Word)
1
Allan Mwesigwa