小编Hyp*_*ane的帖子

Sphinx + reStructuredText 中的内联代码链接

在 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`,但这也不起作用。

python restructuredtext cross-reference python-sphinx

8
推荐指数
1
解决办法
955
查看次数

*为什么* object() 不支持 `setattr`,但派生类却支持?

今天我偶然发现了以下行为:

\n
class 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\'\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道设计这种语言背后的逻辑是什么,因为这对我来说完全是自相矛盾的。它打破了我的直觉,如果我创建一个子类,不加修改,它的行为应该与父类相同。

\n
\n

编辑:很多答案表明这是因为我们希望能够编写可以使用的类,__slots__而不是__dict__出于性能原因。然而,我们可以这样做:

\n
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\n
Run Code Online (Sandbox Code Playgroud)\n

所以看起来我们可以同时拥有两者,那么为什么不允许__slots__两者同时存在,但一对一的子类却允许呢?__dict__object

\n

python python-3.x

7
推荐指数
2
解决办法
468
查看次数

Argparse可选布尔

我正在尝试获得以下行为:

  • python test.py =>存储foo = False
  • python test.py --foo =>存储foo = True
  • python test.py --foo bool =>存储foo = bool

当我使用时有效

    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。这是怎么回事??

python argparse python-3.x

6
推荐指数
2
解决办法
7386
查看次数

从 SymPy 中的给定多项式中提取系数和相应的单项式

给定一个符号多元多项式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} …

python sympy python-3.x polynomials

5
推荐指数
1
解决办法
2911
查看次数

Python打印对齐的numpy数组

当我通过以下方式打印 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)

numpy python-3.x

5
推荐指数
1
解决办法
2086
查看次数

如何正确键入提示类装饰器?

假设我们有一些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真的不喜欢,引发错误: …

type-hinting mypy python-typing python-3.9 python-3.10

5
推荐指数
1
解决办法
1405
查看次数