我们如何以更好的方式处理此功能
或
我们如何才能提高效率
或
优化代码:
def is_interesting(tt):
return tt['target_type'] == 670 and tt.get('script') is not None and tt.get('script') in ('abc','syz','mno')
答案 0 :(得分:4)
tt.get('script') is not None
部分是多余的,因为None
也不在下一个元组中。
你的测试效率很高;如果第一个表达式已经是False
,Python将不会评估第二个表达式。
def is_interesting(tt):
return tt['target_type'] == 670 and tt.get('script') in ('abc','syz','mno')
演示:
>>> def is_interesting(tt):
... return tt['target_type'] == 670 and tt.get('script') in ('abc','syz','mno')
...
>>> is_interesting({'target_type': 42})
False
>>> is_interesting({'target_type': 670})
False
>>> is_interesting({'target_type': 670, 'script': ''})
False
>>> is_interesting({'target_type': 670, 'script': 'abc'})
True
答案 1 :(得分:1)
我的回答与Martijin完全相同。
def is_interesting(tt):
return tt['target_type'] == 670 and tt.get('script') in ('abc','syz','mno')
我只是想回答这个问题:
"返回tt [' target_type'] == 670和tt.get('脚本')(' abc',' syz',& #39; mno')TypeError:' in'需要字符串作为左操作数"因此我添加了这个语句以应对tt.get的空值(' script')
示例:
>>> {'foo':'bar'}.get('notexist') in ('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not NoneType
>>> {'foo':'bar'}.get('notexist') in ('foo',)
False
>>> {'foo':'bar'}.get('notexist') in ['foo']
False
说明:第一个例子,()中只有一个元素,所以(&#39; foo&#39;)实际上会返回你的foo&#39; - 一个字符串;第二和第三可以确保你得到一个元组/列表。在括号内的单个元素后面放一个逗号是获取一个元素的方法。我想这就是你遇到的。