2009-07-30 32 views
7

Kendimi aşağıdakileri çok yazarak buluyorum (Django için geliştiriyor, eğer bu uygunsa):Değişken kontrol ve atama için bir Python kısayolu var mı?

if testVariable then: 
    myVariable = testVariable 
else: 
    # something else 

Alternatif olarak ve daha yaygın (yani bir parametre listesi oluşturma)

if 'query' in request.POST.keys() then: 
    myVariable = request.POST['query'] 
else: 
    # something else, probably looking at other keys 

Bunu bilmediğim bir kısayol bunu basitleştirir mi? Mantık myVariable = assign_if_exists(testVariable) ile bir şey mi?

cevap

25

, sen "yok" durumunda önceki değerine bakir myVariable bırakmak istiyorum ilk dava ile

myVariable = testVariable or myVariable 

fırsatları ve

myVariable = request.POST.get('query', myVariable) 

fırsatları varsayarsak ikinci. Ne var ki, “varoluş” ile pek ilgisi yoktur, ancak (ki bu bir Python kavramı değildir ;-)): ilki doğru ya da yanlıştır, ikincisi ise bir koleksiyonda bir anahtarın varlığı ya da yokluğu ile ilgilidir.

+0

İlk deyim gerçekten çok hoş: sadece geçen gün bunu öğrendim. – jkp

+0

Teşekkürler, mükemmel. Şimdiye kadar bu sözdizimsel şekerleri nasıl özlediğimi merak ediyorum! –

7

İlk örnek garip olarak belirtildi ... Neden başka bir boole için boole oluşturdunuz?

Test Değişkeni sıfır uzunluklu bir dize olmadığında ya da Yanlış olarak değerlendirilecek bir şey olmadığında MyVariable öğesinin test Değişkenine ayarlanması anlamına gelebilir. Bir sözlüğüne indeksleme yaparken

Öyleyse, daha açık formülasyonları

myVariable = testVariable if bool(testVariable) else somethingElse 

myVariable = testVariable if testVariable is not None else somethingElse 

tercih basitçe get kullanın.

myVariable = request.POST.get('query',"No Query") 
İlgili konular