'Hello ' + ('there' if name is None else name)
相当于
msg = 'Hello '
if name is None:
msg += 'there'
else:
msg += name
这相当于:
msg = 'Hello '
if name is None:
msg += 'there'
elif name == 'Mr Anderson'
msg += 'Neo'
else:
msg += name
编辑:此处参考的是我想缩小的代码
srepr = '\'Modify '
if self.register == 'p':
srepr += 'Pointer'
elif self.register == 'v':
srepr += 'Value'
else
srepr += 'Unknown'
srepr += ' By ' + str(self.delta) + '\''
答案 0 :(得分:19)
msg = "Hi " + ("there" if not name else ("Neo" if name == "Anderson" else name))
但我认为那是非常难以理解的。
答案 1 :(得分:4)
使用字典执行映射:
srepr = "'Modify " + {"p": "Pointer", "v": "value"}.get(self.register, "Unknown")
(顺便说一下,您可以使用'\'...'
代替"'...
,以便更清晰。
答案 2 :(得分:1)
'Hello ' + \
('there' if name is None else \
'Neo' if name == 'Mr Anderson' else \
name)
我建议不要这样做;如果你的条件变得如此复杂,那就把它放在一个函数中。
答案 3 :(得分:1)
不要这样做。
请改为:
% python -m this | sed 's/^R.*/======>&<======/'
每当我看到elif
时,我认为dict
。
#!/usr/bin/env python
class Shrink(object):
types = {
'p': 'Pointer',
'v': 'Value',
}
def shrink_this(self):
return "'Modify %s By %s'" % (
self.types.get(self.register, 'Unknown'), self.delta)
import unittest
class TestShrink(unittest.TestCase):
def test_p(self):
s = Shrink();
s.register = 'p'
s.delta = 'delta'
self.assertEquals("'Modify Pointer By delta'", s.shrink_this())
def test_u(self):
s = Shrink();
s.register = 'u'
s.delta = 'echo'
self.assertEquals("'Modify Unknown By echo'", s.shrink_this())
def test_v(self):
s = Shrink();
s.register = 'v'
s.delta = 'foxtrot'
self.assertEquals("'Modify Value By foxtrot'", s.shrink_this())
if __name__ == '__main__':
unittest.main()
您是否需要为r
添加reference
或pp
添加pointer-to-pointer
,只有types
需要更改,您的代码仍然可读。
可读性计数。
答案 4 :(得分:0)
你也可以这样做:
msg= 'Hello ' + {name is None: 'there', name == 'Mr Anderson': 'Neo'}.get(True, name)
因此name is None
或name == 'Mr Anderson'
中的任何一个都是True
,或者它们都不是True,那么将使用name
。
答案 5 :(得分:0)
msg = 'Hello ' + (
'there' if name is None else
'Neo' if name == 'Mr Anderson' else
name
)
这是其他几个答案的重复,但格式更好。我认为这是最具可读性的,这是我将使用的方法。
答案 6 :(得分:-1)
首先,运行'pip install pyswitch'
然后:
import pyswitch
mySwitch = pyswitch.Switch()
@mySwitch.case(None):
def gotNone(value):
return 'Hello there'
@mySwitch.case('Mr. Anderson')
def gotMrAnderson(value):
return 'Hello Neo'
@mySwitch.default
def gotDefault(value):
return 'Hello %s' % value
msg = mySwitch.switch(None) # Returns 'Hello there'
msg = mySwitch.switch('Mr. Anderson') # Returns 'Hello Neo'
msg = mySwitch.switch('OoglyMoogly') # Returns 'Hello OoglyMoogly'