2016-08-13 2 views
1

Есть ли способ иметьPython - Список присвоений

statements = [statement1, statement2, statement3, ...] 

в Python?

Я хочу быть в состоянии сделать:

run statements[i] 

или:

f = statements[j] (где F является функцией)

P.S. Я хочу иметь список операторов присваивания (лямбда не работает), и я предпочитаю не создавать функции. Например:

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

Есть ли другой способ, кроме определения функции для каждой записи?

Спасибо всем, кто ответил на мой вопрос.

+0

Видя, как функции объектов, да, это возможно ... Что вы пробовали? –

+0

Обратите внимание, что вам нужно заранее определить 'statement1 ... statementn' (' def statement1(): ... 'или использовать lambdas. – Perkins

ответ

0

Я хочу быть в состоянии сделать: run statements[i]

хорошо, вы можете сделать это Exec:

statements = ["result=max(1,2)","print(result)"] 
for idx in range(len(statements)): 
    exec(statements[idx]) 
print(result) 

Надеюсь, поможет!

+0

Этот ответ ближе всего к тому, что я просил, учитывая, что он не требует я определяю функции. Но теперь есть ли способ сделать f = statement для создания функции? – pooya13

0

Это прекрасно:

def addbla(item): 
    return item + ' bla' 

items = ['Trump', 'Donald', 'tax declaration'] 
new_items = [addbla(item) for item in items] 
print(new_items) 

Это добавляет политическое заявление к каждому элементу в items :)

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]() 

Если операторы просто вызовы функций, вы можете поместить их непосредственно в список, не создавая обертки.

4

Да. Функции: первоклассные в 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 - так называемый декоратор -функция, которая работает как закрытие. Интерпретатор python добавляет при анализе файла каждый украшенный @step конвейер.

И вы можете получить доступ к функции с помощью итератора или через processing_pipeline[i]: попробуйте добавить processing_pipeline[2](data).

0

Вы можете сделать:

funcs = [min, max, sum] 
f = funcs[0] 
funcs[1](1,2,3) # out 3 
funcs[2]([1,2,3]) # out 6 
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 
Смежные вопросы