有没有办法
statements = [statement1, statement2, statement3, ...]
在Python中?
我希望能够做到:
run statements[i]
或:
f = statements[j]
(其中f是函数)
P.S。我想要一个赋值语句列表(lambda不起作用),我宁愿不创建函数。例如:
switch = [output = input, output = 2 * input, output = input ** 2]
除了为每个条目定义一个函数之外还有其他方法吗?
感谢所有回答我问题的人。
答案 0 :(得分:4)
是。函数是python中的一等公民:即您可以将它们作为参数传递,甚至将它们存储在数组中。
有一个功能列表并不罕见: 您可以在python中构建一个简单的注册表,如下所示:
#!/usr/bin/env python
processing_pipeline = []
def step(function):
processing_pipeline.append(function);
return function
@step
def step_1(data):
print("processing step1")
@step
def step_2(data):
print("processing step2")
@step
def step_3(data):
print("processing step3")
def main():
data = {}
for process in processing_pipeline:
process(data)
if __name__ == '__main__':
main()
这里processing_pipeline
只是一个包含函数的列表。
step
是一个所谓的装饰器 -function,它的作用类似于闭包。
python解释器在将每个装饰@step
的文件解析为管道时添加。
您可以使用迭代器或processing_pipeline[i]
访问该函数:尝试添加processing_pipeline[2](data)
。
答案 1 :(得分:0)
这很好:
def addbla(item):
return item + ' bla'
items = ['Trump', 'Donald', 'tax declaration']
new_items = [addbla(item) for item in items]
print(new_items)
它为items
中的每个项目添加政治声明:)
答案 2 :(得分:0)
如果要运行语句块,请使用函数。
def run_statements():
func()
for i in range(3):
if i > 1:
break
extra_func()
run_statements()
如果要从列表中选择特定语句,请将每个语句包装在函数中:
def looper():
for i in range(3):
if i>1:
break
def func():
print('hello')
statements = [looper, func]
statements[-1]()
如果您的语句只是函数调用,则可以直接将它们放入列表中而无需创建包装函数。
答案 3 :(得分:0)
你可以这样做:
funcs = [min, max, sum]
f = funcs[0]
funcs[1](1,2,3) # out 3
funcs[2]([1,2,3]) # out 6
答案 4 :(得分:0)
我希望能够做到:
run statements[i]
嗯,你可以通过 exec :
来做到这一点statements = ["result=max(1,2)","print(result)"]
for idx in range(len(statements)):
exec(statements[idx])
print(result)
希望它有所帮助!
答案 5 :(得分:0)
既然我们已经采取了其他方式,我认为我不会这样做:
def a(input):
return pow(input, 3)
def b(input):
return abs(input)
def c(input):
return "I have {0} chickens".format(str(input))
#make an array of functions
foo = [a,b,c]
#make a list comprehension of the list of functions
dop = [x(3) for x in foo]
print dop