问题描述
我对 Python 内联函数很感兴趣,想知道这是否可能。
我正在使用 click 模块,我正在使用它的提示功能,我会将输入的值添加到列表中。 但是,如果在提示中没有输入任何内容,我想添加“**空**”。 现在,Click 有一个默认值,但我没有把值放在那里,因为这样提示将显示“Name [** empty **]”而不是“Name []”。
所以我想到的就是这个。 如果提示返回 ''(空),那么它应该附加 '** empty **'。 我觉得我几乎拥有它。 但它只是结束了运行代码,而是将一个空的 '' 项目附加到列表中。 不是我的带有“**空**”的文本。
所以代码看起来像这样:
item = []
item.append(click.prompt("Name", default = '') if not '' else '** empty **')
我查看它的方式 click.prompt() 是一个返回值的函数。 如果没有输入任何内容,默认 = '' 应该告诉它返回 ''。 所以我想要实现的是,如果 click.prompt() 返回 '' 那么它应该将 '** empty **' 附加到列表中。 它只是不起作用。 如前所述,它附加了''。
1楼
这将起作用:
item.append(click.prompt("Name", default='') or '** empty **')
你的表情是
click.prompt("Name", default = '') if not '' else '** empty **'
这与:
if not '':
item.append(click.prompt("Name", default=''))
else:
item.append('** empty **')
但not ''
总是真的,因为''
总是假的。
所以你总是附加用户输入的字符串,包括空字符串。
2楼
@Ned 的解决方案是最好的:
item.append(click.prompt("Name", default='') or '** empty **')
或者做一些类似于你所做的事情:
c=click.prompt("Name", default = '')
item.append(c if c else '** empty **')
或者当然可以,(但运行click.prompt("Name", default = '')
两次,所以最好只运行一次):
item.append(click.prompt("Name", default = '') if click.prompt("Name", default = '') else '** empty **')