我不太确定如何更恰当地说明问题,但以下示例可以说明我的需要:
getSortedData =() => {
let newSort = 'name asc';
if (this.state.sorteData === newSort) 'name desc';
this.setState({sortedData: newSort}, () => {
this.getData();
})
}
假设我将此函数称为def func(prefix):
prefix = prefix or ""
some_name = prefix + "-" + "bar"
print(some_name)
,则输出将为func("foo")
,但是当我调用foo-bar
时,输出将为func(None)
,而我想要的只是{{ 1}}。
现在很明显,如果条件允许,我可以写这篇文章并加以解决。但是,有没有一种Python方式可以做到这一点?它更像是倒置版本-bar
。
然后我可以写类似
bar
那会神奇的。
答案 0 :(得分:4)
使用str.join()
,并过滤掉空的组件:
def func(prefix):
return '-'.join(filter(None, (prefix, 'bar')))
这也适用于空字符串:
>>> def func(prefix):
... return '-'.join(filter(None, (prefix, 'bar')))
...
>>> func(None)
'bar'
>>> func('foo')
'foo-bar'
>>> func('')
'bar'
一个很好的选择是只使用条件表达式:
def func(prefix):
return f"{prefix}-bar" if prefix else "bar"
同样,此处的空字符串与None
相同,如果空字符串应导致if prefix is not None
,则使用'-bar'
。
答案 1 :(得分:1)
在有效前缀中包含-
,而不是加入操作中。
def foo(prefix=None):
# prefix = prefix + "-" if prefix is not None else ""
prefix += "-" if prefix else ""
return prefix + "bar"
如果您出于某种原因想要在某种情况下想要"-bar"
这样的输出,则可以区分无前缀和空前缀。
def foo(prefix=None):
prefix += "-" if prefix is not None else ""
return prefix + "bar"
在这种情况下,foo()
将产生"bar"
,而foo("")
将产生"-bar"
。