2011-05-13 40 views

Trả lời

8

Không thực sự, vì bạn không thể rebind đối số.

if foo is None: 
    foo = 42 

hoặc

def ifnull(var, val): 
    if var is None: 
    return val 
    return var 

foo = ifnull(foo, 42) 
+1

Thân của 'ifnull()' có thể được rút ngắn thành 'val nếu var là None else var', cũng vậy. –

+0

Nó có thể được rút ngắn thành 'return var hoặc val' thực sự là –

+3

@IonutHulub: Không, vì rất nhiều giá trị không phải' không phải là false. –

2

Như thế này:

x = SOME_VALUE if x is None else x 
-2

Kể từ khi câu hỏi này bây giờ là hơn 2 tuổi, tôi đoán đây là chi tiết để tham khảo trong tương lai :)

Những gì tôi thích làm là max('', mightBeNoneVar) hoặc max(0, mightBeNoneVar) (tùy thuộc vào ngữ cảnh).

dụ More công phu:
print max('', col1).ljust(width1) + ' ==> '+ max('', col2).ljust(width2)

+0

Có vẻ hơi phức tạp với tôi, và nó cũng đáng chú ý là khi so sánh như công việc này trong 2.x, trong Python 3.x, 'NoneType' không có thứ tự và do đó bạn sẽ nhận được một' TypeError' –

8

Nếu bạn muốn chuyển đổi tất cả "falsy" giá trị (tức là None, 0, "", [], False, vv) đến một giá trị cụ thể và để cho mọi thứ khác thông qua ảnh hưởng , bạn có thể sử dụng or. Ví dụ:

print (x or default_value) 

sẽ in giá trị của x nếu nó truthy, và giá trị của default_value nếu x là falsy.

Tôi đề cập đến điều này bởi vì IFNULL thường được sử dụng theo cách này để làm sạch null trong cột boolean và số trong cơ sở dữ liệu và do đó có thể là những gì bạn hoặc những người khác sau. Rõ ràng, nếu bạn muốn điều trị None khác với 0, False, v.v. điều này sẽ không hoạt động.

Các vấn đề liên quan