機能間のPython Preassリスト -- python フィールド と list フィールド と parameter-passing フィールド 関連 問題

python passing list between functions












1
vote

問題

日本語

リストを渡すのに苦労しています( holder を含む holder )他の関数に渡します。 check_neighbours はリストを拾い上げてから、さらに処理を行います。 main() で正しく渡していると思いますが、 check_neighbours の内側に呼び出されたときにその内容を表示するためにリストを表示するために必要なことはわかりません。 <コード> = Holderを試してみましたが、エラーが発生しました:

グローバル名 "Holder"は定義されていません

ここで holder = #something6 を置く必要があると思いますが、私は何を把握することはできません。

<事前> <コード> def create_matrix(file): with open('network.txt') as f: Alist = [] for line in f: part = [] for x in line.split(','): part.append(int(x)) Alist.append(part) return Alist def start_node(Alist): i=0 j=0 #point node to pos [0][0] of Alist node = Alist[i][j] #create a list to hold co-ordinates holder = [] holder.append(i) holder.append(j) print holder return node, holder #test neighbours to see if they can be used def check_neighbours(node, Alist): holder = #something #code begins here def main(): file = ("F:/media/KINGSTON/Networking/network.txt") Alist = create_matrix(file) node = start_node(Alist) holder = check_neighbours(node, Alist) main()
英語

I am struggling to pass a list (holder, which contains [0,0]) to another function. I want check_neighbours to pick up the list and then do some further processing. I think I am passing it correctly in main() but I am not sure what I must do to get the list to simply display its contents when called upon inside check_neighbours. I have tried a = holder but I received the error:

global name "holder" is not defined

I believe I must put holder = #something here but I cannot figure out what.

 def create_matrix(file):     with open('network.txt') as f:         Alist = []         for line in f:             part = []             for x in line.split(','):                 part.append(int(x))             Alist.append(part)     return Alist  def start_node(Alist):         i=0         j=0         #point node to pos [0][0] of Alist         node = Alist[i][j]         #create a list to hold co-ordinates         holder = []         holder.append(i)         holder.append(j)         print holder          return node, holder  #test neighbours to see if they can be used def check_neighbours(node, Alist):         holder = #something     #code begins here def main():         file = ("F:/media/KINGSTON/Networking/network.txt")         Alist = create_matrix(file)         node = start_node(Alist)         holder = check_neighbours(node, Alist) main() 
</div
        

回答リスト

4
 
vote
vote
ベストアンサー
 

<コード> start_node の終わりに、これを行います。

<事前> <コード> return node, holder

...しかしあなたがそれを呼び出すとき、あなたはこれを行います:

<事前> <コード> node = start_node(Alist)

それはあなたのローカル node 変数は node, holder のタプルとして終了します。あなたはそれを望んでいません。これが欲しい:

<事前> <コード> node, holder = start_node(Alist)

なので、「Main()関数で正しく渡していると思う」と言っていますが、<コード> main 関数はまったく渡していません。 :

<事前> <コード> holder = check_neighbours(node, Alist)

holder はここでは holder に登録する方法はありません。

PLUS、 return node, holder 1 を定義したときは、次のとおりです。

<事前> <コード> return node, holder 2

これは 998877613 パラメータを取りません。 return node, holder 4 という名前の新しいローカル変数を定義します。だから、それらの2行を次のように変更します。

<事前> <コード> return node, holder 5

と呼んでそれを呼び出します:

<事前> <コード> main16

