我仍然是web2py和python的新手,在我的web2py应用程序中,我创建了这个在python shell中运行良好的代码。
python模块: 这些方法的工作方式是用户输入方程式查询以获得答案。如果它是一个加法,则method1可以解决这个问题,与调用其他方法执行不同的代码相同,例如。
def method1():# to do additions
name = input('Please Enter equation here: ').lower()
if '1 + 1':
answer = code
return answer
def method2():# to do subtractions
name = input('Please Enter equation here: ').lower()
if '1 - 1':
answer = code
return answer
在控制器中,我按如下方式导入了方法,尽管有比这些方法更多的方法
from applications ...... import method1
from applications ...... import method2
from applications ...... import method3
from applications ...... import method4
method1 = method1
method1 = method2
method1 = method3
method1 = method4
G0 = [method1, method2, method3, method4]
def Foo():
code..
for (func) in G0:
return func()
问题是只调用列表中位置[0]的method1而不调用其他方法。我想在用户输入任何查询时随机调用任何方法。
答案 0 :(得分:2)
您正在寻找yield
。
G0 = [method1, ..., method4]
def foo():
for method in G0:
yield method()
method_results = foo()
type(method_results) # <class 'generator'>
for result in method_results:
print(result)
## OUTPUT will be each result, one per line
虽然我认为更深层次的问题是:
method1 = method1
method1 = method2 # method1 = ... huh?
method1 = method3 # help I'm trapped in an
method1 = method4 # overwrite factory....
答案 1 :(得分:1)
只调用method1,因为你从循环内部返回,所以循环也退出。你想要什么回报?可能包含所有返回值的列表?
def Foo():
ret_list = []
for (func) in G0:
ret_list.append(func())
return ret_list
答案 2 :(得分:1)
如果您想随机调用方法,请使用random.choice:
def foo1():
print "hello"
def foo2():
print "world"
def foo3():
print "goodbye"
def foo4():
print "world"
GO = [foo1, foo2, foo3, foo4]
import random
def Foo():
func = random.choice(GO)
return func()
In [30]: Foo()
world
In [31]: Foo()
goodbye
In [32]: Foo()
hello
In [33]: Foo()
goodbye
答案 3 :(得分:0)
您是否尝试在G0
中运行所有这些方法?如果是这样,问题是您正在使用return func()
。 return
关键字一旦被调用就会退出Foo()
,这就是为什么只调用一个函数的原因。如果要存储值,则应使用func()
或result = func()
。
如果您只想运行其中一种方法,则需要抛弃for
循环并使用return G0[x]()
,其中x
是您想要的函数的列表索引调用