2

如果某件事是真的,我试图使用一个三元来打印一个字符串,如果不是的话(足够简单,对吧?)。它没有给出任何错误,并且似乎不会造成任何麻烦。然而,跑步时...

print('[',dr+1,']\t',d[dr] if fullpath else '[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')

...打印出来

'[',dr+1,']\t'

两次。例如,它打印以下内容:

[1] [1] Accoustic
[2] [2] Classical
[3] [3] Epic
[4] [4] Rock
[5] [5] Spoof
[6] [6] Techno & Electronic

如果您愿意,为了查看变量是什么(这无关紧要,因为这只是一个概念问题),您可以在此处查看其余代码

考虑到它可能是变量,我尝试单独打印语句(没有三元)并且它们按我的预期出现(即没有奇怪的重复)。知道变量没问题,我尝试用括号括起来字符串(以防止字符串混合),但是,由于 python 逐字解释它们,它们以数组而不是字符串的形式出现。此外,+ 符号(代替逗号)不起作用,因为 python 无法组合数据类型。我最终将声明更改为

print('[',dr+1,']\t',d[dr]) if fullpath else print('[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')

它工作正常。

除了不是很好的编码,为什么第一个字符串被打印两次?

4

2 回答 2

2

请允许我为你分解它...

print(('['), (dr+1), (']\t'), (d[dr] if fullpath else '['), (dr+1), (']\t'), (d[dr].split("/")[len(d[dr].split("/"))-2]), sep='')

看到问题了吗?

print(*(('[',dr+1,']\t', d[dr]) if fullpath else ('[',dr+1,']\t', d[dr].split("/")[len(d[dr].split("/"))-2])), sep='')
于 2012-12-18T00:57:10.383 回答
2

我不确定为什么它不会打印两次:

print('[',dr+1,']\t',       #first one
      d[dr] if fullpath else '[',
      dr+1,']\t',           #second one (most of it anyway)
      d[dr].split("/")[len(d[dr].split("/"))-2],
      sep='')

取决于fullpath,您的陈述可能看起来像

print('[',dr+1,']\t',       #first one
      d[dr],dr+1,']\t',     #second one (more or less)
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')

或者它可能看起来像:

print('[',dr+1,']\t',
      '[',dr+1,']\t',
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')
于 2012-12-18T00:57:21.893 回答