0

「プライマリ」またはメイン関数内でいくつかの関数を実行したいと思います。何が起こっているのかを実際に実行する主な方法として function1() を使用したいと思います...つまり、スクリプトを実行してから、実際にスクリプトを使用するために function1() を使用します。

これは例であり、物事を少し明確にするかもしれません:

def move_ant(grid, ant_row, ant_col, orientation):

    orientation_and_colour_change(ant_row,ant_col,orientation)

    movement(ant_row,ant_col,orientation)

    return ant_row, ant_col, orientation

したがって、これらの 4 つの変数入力で moveant() を使用し、「プライマリ」関数からの入力日付の一部を使用する以下の 2 つの関数を実行してから、戻り行に見られるように 3 タプルを返します。

ただし、いくつかの点
があります。2 つの内部関数を正確な順序で実行する必要があります。したがって、コマンドラインmove_ant(bla,bla,bla,bla)で実行した後orientation_and_colour_change()、最初に実行され、次にmovement()実行されます。関数を介して情報を渡した後に変更される唯一の情報は方向であるため、関数が「更新された」方向を使用してorientation_and_colour_change()いることを確認したいと思います。 それは可能ですか?movement()

4

3 に答える 3

1

あなたはそれを完全に行うことができます!あなたの例はちょっと紛らわしいですが、正しいサンプルコードを提供しようとします:

#define you functions
def move_ant(grid,row,col,orientation):
    row,col,orientation = orientation_and_color_change(row,col,orientation)#run function and return values.

    row,col,orientation = movement(row,col,orientation)#run function and return changed vals

    return row,col,orientation

def orientation_and_color_change(changeRow,changeCol,changeOrientation):
    #do stuff with the variables you've inputted
    return changeRow,changeCol,changeOrientation

def movement(moveRow,moveCol,moveOrientation):
    #do stuff with variables
    return changeRow,changeCol,changeOrientation
#RUN THE FUNCTION
#not sure how you have you're vars set up
grid = [10,30]#random numbers! Yay!
row = 1
col = 1
orientation = 0
row,col,orientation = move_ant(grid,row,col,orientation)

別の関数の変数は、その関数内にのみ存在することを忘れないでください。これを変数のスコープと呼びます。調べる。それは重要です。関数によって外部変数を変更したい場合は、その変数をパラメーターとして関数に渡す必要があり(関数に操作する情報を与えます)、関数は最後にその変数を返す必要があります (関数はそれを外部参照に戻します)。

そのため、関数を実行するときに、変数を function: に等しく設定しますrow,col,orientation = movement(row,col,orientation)。変数rowcol、およびorientationは、それぞれ関数が return ステートメントで返す情報を収集して保存するように設定されています。return changeRow,changeCol,changeOrientation

これは理にかなっていますか?それとも、私は要点を完全に見逃していましたか?

于 2013-09-04T23:58:08.497 に答える
0

以下のコードを検討してください。

def inner1(p):
    p.append(1)
def inner2(p):
    p += 1
def inner3(p):
    p = p + [1]
def outer(f, p):
    f(p)
    print p
outer(inner1, [0])
outer(inner2, 0)
outer(inner3, [0])

出力は

[0, 1]
0
[0]

このサンプル コードは、内部関数が変更可能なオブジェクトのを、たとえばリスト p に変更すると、変更が永続的であることを示しています。ただし、内部関数が新しいオブジェクトをパラメーター p に再割り当てするだけの場合、変数のスコープのため、効果は内部関数内でのみ制限されます。このステートメントは、不変の int オブジェクト (元のオブジェクトよりも 1 大きい) を変数 p に再割り当てするだけです。for list も再代入です。 p.append(1)p += 1p = p + [1]

于 2013-09-05T00:42:12.020 に答える