過去数時間、ここや他の場所を読んだり、実験したりしましたが、異なる関数間で値を(変数として)渡すという非常に基本的な概念であると確信していることを本当に理解していません。
たとえば、ある関数のリストに値の束全体を割り当て、後でそのリストを別の関数で使用したい場合:
list = []
def defineAList():
list = ['1','2','3']
print "For checking purposes: in defineAList, list is",list
return list
def useTheList(list):
print "For checking purposes: in useTheList, list is",list
def main():
defineAList()
useTheList(list)
main()
関数の引数が何をするかについての私の理解に基づいて、私はこれが次のようになると期待しています。
ただし、これは明らかに誤った理解です。私の出力は次のとおりです。
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
それで、「return」は明らかに私が思っていることをしないか、少なくとも私が思っているようにはしないので...実際に何をするのでしょうか?この例を使用して、defineAList()からリストを取得し、useTheList()内で使用するために何をしなければならないのかを教えてください。私はそれらが起こっているのを見ると物事をよりよく理解する傾向がありますが、私が見た適切な引数の受け渡しの例の多くは、まだ慣れていないコードを使用し、何が起こっているのかを把握する過程で、この概念を実際に理解していない。 2.7を使用しています。
ETA-過去に、同様の質問をして、ローカルだけでなくグローバル変数を使用することが提案されました。ここで関連がある場合-私が取っているクラスの目的のために、グローバルを使用することは許可されていません。
ありがとうございました!
これは実際に起こっていることです:
global_list = []
def defineAList():
local_list = ['1','2','3']
print "For checking purposes: in defineAList, list is", local_list
return local_list
def useTheList(passed_list):
print "For checking purposes: in useTheList, list is", passed_list
def main():
# returned list is ignored
returned_list = defineAList()
# passed_list inside useTheList is set to global_list
useTheList(global_list)
main()
これはあなたが望むものです:
def defineAList():
local_list = ['1','2','3']
print "For checking purposes: in defineAList, list is", local_list
return local_list
def useTheList(passed_list):
print "For checking purposes: in useTheList, list is", passed_list
def main():
# returned list is ignored
returned_list = defineAList()
# passed_list inside useTheList is set to what is returned from defineAList
useTheList(returned_list)
main()
一時的なreturned_list
をスキップして、戻り値をuseTheList
に直接渡すこともできます。
def main():
# passed_list inside useTheList is set to what is returned from defineAList
useTheList(defineAList())
あなたはただ一つの重要なステップを見逃しています。明示的に戻り値を2番目の関数に渡す必要があります。
def main():
l = defineAList()
useTheList(l)
代わりに:
def main():
useTheList(defineAList())
または(これを行うべきではありませんが、最初はいいように思えるかもしれませんが、グローバルは長期的には悲しみを引き起こすだけです。):
l = []
def defineAList():
global l
l.extend(['1','2','3'])
def main():
global l
defineAList()
useTheList(l)
この関数は値を返しますが、コードで想定されているように、グローバルな名前空間でシンボルを作成しません。実際に呼び出しスコープで戻り値をキャプチャし、その後の操作に使用する必要があります。
あなたがそれを割り当てなければあなたのリターンは役に立たない
list=defineAList()
名前空間の概念を読んでください。関数で変数を割り当てる場合、この関数の名前空間でのみ変数を割り当てます。しかし、明らかに、すべての機能間で使用したいです。
def defineAList():
#list = ['1','2','3'] this creates a new list, named list in the current namespace.
#same name, different list!
list.extend['1', '2', '3', '4'] #this uses a method of the existing list, which is in an outer namespace
print "For checking purposes: in defineAList, list is",list
return list
または、次のように渡すことができます。
def main():
new_list = defineAList()
useTheList(new_list)
ある関数から他の関数への引数として変数を渡すことは、このように行うことができます
このような関数を定義する
def function1(): global a a=input("Enter any number\t") def function2(argument): print ("this is the entered number - ",argument)
このような関数を呼び出す
function1()
function2(a)
return
は値を返します。その値にどのような名前を付けたかは関係ありません。それを返すことは、他の誰かがそれを使用できるように、単に「渡す」だけです。使用する場合は、外部から取得する必要があります。
lst = defineAList()
useTheList(lst)
list
の中からdefineAList
を返すことは、「プログラムの残り全体がその変数を使用できるようにする」ことを意味しません。これは、「この変数を渡して、プログラムの残りの部分にそれをつかんで使用する機会を与える」ことを意味します。その値を使用するには、その値を関数外の何かに割り当てる必要があります。また、このため、list = []
を使用して事前にリストを定義する必要はありません。 defineAList
内で、新しいリストを作成して返します。このリストは、最初にlist = []
で定義したリストとは関係がありません。
ちなみに、変数名をlist
からlst
に変更しました。 list
を変数名として使用することはお勧めできません。これは既に組み込みのPython型の名前であるためです。 list
という独自の変数を作成すると、組み込みの変数にアクセスできなくなります。