我想格式化一个包含浮点变量的字符串,包括固定数量的小数,我想用这种格式化语法来做:
amount = Math::PI
puts "Current amount: #{amount}"
Run Code Online (Sandbox Code Playgroud)
而且我想获得Current amount: 3.14
.
我知道我可以做到
amount = Math::PI
puts "Current amount %.2f" % [amount]
Run Code Online (Sandbox Code Playgroud)
但我问是否有可能这样做#{}
.
为什么我不能腌制一段typing.NamedTuple
时间我可以腌制一个collections.namedtuple
?我怎么能设法做一个泡菜NamedTuple
?
此代码显示了到目前为止我尝试过的内容:
from collections import namedtuple
from typing import NamedTuple
PersonTyping = NamedTuple('PersonTyping', [('firstname',str),('lastname',str)])
PersonCollections = namedtuple('PersonCollections', ['firstname','lastname'])
pt = PersonTyping("John","Smith")
pc = PersonCollections("John","Smith")
import pickle
import traceback
try:
with open('personTyping.pkl', 'wb') as f:
pickle.dump(pt, f)
except:
traceback.print_exc()
try:
with open('personCollections.pkl', 'wb') as f:
pickle.dump(pc, f)
except:
traceback.print_exc()
Run Code Online (Sandbox Code Playgroud)
shell上的输出:
$ python3 prova.py
Traceback (most recent call last):
File "prova.py", line 16, in <module>
pickle.dump(pt, f)
_pickle.PicklingError: Can't pickle <class 'typing.PersonTyping'>: attribute lookup PersonTyping on …
Run Code Online (Sandbox Code Playgroud) 我试图用类型注释我的代码但是当涉及到集合时我有点困惑.我在PEP 484中读到了一些观点:
注意:Dict,List,Set和FrozenSet主要用于注释返回值.对于参数,更喜欢下面定义的抽象集合类型,例如Mapping,Sequence或AbstractSet.
和
设置,重命名为AbstractSet.此名称更改是必需的,因为键入模块中的Set表示使用泛型的set().
但这没有用.
我的第一个问题是:Set,FrozenSet,MutableSet和AbstractSet之间的共性和区别是什么?
我的第二个问题是:如果我尝试,为什么?
from collections import FrozenSet
Run Code Online (Sandbox Code Playgroud)
我明白了
ImportError: cannot import name 'FrozenSet'
Run Code Online (Sandbox Code Playgroud)
?
我使用的是Python 3.4,我已经通过pip安装了mypy-lang.
我正在尝试优化一些代码,通过分析我注意到这个特定的循环需要花费很多时间.你能帮我写得更快吗?
import numpy as np
rows_a, rows_v, cols = (10, 15, 3)
a = np.arange(rows_a*cols).reshape(rows_a,cols)
v = np.arange(rows_v*cols).reshape(rows_v,cols)
c = 0
for i in range(len(v)):
D = ((a-v[i])**2).sum(axis=-1)
c += D.min()
print(c)
Run Code Online (Sandbox Code Playgroud)
是否有任何numpy功能可以有效地做到这一点?
我正在尝试计算两个大小分别为 (162225, 10000) 和 (10000, 100) 的 numpy 数组的点积。但是,如果我调用 numpy.dot(A, B) 则会发生 MemoryError 。然后,我尝试编写我的实现:
def slower_dot (A, B):
"""Low-memory implementation of dot product"""
#Assuming A and B are of the right type and size
R = np.empty([A.shape[0], B.shape[1]])
for i in range(A.shape[0]):
for j in range(B.shape[1]):
R[i,j] = np.dot(A[i,:], B[:,j])
return R
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但当然很慢。您知道 1)此行为背后的原因是什么以及 2)我如何规避/解决该问题吗?
我在一台配备 64 位、16GB 内存、运行 Ubuntu 14.10 的计算机上使用 Python 3.4.2(64 位)和 Numpy 1.9.1。
python ×4
arrays ×2
numpy ×2
frozenset ×1
namedtuple ×1
performance ×1
pickle ×1
python-3.5 ×1
python-3.x ×1
ruby ×1
type-hinting ×1