在 Markdown 中,可以像这样创建内联代码链接
[`dict.update`](https://docs.python.org/3/library/stdtypes.html#dict.update)
Run Code Online (Sandbox Code Playgroud)
渲染效果如下dict.update。如何在 reStructuredText / Sphinx 中获得类似的行为?我尝试(1)使用转换器,但它永远不会产生类似的结果(2)嵌套外部链接`link <link>`_和内联代码块:code:`dict.update`,但这也不起作用。
今天我偶然发现了以下行为:
\nclass myobject(object):\n """Should behave the same as object, right?"""\n\nobj = myobject()\nobj.a = 2 # <- works\nobj = object()\nobj.a = 2 # AttributeError: \'object\' object has no attribute \'a\'\nRun Code Online (Sandbox Code Playgroud)\n我想知道设计这种语言背后的逻辑是什么,因为这对我来说完全是自相矛盾的。它打破了我的直觉,如果我创建一个子类,不加修改,它的行为应该与父类相同。
\n编辑:很多答案表明这是因为我们希望能够编写可以使用的类,__slots__而不是__dict__出于性能原因。然而,我们可以这样做:
class myobject_with_slots(myobject):\n __slots__ = ("x",)\n \nobj = myobject_with_slots()\nobj.x = 2\nobj.a = 2\nassert "a" in obj.__dict__ # \xe2\x9c\x94\nassert "x" not in obj.__dict__ # \xe2\x9c\x94\nRun Code Online (Sandbox Code Playgroud)\n所以看起来我们可以同时拥有两者,那么为什么不允许__slots__两者同时存在,但一对一的子类却允许呢?__dict__object
我正在尝试获得以下行为:
当我使用时有效
parser.add_argument('--foo',nargs='?', default=False, const=True)
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加type=bool,则尝试将强制转换为布尔值会中断。在这种情况下
python test.py --foo False
Run Code Online (Sandbox Code Playgroud)
实际最终存储foo=True。这是怎么回事??
给定一个符号多元多项式P,我需要将其系数和相应的单项式提取为列表:
def poly_decomp(P):
....
return coeffs, monoms
Run Code Online (Sandbox Code Playgroud)
这P是系数和单项式的点积,例如,如果P(x,y) = ax**2 + bxy + cy**2那么我们应该得到coeffs = [a, b, c]和monoms = [x**2, x*y, y**2]。
由于该函数是内置的,因此获取系数很容易coeffs = P.coeffs()。但是,我在获取单项式时遇到了麻烦。这里的内置函数返回一个指数列表,例如,在上面的示例中我们将得到P.monoms() = [(2,0),(1,1),(0,2)]。
显然,这个想法是,提供一个变量列表var=[x,y],做类似的事情
powers = P.monoms()
monoms = [sympy.prod(x**k for x,k in zip(var, mon)) for mon in powers ]
Run Code Online (Sandbox Code Playgroud)
然而,多项式类似乎没有提供返回变量列表的函数。我能找到的只是返回集合 和 的方法free_symbols和。因此,通过取它们的差值,可以获得一组。free_symbols_in_domain{a, b, c, x, y}{a, b, c} {x, y} …
当我通过以下方式打印 numpy 数组时:
print('Array: ', A)
Run Code Online (Sandbox Code Playgroud)
结果格式错误:
Array: [[0.0000 0.5000]
[0.0000 0.3996]]
Run Code Online (Sandbox Code Playgroud)
相反,我想“正确”对齐:
Array: [[0.0000 0.5000]
[0.0000 0.3996]]
Run Code Online (Sandbox Code Playgroud) 假设我们有一些func将类的实例映射A到类的实例的函数B,即它具有签名Callable[[A], B]。
我想autofunc为子类编写一个类装饰器,在创建实例时A自动应用于实例。func例如,考虑基于全局环境变量的自动 jit 编译。这可以通过以下方式完成
from functools import wraps
def autofunc(basecls):
@wraps(basecls, updated=())
class WrappedClass(basecls):
def __new__(cls, *args, **kwargs):
instance = basecls(*args, **kwargs)
return func(instance)
return WrappedClass
Run Code Online (Sandbox Code Playgroud)
那么下面两条大致等价:
class C(A): ... instance = func(C()) |
@autofunc class C(A): ... instance = C() |
|---|
出于我的天真,我尝试过
def autofunc(basecls: type[A]) -> type[B]:
@wraps(basecls, updated=())
class WrappedClass(basecls):
def __new__(cls, *args, **kwargs):
instance = basecls(*args, **kwargs)
return func(instance)
return WrappedClass
Run Code Online (Sandbox Code Playgroud)
这mypy真的不喜欢,引发错误: …
python ×4
python-3.x ×4
argparse ×1
mypy ×1
numpy ×1
polynomials ×1
python-3.10 ×1
python-3.9 ×1
sympy ×1
type-hinting ×1