鉴于:
In [37]: class A:
....: f = 1
....:
In [38]: class B(A):
....: pass
....:
In [39]: getattr(B, 'f')
Out[39]: 1
Run Code Online (Sandbox Code Playgroud)
好吧,要么叫超级还是爬行mro?
In [40]: getattr(A, 'f')
Out[40]: 1
Run Code Online (Sandbox Code Playgroud)
这是预料之中的.
In [41]: object.__getattribute__(A, 'f')
Out[41]: 1
In [42]: object.__getattribute__(B, 'f')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-42-de76df798d1d> in <module>()
----> 1 object.__getattribute__(B, 'f')
AttributeError: 'type' object has no attribute 'f'
Run Code Online (Sandbox Code Playgroud)
什么是getattribute没有做那个getattr呢?
In [43]: type.__getattribute__(B, 'f')
Out[43]: 1
Run Code Online (Sandbox Code Playgroud)
什么?! type.__getattribute__
打电话超级,但object
版本不?
In [44]: type.__getattribute__(A, 'f')
Out[44]: 1
Run Code Online (Sandbox Code Playgroud) 我有两个 NumPy 数组a
,b
维度m
为n
. 我有一个b
长度为 Boolean 的向量,n
我想生成一个新数组c
,它n
从a
, 中选择列b
,这样如果b[i]
为真,我就从 , 中取列,b
否则从a
.
我如何以最有效的方式做到这一点?我看过select
,where
和choose
。
我知道我能做到np.subtract.outer(x, x)
.如果x
有形状(n,)
,那么我最终得到一个有形状的数组(n, n)
.但是,我有一个x
形状(n, 3)
.我想输出有形状的东西(n, n, 3)
.我该怎么做呢?也许np.einsum
?
鉴于x
,我想生成x, log(x)
一个 numpy 数组,其中x
具有 shape s
,结果具有 shape (*s, 2)
。什么是最简洁的方法来做到这一点? x
可能只是一个浮点数,在这种情况下,我想要一个带有 shape 的结果(2,)
。
一个丑陋的方法是:
import numpy as np
x = np.asarray(x)
result = np.empty((*x.shape, 2))
result[..., 0] = x
result[..., 1] = np.log(x)
Run Code Online (Sandbox Code Playgroud) 我有:
class T {};
class S: public T {};
vector<T*> v;
vector<S*> w;
transform(v.begin(), v.end(), dynamic_cast_iterator<S*>(w.begin()));
Run Code Online (Sandbox Code Playgroud)
但是,当然,dynamic_cast_iterator不存在.
如何在for循环中初始化列表:
for x, y in zip(list_x, list_y):
x = f(x, y)
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使我想要它,这个循环也不会改变list_x.
有没有办法在循环中引用list_x的元素?
我意识到我可以使用列表理解,但是当for循环非常复杂时,这很难理解.
编辑:我的for
循环是20行.您通常会将20行放入单个列表理解中吗?
我似乎无法在字符串的parse()方法上找到任何文档.有一个很好的参考?我想解析以下内容:
frame 0 rows {3 2 3 3 3 3 2 3 2 3 3 3 2 3 2 3 4 3 3 4 3 2 2 3 3 3 2 2 2 2 3 3 3 2 3 2 3 3 3 3 4 3 4 3 3 3 3 4 3 2 3 3 3 3 2 2 2 4 4 3 3 3 3 3 4 4 4 3 2 4 3 4 3 3 3 4 …
Run Code Online (Sandbox Code Playgroud) 给定使用Boost.Python公开的C++类,如何公开两个构造函数:
我的模块全部位于一个大文件中,该文件越来越难以维护。打破事物的标准方式是什么?
我的文件中有一个模块my_module.py
,我像这样导入它:
import my_module
Run Code Online (Sandbox Code Playgroud)
“my_module”很快就会有一千行,这正在突破我保持一切正常的能力的极限。我正在考虑添加文件my_module_base.py
,my_module_blah.py
等等,然后替换my_module.py
为
from my_module_base import *
from my_module_blah import *
# etc.
Run Code Online (Sandbox Code Playgroud)
然后,用户代码不需要更改:
import my_module # still works...
Run Code Online (Sandbox Code Playgroud)
这是标准模式吗?
python ×8
numpy ×3
arrays ×1
boost ×1
boost-python ×1
c++ ×1
getattr ×1
list ×1
numpy-einsum ×1
parsing ×1
pyqt ×1
python-3.x ×1
stl ×1
string ×1