2011-12-14 25 views
1

在Python中,我经常发现自己写的代码下面稍微笨重位:Python的风格:更简洁的方式来命名,同时检查它的变量不是空

if data['name'] is not None: 
    name = data['name'] 
    # do stuff with 'name' over many lines 
    # hence bothering to rename it at all! 
    $('#myname').text(name)... 

能的前两行被折叠成一个,也许都在条件声明内?

+0

嗯,你为什么不直接使用`数据[ '名']`? – Avaris 2011-12-14 19:16:17

+0

这是一个令人困惑的例子。 '#do stuff with name'这一行意味着你想做的不仅仅是赋值,所以你不能摆脱if块。另外,如果'名称'不在数据中,你会得到一个异常。你会想要使用get,除非你确定它在那里。 – 2011-12-14 19:47:04

+0

是的,我想做的不仅仅是任务。我不想使用`data ['name']`,因为它在许多行中变得笨拙,特别是当变量的名称比data ['name']`更复杂时!编辑过的问题更清楚一点。 – Richard 2011-12-14 21:00:34

回答

0

这是一个办法做到这一点的一条线。我建议你坚持你已经做了什么,以提高可读性:

for name in (data['name'],) if data['name'] else(): 
    print name 

可以使用其他与for循环,它会流一样的if语句。它看起来很奇怪,并且比使用if更简单。

3

在某些情况下,例如字符串名称,你可以简单地做这样的事情

name = data['name'] or '' 

一个通用的方法是使用if-else速记例如

name = data['name'] if data['name'] is not None else '' 

或者如果你喜欢(我喜欢上面的一个作为主要任务是在启动和特殊的情况下,在结束)

name = '' if data['name'] is None else data['name'] 
3

你可以这样做:

try: 
    name = data['name'] 
except KeyError: 
    pass 

使用的关键,如果不在字典中,则会引发例外情况。 (参见EAFP

或者使用dict.get方法:

name = data.get("name", "") 
3

正确的做法:

name = data.get('name') 

if name: 
    # your code for name here 
相关问题