星期二, 4月 15, 2008

[tips] if as a pure function in python

http://okmij.org/ftp/Scheme/if-function.txt

here is a trick that we could rewrite a customized not-a-special-form IF in python.


iftrick.py:

#!/usr/bin/env python
def func_true():
print "true!"

def func_false():
print "false!"

def my_if(my_cond,then_func,else_func):
eval((then_func, else_func)[not my_cond].func_code,vars())

condition = True

my_if(condition,func_true,func_false)

condition = False

my_if(condition,func_true,func_false)

===
#python iftrick.py
true!
false!

2 則留言:

匿名 提到...

不過Py2.5已經有one-line if-else 了耶 _A_

使徒提姆 !? 提到...

你可能誤會了, 其實我這篇筆記的重點不在於if是不是一行, 主要是在於python的if可以用不是keyword的方式在語言裡來實作, 所以我可以用純python的方式來改寫我的function版本的if, 而不必受限於python改版, 比如在if裡加一個implicit check之類的,就不必改寫python直譯器, 我這篇tip只是一個demo, 說真的也沒什麼實際用途,在實務上絕對可以用很多種方法替代, 純粹只是覺得有趣而已.