Đưa ra ví dụ dưới đây, đó là thêm pythonic? Sử dụng thành phần hàm, lambdas hoặc (bây giờ cho) một cái gì đó hoàn toàn khác nhau? Tôi phải nói rằng lambdas dường như dễ đọc hơn, nhưng Guido mình dường như muốn loại bỏ lambdas hoàn toàn - http://www.artima.com/weblogs/viewpost.jsp?thread=98196Thành phần chức năng nhiều hơn nữa, lambdas, hoặc cái gì khác?
from functools import partial
from operator import not_, ge
def get_sql_data_type_from_string(s):
s = str(s)
# compose(*fs) -> returns composition of functions fs
# iserror(f, x) -> returns True if Exception thrown from f(x), False otherwise
# Using function composition
predicates = (
('int', compose(not_, partial(iserror, int))),
('float', compose(not_, partial(iserror, float))),
('char', compose(partial(ge, 1), len)))
# Using lambdas
predicates = (
('int', lambda x: not iserror(int, x)),
('float', lambda x: not iserror(float, x)),
('char', lambda x: len(x) <= 1))
# Test each predicate
for i, (t, p) in enumerate(predicates):
if p(s):
return i, t
# If all predicates fail
return (i + 1), 'varchar'
Tôi nghĩ rằng phiên bản lambda là đơn giản nhất và rõ ràng, mà tôi cũng nghĩ làm cho nó nhiều nhất "pythonic". –
nitpick - theo định nghĩa của bạn về iserror, bạn nên có một cái gì đó như 'iserror (int, x)' trái với 'iserror (int (x))'. –
lambda là đẹp – pyCthon