2015-11-23 63 views
3

我想將一個語句傳遞給一個python函數。這個聲明只能在函數中做一些其他的事情之後才能執行。默認情況下,python會評估該語句,然後將其結果作爲參數傳遞。python可以處理未經評估的表達式參數嗎?

有什麼方法可以改變這種行爲嗎?

我發現的唯一方法是將我的語句包裝在函數中,然後傳遞函數。

+8

'我發現的唯一方法是將我的語句包裝在一個函數中,然後傳遞函數.'它不是一件壞事。 – nafas

+0

您只能傳遞一個函數或lambda(這是一個內聯函數)。 – poke

回答

1

大多數Python程序員都認爲傳遞功能將是自然的,最安全,最易維護的方法解決這個問題:

In [ 2]: add_one = lambda a: a+1 

In [ 3]: def my_func2(a, statement): 
    ....:  print a 
    ....:  a = statement(a) 
    ....:  print a 
    ....:  

In [ 4]: a 
Out[ 4]: 9 

In [ 5]: my_func2(a, add_one) 
9 
10 

但有一個exec聲明,提供了一個不自然的,不安全的和潛在的混亂替代:

In [ 6]: def my_func(a, statement): 
    ....:  print a 
    ....:  exec(statement) 
    ....:  print a 
    ....:  

In [ 7]: a = 9 

In [ 8]: my_func(a, 'a += 1') 
9 
10 

老實說,我不明白你爲什麼要這樣做。

2

不,這是不可能的。表達式評估的結果被傳遞給函數而不是表達式本身。你將用函數或lambda表達式來包裝你的語句。