Python - 作业列表

时间:2016-08-13 05:44:03

标签: python

有没有办法

statements = [statement1, statement2, statement3, ...]
在Python中

我希望能够做到:

run statements[i]

或:

f = statements[j](其中f是函数)

P.S。我想要一个赋值语句列表(lambda不起作用),我宁愿不创建函数。例如:

switch = [output = input, output = 2 * input, output = input ** 2]

除了为每个条目定义一个函数之外还有其他方法吗?

感谢所有回答我问题的人。

6 个答案:

答案 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