我最近搬到了Python 3.5,注意到新的matrix乘法运算符(@)有时候与numpy的点运算符有所不同。 例如,对于3D数组: import numpy as np a = np.random.rand(8,13,13) b = np.random.rand(8,13,13) c = a @ b # Python 3.5+ d = np.dot(a, b) @运算符返回形状数组: c.shape (8, 13, 13) 而np.dot()函数返回: d.shape (8, 13, 8, 13) 我怎样才能重现与numpy点相同的结果? 还有其他的重大差异吗?
我用5个实例variables定义了一个类 class PassPredictData: def __init__(self, rating, name, lat, long, elev): self.rating = rating # rest of init code 我想确保: rating是一个整数 name是一个str lat , long ,高是浮游物 当阅读我的input文件时,一切工作基于我的类创build对象的列表。 当我开始比较值时,我得到了奇怪的结果,因为实例variables仍然是string。 当调用构造函数时使用int(string)和float(string)创build对象时,是否使用“最Pythonic方法”来转换值,还是应该使用类内部的逻辑来完成此类转换?
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import time async def foo(): await time.sleep(1) foo() 我不能让这个简单的例子来运行: RuntimeWarning: coroutine 'foo' was never awaited foo()
我有一个有两列的pandas数据框。 我需要改变第一列的值而不影响第二列,并且只改变第一列值就可以得到整个dataframe。 我怎样才能在pandas中应用?
假设我们有一个虚拟函数: async def foo(arg): result = await some_remote_call(arg) return result.upper() 有什么区别: coros = [] for i in range(5): coros.append(foo(i)) loop = get_event_loop() loop.run_until_complete(wait(coros)) 和: from asyncio import ensure_future futures = [] for i in range(5): futures.append(ensure_future(foo(i))) loop = get_event_loop() loop.run_until_complete(wait(futures)) 注意 :该示例返回结果,但这不是问题的重点。 当返回值很重要时,使用gather()而不是wait() 。 无论返回值如何,我正在寻找ensure_future()清晰度。 wait(coros)和wait(coros)两者都运行协程,那么何时以及为什么要将协程打包在ensure_future ? 基本上,使用Python 3.5的async运行一堆非阻塞操作的正确方法是什么? 额外的信用,如果我想批量打电话? 例如,我需要调用some_remote_call(…) 1000次,但我不想用1000个同时连接粉碎web服务器/数据库/等。 这是可行的线程或进程池,但有没有办法用asyncio做到这asyncio ?
我试图从Python 3.4中使用text.translate()从给定的string中删除不需要的字符。 最小的代码是: import sys s = 'abcde12345@#@$#%$' mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$') print(s.translate(mapper)) 它按预期工作。 但是,在Python 3.4和Python 3.5中执行相同的程序会产生很大的差异。 计算时间的代码是 python3 -m timeit -s "import sys;s = 'abcde12345@#@$#%$'*1000 ; mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$'); " "s.translate(mapper)" Python 3.4程序需要1.3ms,而Python 3.5中的相同程序只需要26.4μs 。 在Python 3.5中有哪些改进,使得它比Python 3.4更快?
为什么x**4.0比x**4快? 我正在使用CPython 3.5.2。 $ python -m timeit "for x in range(100):" " x**4.0" 10000 loops, best of 3: 24.2 usec per loop $ python -m timeit "for x in range(100):" " x**4" 10000 loops, best of 3: 30.6 usec per loop 我尝试改变我提出的权力,看看它是如何行动的,例如,如果我把x从10增加到16,那么从30增加到35,但是如果我以浮动的方式增加10.0 ,那么它只是移动在24.1〜4左右。 我想这与浮点数转换和2的幂可能有关,但我不知道。 我注意到,在这两种情况下,2的幂更快,我猜是因为这些计算对于解释器/计算机来说更为原生/容易。 但是,花车几乎不动。 2.0 => 24.1~4 & 128.0 => 24.1~4 但是 2 […]
我在python 3中有以下代码: class Position: def __init__(self, x: int, y: int): self.x = x self.y = y def __add__(self, other: Position) -> Position: return Position(self.x + other.x, self.y + other.y) 但是我的编辑(PyCharm)说参考位置不能被parsing(在_add__方法中)。 我应该如何指定我期望的返回types是Positiontypes? 编辑:我认为这实际上是一个PyCharm问题。 它实际上在其警告中使用了信息,并且代码完成 但是纠正我的错误,并且需要使用其他语法。
我知道@是装饰器,但在Python中@=是什么? 这只是保留一些未来的想法吗? 在阅读tokenizer.py时,这只是我的许多问题之一。