我们可以使用if-else这样:statement if condition else statement但是这里有一些问题我无法理解为什么?
如果我运行count += 1 if True else l = [](已定义计数),则引发错误:
File "<ipython-input-5-d65dfb3e9f1c>", line 1
count += 1 if True else l = []
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)不能在其他地方分配价值吗?
运行时count += 1 if False else l.append(count+1)(注意:count = 0,l = []),会出现错误:
TypeError Traceback (most recent call last)
<ipython-input-38-84cb28b02a03> in <module>()
----> 1 count += 1 if False else l.append(count+1)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
Run Code Online (Sandbox Code Playgroud)而l的结果是[1].
同样的条件,如果我使用if-else块,则没有错误.你能解释一下它的区别吗?
我想UserAgentMiddleware用沙哑的方式设定风俗。但是我不知道request.headers.setdefault('User-Agent', ua)看到它时的动作,也没有找到scrapy和requests的方法。
在哪里可以找到有关它的任何解释?
我在heapq.nlargest()Python 标准库中看到的代码如下:
if n == 1:
it = iter(iterable)
sentinel = object()
if key is None:
result = max(it, default=sentinel)
else:
result = max(it, default=sentinel, key=key)
return [] if result is sentinel else [result]
Run Code Online (Sandbox Code Playgroud)
它首先转换iterable为itby iter(),然后从itbymax()函数传递的参数中获取最大值it。
为什么不只使用可迭代对象?有什么优势我没有意识吗?
这是一个简单的示例:
>>> def foo():
... if True:
... return 'yes'
...
>>> import dis
>>> dis.dis(foo)
3 0 LOAD_CONST 1 ('yes')
2 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
为什么这里没有关于 if 语句的字节码?它只是直接返回值。