Python:用join编写ifthen块的更好方法?

2024-05-23 15:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有更好的方法来编写这个代码?我知道这很简单,但我写的方式似乎太重复了。在

我没有必要寻找一行天才代码,只是一些其他可读的,有用的替代品。在

提前谢谢!在

def __unicode__( self ):
    location = []

    if self.room != None:
        location.append( self.room )
    if self.floor != None:
        location.append( self.floor )
    if self.building != None:
        location.append( self.building )

    location.append( self.property )

    return ", ".join( location )

始终设置self.property,对于self.roomself.floor和{},这不是真的。顺便说一下,这是Django代码的models.py的一部分,以防有人想知道。在

附带问题:使用property作为变量名是个坏主意吗?我注意到property在语法下高亮显示,但我查了一下,发现它不是Python reserved word。在

以下是完整的课程:

^{pr2}$

Tags: 方法代码selfnone替代品ifdef方式
3条回答

如果选择要附加的第一个非None元素,则第一部分是对原始问题的回答。请参阅下面的更新,以解决修订后的问题

我想这是一个相当简单的解决方案,而不是试图去做疯狂的一句话或是一些过于花哨的事情。只需循环它们并附加第一个不是None的,然后中断。在

for loc in (self.room, self.floor, self.building):
    if loc is not None:
        location.append(loc)
        break

如果你想要一行代码,下面是一个列表理解:

^{pr2}$

与最后一个更具可读性的折衷方案是:

options = (self.room, self.floor, self.building)
location = [l for l in options if l is not None][:1]

@tzaman建议不要用property作为变量名是对的。它是一种内置类型:

>>> property
<type 'property'>

class property(object)
 |  property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
 |  
 |  fget is a function to be used for getting an attribute value, and likewise
 |  fset is a function for setting, and fdel a function for del'ing, an
 |  attribute.  Typical use is to define a managed attribute x:

更新

因为在你的评论中,你提到你真正想要的是那些不是“无”的属性,这是一个超级简单的列表组件:

locations = [l for l in (self.room, self.floor, self.building) if l is not None]

更新2:在@Vaughn Cato

locations = filter(None, [self.room, self.floor, self.building])

只需使用or运算符:

first = self.room or self.floor or self.building
if first:
    location.append(first)

它自动返回第一个计算结果为True的表达式的值。 而且,property不是保留字,但它是一个built-in-所以是的,不要使用它。在

根据jdi发布的内容:

def __unicode__( self ):
    location = filter(None,[self.room,self.floor,self.building])
    location.append(self.property)
    return ", ".join( location )

相关问题 更多 >