我想这是一个初学者的问题,但我想知道当您遇到使用模块中定义的类中的类方法以及方法的情况时,使用更 Pythonic 的方法在模块本身中定义。我将以 numpy 为例。
import numpy as np
foo = np.matrix([[3, 4], [9, 12]])
# Get norm (without using linalg)
norm = np.sqrt(foo.dot(foo.T)).diagonal()
我可以使用混合大小写,像这样,我调用 foo 的方法和 numpy 中定义的方法,或者我可以编写如下代码:
norm = np.diagonal(np.sqrt(np.dot(foo, foo.T)))
我自己更喜欢使用 foo.bar.baz.shoop.doop 语法,但在这种情况下我不能,因为 sqrt 不是 foo 的方法。那么,写这样一行的更 Pythonic 的方式是什么?
顺便问一下,与模块中定义的方法相比,类方法通常更优化吗?我不太了解幕后发生的事情,但我假设(再次以 numpy 为例)numpy 有一个 np.dot 方法,该方法是为 arg 可以是数组或矩阵的一般情况编写的,而 np.matrix.dot 仅针对矩阵运算重新实现和优化。如果我在这方面错了,请纠正我。