また、 return node, holder 7 の結果を return node, holder 8 変数に割り当てて、渡されたものは何でも置き換えます。しばしば、それは完全に合理的なことです。 ( return node, holder 9 を考えると、それが実際に必要なものであることを確認してください(そしてもちろん、<コード> node = start_node(Alist) 1 を実行して<コード> node = start_node(Alist) 0 が終了するようにしてください。または他の適切な値を返します。

最後に、私があなたの他の質問で言ったように:あなたがあなたのパラメーターとあなたが渡す価値のために同じ名前を使い続けるならば、あなたはこのように私自身を混乱させ続けるつもりです。あなたがさまざまな名前を使った場合は、あなたが行方不明のものを見ることがはるかに簡単になります。それぞれの接頭辞のように単純なものでさえ:

<事前> <コード> node = start_node(Alist) 2
 

At the end of start_node, you do this:

return node, holder 

… but when you call it, you do this:

node = start_node(Alist) 

That means your local node variable ends up as a tuple of node, holder. You don't want that. You want this:

node, holder = start_node(Alist) 

Meanwhile, you say "I think I am passing it correctly in the main() function", but you're not passing it at all in the main function:

holder = check_neighbours(node, Alist) 

There's no way for check_neighbours to get holder here, because you're not giving it holder here.

Plus, when you defined check_neighbours, you did this:

def check_neighbours(node, Alist):     holder = #something  

This doesn't take a holder parameter, it defines a new local variable named holder. So, change those two lines to:

def check_neighbours(node, Alist, holder): 

And call it with:

holder = check_neighbours(node, Alist, holder) 

Also, note that you're assigning the result of check_neighbors back to the holder variable, replacing whatever you passed in. Often, that's a perfectly reasonable thing to do (think my_name = my_name.replace('Joseph', 'Joe')), but make sure it really is what you want (and, of course, make sure that check_neighbors ends by doing a return holder, or returning some other appropriate value).

Finally, as I said in your other question: If you keep using the same name for your parameters and the values you pass in, you're going to keep confusing yourself like this. If you used different names, it would be much easier for you to see what you're missing. Even something as simple as a prefix on each one:

def main():     file = ("F:/media/KINGSTON/Networking/network.txt")     my_list = create_matrix(file)     my_node, my_holder = start_node(my_list)     my_new_holder = check_neighbours(my_node, my_list, my_holder) 
</div
 
 
     
     

関連する質問

0  Rの関数パラメータを参照する  ( Referencing a function parameter in r ) 
関数に取り組んで、着信パラメータを参照する方法を知る必要があります。 たとえば、Pythonや他の言語の言語では、入力パラメータを参照することができます。 <事前> <コード> sys.argv[1:]. Rでパラメータの名前を参照する方法は? 私が解...

1  AngularyJS NG-Repeat変数をJavaScriptに渡す方法  ( How to pass angularjs ng repeat variable to javascript click event ) 
角度NGリピート変数をJavaScript OnClickイベントに渡す方法を知りたいです。 私の角の中継器 <事前> <コード> println()0 マイスクリプト機能 <事前> <コード> println()1 エラー: subは定義されていない(b...

1  パラメータを持つKMLロードはマップにロードされません  ( Kml load with parameters doesnt load on map ) 
GoogleマップにKMLをロードしようとしていますが、やることはできません。クリックイベントの後にKMLをロードしてから、URLを含む関数に呼び出します。 <事前> <コード> function LoadRoute(latlng, param1, para...

-1  クラスの新しいインスタンスを作成するとともに、さまざまなクラスからのArrayListを使用する  ( Using arraylist from different class with out creating new instance of the class ) 
私は似ていた問題 フォーム2からArrayListを使用しようとしています.1。フォーム2のコンテンツをNULLのコンテンツにするため、フォーム2の新しいインスタンスを作成できません。コードの一部を変更することでこれを行うことができますか? ダミーの例推奨。...

0  インターフェイス実装間で自動的に区別を自動的に過負荷にすることができますか?  ( Can method overloading discriminate automatically between an interface implement ) 
インターフェイスを実装する2つのクラスがあります。 <事前> <コード> public interface Vehicle {…} public class Car implements Vehicle {…} public class Shoes imple...

0  NSIS発信者ファイルパスを取得します  ( Nsis get caller file path ) 
私は、JARファイルを起動するNSIに書き込まれたJava Launcher EXEファイルを作成しています( http:// NSIS。 SourceForge.net/a_SlightLy_Better_Java_Launcher )。そのパラメータがex...

171  JavaScriptファイルにパラメータを渡す  ( Passing parameters to javascript files ) 
多くの場合、私のWebページに特定の変数を定義する必要がある使用したいJavaScriptファイルがあります。 だからコードはこのようなものです: <事前> <コード> <script type="text/javascript" src="file.js">...

10  msaccess 2003 - あるフォームから別のフォームに値を渡すためのVBA  ( Msaccess 2003 vba for passing a value from one form to another ) 
それで、どのようなフォームから別のフォームに値を渡すことができますか?例:ユーザー選択はリストからの組織であり、これがユーザーが旅行に関するさまざまな情報を入力できるようになる旅行フォームを開きます。ある場所で私は彼らが訪問している組織の連絡先情報(POCのた...

1  ARRAYをHLSL頂点シェーダからピクセルシェーダに渡す  ( Pass an array from hlsl vertex shader to pixel shader ) 
頂点シェーダから出力されるパラメータの束を持ち、それらをピクセルシェーダに渡したい。 これを行う通常の方法は、出力構造を宣言することです <事前> <コード> struct vOut { float4 param0 : TEXCOORD0 ; ...

30  PHP、コマンドラインからPHPスクリプトへのパラメータを渡す  ( Php pass parameters from command line to a php script ) 
PHPコマンドラインインターフェイスからパラメータを渡し、次にPHPスクリプトを使用して値を読み込み、次のようなものです。 <事前> <コード> <?php $name1 = $argv[1]; echo $name1; ?> このような...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有