我正在玩列表理解,并且在另一个站点上遇到了这个小片段:
return ''.join([`num` for num in xrange(loop_count)])
我花了几分钟尝试复制功能(通过键入),然后才意识到num
它被破坏了。
用这些字符括起来的语句有什么作用?从我所看到的相当于str(num)。但是当我计时的时候:
return ''.join([str(num) for num in xrange(10000000)])
它需要4.09秒,而:
return ''.join([`num` for num in xrange(10000000)])
需要2.43秒。
两者都给出相同的结果,但是要慢得多。这里发生了什么?
编辑: 奇怪的是…repr()
给出的结果比稍慢num
。2.99秒和2.43秒。使用Python 2.6(尚未尝试3.0)。
反引号是不推荐使用的别名repr()
。不再使用它们,该语法已在Python 3.0中删除。
使用反引号似乎快于使用repr(num)
或num.__repr__()
在版本2.x中 我猜这是因为分别需要在全局名称空间(for
repr
)或对象的名称空间(for __repr__
)中进行额外的字典查找。
使用该dis
模块证明了我的假设:
def f1(a):
return repr(a)
def f2(a):
return a.__repr__()
def f3(a):
return `a`
拆解节目:
>>> import dis
>>> dis.dis(f1)
3 0 LOAD_GLOBAL 0 (repr)
3 LOAD_FAST 0 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(f2)
6 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (__repr__)
6 CALL_FUNCTION 0
9 RETURN_VALUE
>>> dis.dis(f3)
9 0 LOAD_FAST 0 (a)
3 UNARY_CONVERT
4 RETURN_VALUE
f1
涉及到的全局查找repr
,f2
的属性查找__repr__
,而反引号运算符在单独的操作码中实现。由于没有字典查找(LOAD_GLOBAL
/
LOAD_ATTR
)和函数调用(CALL_FUNCTION
)的开销,因此反引号会更快。
我猜想,Python专家认为repr()
不值得为此单独进行一个低级操作,并且同时使用repr()
反引号会违反该原理
“应该有一种-最好只有一种-显而易见的方法”
因此该功能已在Python 3.0中删除。
我想创建一个
问题内容: 下面是代码片段。 有人可以向我解释@符号在Java中的含义吗? 问题答案: 这是一个注释。 注释是元数据的一种形式。它们提供的程序数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注释确实会影响工具和库对待程序的方式,进而会影响正在运行的程序的语义。可以从源文件,类文件中读取注释,也可以在运行时从中读取注释。
HTTP/2如何影响代理服务器的实现?特别是,例如,当客户端向仅支持HTTP/1的内容服务器发送HTTP/2请求时。x、 代理服务器是否应该将HTTP/2请求转换为HTTP/1。是否在将客户端请求定向到content server之前执行x请求?当从content server接收到响应时,代理服务器是否应该在将响应发送回客户端之前将其转换为HTTP/2格式?
这里有多个任务。其中一个任务是。我们称之为。在任务-1中,我分配一个时间戳并生成水印,我使用,其中等于2min。 下一个操作符是我窗口数据,并在上面做一些聚合,然后下沉到Kafka。让我们将这个聚合和下沉的链接任务称为。 :查看这个度量值,它告诉。 问题:当我窗口元素时,我已经分配了0允许的迟到。所以它可能掉了一些元素。但是当我查看度量时,由于windows不是一个运算符,所以没有度量可以告诉wi
问题内容: 我正在使用Facebook库,其中包含以下代码: 函数定义开头的&是什么意思,以及如何使用这样的库(在一个简单的示例中) 问题答案: 函数名称前的与号表示函数将返回对变量的引用,而不是值。 当您想使用函数查找引用应绑定到哪个变量时,按引用返回很有用。不要使用引用返回来提高性能。引擎将自动自动优化它。仅在有充分的技术理由时才返回引用。
问题内容: 我知道这要求声明的作用。 但是有时候我在要求之后看到了两个括号。 问) 这是什么意思,它是如何工作的? 问题答案: 这是一种将所需模块的设置为功能的模式。要求该模块返回一个函数,并在require之后的括号中使用参数对函数求值。 在上面的示例中,您的文件如下所示: 这种模式通常用于将变量传递给模块,就像上面用变量所见。