我想將一個語句傳遞給一個python函數。這個聲明只能在函數中做一些其他的事情之後才能執行。默認情況下,python會評估該語句,然後將其結果作爲參數傳遞。python可以處理未經評估的表達式參數嗎?
有什麼方法可以改變這種行爲嗎?
我發現的唯一方法是將我的語句包裝在函數中,然後傳遞函數。
我想將一個語句傳遞給一個python函數。這個聲明只能在函數中做一些其他的事情之後才能執行。默認情況下,python會評估該語句,然後將其結果作爲參數傳遞。python可以處理未經評估的表達式參數嗎?
有什麼方法可以改變這種行爲嗎?
我發現的唯一方法是將我的語句包裝在函數中,然後傳遞函數。
大多數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
老實說,我不明白你爲什麼要這樣做。
不,這是不可能的。表達式評估的結果被傳遞給函數而不是表達式本身。你將用函數或lambda表達式來包裝你的語句。
'我發現的唯一方法是將我的語句包裝在一個函數中,然後傳遞函數.'它不是一件壞事。 – nafas
您只能傳遞一個函數或lambda(這是一個內聯函數)。 – poke