我想打印一个单一的大括号。
例子:
a = 2
>>> f"{'{'} {a}"
'{ 2'
Run Code Online (Sandbox Code Playgroud)
如何使用少于 5 个字符?
我正在为通过 TCP 工作的协议编写解析器。
有些消息在多个数据包之间拆分,因此我需要能够“窥视”到我的流中,并有可能返回并在最后附加传入数据。另一方面,我希望能够丢弃我成功解析的数据包的内容。
bytes在于追加需要复制(不是在 CPython 中,但在不可变对象中删除第一个字节也是不可能的)。bytearray是刷新已经看到的字节也需要复制(或者我认为,见下文)collections.deque在于巨大的内存需求。与list.但是,我做了一些测试,bytearray似乎 pop(0) 操作比列表高效得多:
from time import time
n = 100000
for container in [bytearray, list]:
print(container)
a = container(b'a'*n)
t = time()
for i in range(n):
del a[0]
print('del a[0]', time() - t)
a = container(b'a'*n)
t = time()
for i in range(n):
del a[-1]
print('del a[-1]', time() - t)
a = container(b'a'*n)
t = time()
for i in range(n-1):
del …Run Code Online (Sandbox Code Playgroud) 在 TextMate 中,您可以对文件或选择运行 shell 脚本,然后用输出替换选择或在后面插入输出。
如何在 VS Code 中轻松做到这一点?
很容易,我希望能够使用键盘快捷键启动一些脚本,根据语言的不同,相同的快捷键与不同的命令相关联。例如,将所有 linter 放在同一个快捷方式下(这只是一个例子,我知道你可以让它们在保存时运行)。
我认为可以对现有文件执行此操作(某些扩展可以执行此操作),但是未保存的缓冲区又如何呢?
我想并行执行一个sympy lambda函数.我不知道:
lambdify显然降价预处理器需要在代码上方的一行文本,所以这是代码:
from multiprocessing import Pool
import sympy
from sympy.abc import x
def f(m):
return m.lambdify()(1)
class Mult():
def lambdify(self):
# return sympy.lambdify(x, 2*x, 'numpy')
self._lambdify = sympy.lambdify(x, 2 * x, 'numpy')
return self._lambdify
if __name__ == '__main__':
with Pool() as pool:
m = Mult()
print(pool.map(f, [m]))
print(pool.map(f, [m]))
print(f(m))
print(pool.map(f, [m]))
Run Code Online (Sandbox Code Playgroud)
它打印:
[2]
[2]
2
PicklingError: Can't pickle <function <lambda> at 0x000000000DF0D048>: attribute lookup <lambda> on numpy failed
Run Code Online (Sandbox Code Playgroud)
(我削减了追溯)
如果我取消注释,它会正常工作:
[2]
[2]
2
[2] …Run Code Online (Sandbox Code Playgroud) 我的代码中有循环,我想并行化
from numba import njit, prange
from time import time
@njit
def f1(n):
s = 0
for i in range(n):
for j in range(n):
for k in range(n):
s += (i * k < j * j) - (i * k > j * j)
return s
@njit
def f2(n):
s = 0
for i in prange(n):
for j in prange(n):
for k in prange(n):
s += (i * k < j * j) - (i * k > j …Run Code Online (Sandbox Code Playgroud) 是否可以在 numpy 中创建一个不是 C_CONTIGUOUS 或 F_CONTIGUOUS 的一维数组?
我认为连续的概念只对具有更多维度的数组有意义,但我在文档中找不到任何内容。
我尝试了以下方法来制作不连续的一维数组:
>>> np.empty(10).flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
>>> np.empty(10).copy('F').flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
Run Code Online (Sandbox Code Playgroud) 我有这个代码是故意不符合要求的:
def suffix_array_alternative_naive(s):
return [rank for suffix, rank in sorted((s[i:], i) for i in range(len(s)))]
from random import randint
constant_string = lambda length: 'a' * length
random_string = lambda length: ''.join(chr(randint(0, 255)) for _ in range(length))
length = 10000
s1 = constant_string(length)
s2 = random_string(length)
from time import time
for s in [s1, s2]:
d = time()
for _ in range(10):
suffix_array_alternative_naive(s)
print(time()-d)
Run Code Online (Sandbox Code Playgroud)
2.0367980003356934
1.9366297721862793
使用python3:
0.48073387145996094
0.5416769981384277
如果我尝试使用length = 100000和一个循环:
pypy3:
48.4867467880249
35.002175092697144
4.402702808380127
4.469300031661987
通常,常量字符串应该更长,以便在它们之间进行比较,因为你必须完全读取它们,而随机字符串应该很容易避免后缀前缀之间的冲突.因此,pypy3的结果是合乎逻辑的.
为什么它不像CPython那样工作?
我不明白多处理文档(python.org)的这一部分,我引述:
"将陷入僵局的一个例子如下:
from multiprocessing import Process, Queue
def f(q):
q.put('X' * 1000000)
if __name__ == '__main__':
queue = Queue()
p = Process(target=f, args=(queue,))
p.start()
p.join() # this deadlocks
obj = queue.get()
Run Code Online (Sandbox Code Playgroud)
"首先,它为什么会阻塞?更令人惊讶的是,当我在f的定义中使用一些小于1000000的值时,它可以正常工作(它适用于10,100,1000,10000,但不能使用100000).
非常感谢你的帮助 !
python multithreading multiprocessing python-multithreading python-multiprocessing