2016-08-13 17 views
1

の一覧はPythonでパイソン - 割り当て

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

を持ってする方法はありますか?

私が行うことができるようにしたい:

run statements[i] 

か:

f = statements[j](fは関数である)

P.S.私は代入文のリストを持っています(ラムダは機能しません)、私はむしろ関数を作成しません。例:

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

各エントリに関数を定義する以外の方法はありますか。

私の質問にお答えいただき、ありがとうございました。

+0

関数はオブジェクトであると見て、はい、これは可能です...あなたは何を試してみましたか? –

+0

事前に 'statement1 ... statementn'を定義する必要があることに注意してください(' def statement1():... ')、またはlambdaを使用してください。 – Perkins

答えて

0

私が行うことができるようにしたい:まあrun statements[i]

、あなたが幹部であることを行うことができます。

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

はい。関数はファーストクラスの市民です。つまり、パラメータとして渡すことも、配列に格納することもできます。

関数のリストを持つことは珍しいことではありません。

#!/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が機能しているリストです: あなたはこのようなPythonで簡単なレジストリを構築することができます。 stepは、いわゆるデコレータ -functionであり、クロージャのように機能します。 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