我想在'primary'或main函数中运行一些函数。我想使用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(),运行下面的两个函数,它们使用'primary'函数中的一些输入日期,然后返回一个3元组,如返回行中所示
然而,有几件事:
我希望2个内部函数以精确的顺序运行。因此,在命令行move_ant(bla,bla,bla,bla)
中运行后,我希望首先运行orientation_and_colour_change()
,然后运行movement()
。在通过orientation_and_colour_change()
功能传递信息后,唯一会改变的信息将是方向,因此我想确保movement()
功能正在使用'已更新'方向。
这可能吗?
答案 0 :(得分:1)
函数的运行顺序几乎就是它的外观:orientation_and_colour_change()
将在movement()
之前运行。
但是,您的参数值可能有问题:ant_row
,ant_col
,orientation
,因为您正在运行这些函数但对其输出不执行任何操作。
这些内部函数不会影响ant_row
等的值,因为它们只影响自身内部的值,除非您明确保存并使用新值,否则不会告诉外部函数新值。不知道这两个内部函数究竟是如何定义的,很难进一步帮助,但假设它们为 row 和 col 返回新值,你可能需要这样的东西:
def move_ant(grid, ant_row, ant_col, orientation):
new_row, new_col, new_orient = orientation_and_colour_change(ant_row,ant_col,orientation)
newer_row, newer_col, newer_orient = movement(new_row,new_col,new_orient)
return newer_row, newer_col, newer_orient
答案 1 :(得分: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)
不要忘记,不同功能中的变量仅存在于该功能中。这被称为变量的范围。仔细看看。这一点很重要。如果你想通过函数改变外部变量,你必须将该变量作为参数传递给函数(给函数一个信息来处理),然后函数必须最后返回该变量(该函数将其返回到外部引用)。
这就是为什么当我运行我的函数时,我将变量设置为等于函数:row,col,orientation = movement(row,col,orientation)
。变量row
,col
和orientation
分别设置为收集并保存函数在return语句中返回的任何信息:return changeRow,changeCol,changeOrientation
这有意义吗?还是我完全忽略了这一点?
答案 2 :(得分: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.append(1)
到列表p,更改是永久性的。但是,如果内部函数仅将新对象重新分配给参数p,则效果仅限于内部函数内部,因为变量的范围。语句p += 1
只是将一个不可变的int对象(比原始对象大1)重新分配给变量p。 p = p + [1]
列表也是一个重新分配。