仅在Python中不为null时打印-单行方法?
我有一个类对象,仅在Python中不为null时打印-单行方法?,python,one-liner,Python,One Liner,我有一个类对象,Task,它有四个属性,t,date,priority和checked。只有t必须包含一个值,其他三个属性是可选的。我编写了一个print方法,如果字符串不为null,它将打印字符串: class Task: def __init__(self, _t, _date=None, _priority=None, _checked=False): self.t = _t try: self.date = parser.p
Task
,它有四个属性,t
,date
,priority
和checked
。只有t
必须包含一个值,其他三个属性是可选的。我编写了一个print方法,如果字符串不为null,它将打印字符串:
class Task:
def __init__(self, _t, _date=None, _priority=None, _checked=False):
self.t = _t
try:
self.date = parser.parse(_date, dayfirst=True) if _date else None
except:
self.date = None
self.priority = _priority
self.checked = _checked
def print(self):
print(self.t, end="")
if self.date:
print(self.date, end="")
if self.priority:
print(self.priority, end="")
。。。但我想知道有没有办法把它压缩成一行。在VB.NET中,可以执行以下操作:
Console.Writeline(me.t, If(me.date Is Not Nothing, me.date, ""), If(me.priority Is Not Nothing, me.priority, ""))
我尝试在Python中这样做,如下所示,但工作方式不同:
print(self.t, if(self.date, self.date), if(self.priority, self.priority))
是否有单行解决方案,或任何更简洁的方法?您可以将
过滤器与None
或bool
一起使用,以避免打印None
值
def print(self):
print(*filter(None, [self.t, self.date, self.priority]))
或
您可以连接它们并打印,这将处理空值:
def print(self):
string= self.t + " " + self.date + " " + self.priority
print(string,end = "")
您可以创建一个列表,然后检查列表是否不是None
:
类任务:
定义初始化(self,t,date=None,priority=None,checked=False):
self.t=\u t
尝试:
self.date=parser.parse(_date,dayfirst=True)如果_date否则无
除:
self.date=无
self.priority=\u priority
self.checked=\u checked
self.print\u list=[\u t,\u日期,\u优先级]
def打印(自):
[在self.print_列表中为i打印(i,end=''),如果i不是None]
t=任务(t=4,日期=25)
t、 打印()
不是None的每个变量的列表理解:
def打印(自):
[在self.print_列表中为i打印(i,end=''),如果i不是None]
也相当于:
def print(self):print(*[i代表self.print_列表中的i,如果i不是None],end=”“)
甚至可能用一个dict
类任务:
定义初始化(self,t,date=None,priority=None,checked=False):
尝试:
temp\u date=parser.parse(\u date,dayfirst=True)if\u date else None
除外:#我建议将除外捕获作为一个更具体的案例
临时日期=无
self.entities={t':_t,'date':temp_date,'priority':_priority}
def print(self):打印([v代表uuv,如果v不是None,则在self.entities.items()中为v),end=“”)
t=任务(t=4,日期=25)
t、 打印()
但是,这不会打印空白吗?例如,如果我将t
设置为Task 1
,date
设置为nothing,并且priority
设置为1,它不会打印这样的内容:Task 1 1
而不是Task 1 1
是的,没有空格,输出看起来有点笨拙
def print(self):
string= self.t + " " + self.date + " " + self.priority
print(string,end = "")