小编Leo*_*hen的帖子

如何让 Mypy 识别不可为 null 的 ORM 属性?

Mypy 将 ORM 不可为 null 的实例属性推断为可选。

文件名:test.py

from sqlalchemy.orm import decl_api, registry
from sqlalchemy import BigInteger, Column, String

mapper_registry = registry()


class Base(metaclass=decl_api.DeclarativeMeta):
    __abstract__ = True

    registry = mapper_registry
    metadata = mapper_registry.metadata

    __init__ = mapper_registry.constructor


class Person(Base):
    __tablename__ = "persons"

    id = Column(BigInteger, primary_key=True, autoincrement=True)
    name = Column(String(40), nullable=False)


def main(person: Person):
    person_id = person.id
    person_name = person.name

    reveal_locals()
Run Code Online (Sandbox Code Playgroud)

运行mypy test.py产量:

test.py:27: note: Revealed local types are:
test.py:27: note:     person: test.Person
test.py:27: note:     person_id: Union[builtins.int, None]
test.py:27: …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy mypy

6
推荐指数
1
解决办法
689
查看次数

为什么函数中使用的对象属性被称为未绑定变量?

我正在使用该inspect模块来了解有关函数命名空间的更多信息:

import inspect

def foo():
    inspect.__cache__.update({'dummy': 0}) # Could be any class/attribute here

print(inspect.getclosurevars(foo))
Run Code Online (Sandbox Code Playgroud)

重新格式化输出:

ClosureVars(
    nonlocals={}, 
    globals={'inspect': <module 'inspect' from ='C:\\Users\\guido\\AppData\\Local\\Programs\\Python\\Python39\\lib\\inspect.py'>}, 
    builtins={}, 
    unbound={'__cache__', 'update'}
)
Run Code Online (Sandbox Code Playgroud)

为什么函数中使用的对象的属性(即__cache__update这种特殊情况下)被称为未绑定变量?


仔细观察inspect.getclosurevars可以确定字节码中的未绑定变量。更具体地说,它返回变量 in foo.__code__.co_namesthat is in foo.__globals__

所以真正的问题可能是:

  • 对象属性是否属于foo.__code__.co_names当前定义?这本身就是一个难题,因为它的定义似乎尚未确定
  • 模块像当前所做的那样inspect确定变量是否正确?unbound这里的正确是指返回值是否符合变量的定义unbound

python cpython

5
推荐指数
0
解决办法
100
查看次数

Python 类型提示中的符号 @ 是什么意思?

如下图所示,_S@map和是什么_T@map意思?

在此输入图像描述


附加信息:

查看multiprocessing.Pool.map定义,没有类型提示,因此上面的类型必须由 Pylance 自动生成,Pylance 是我使用的语言服务器

    def map(self, func, iterable, chunksize=None):
        '''
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        '''
        return self._map_async(func, iterable, mapstar, chunksize).get()
Run Code Online (Sandbox Code Playgroud)

python docstring visual-studio-code pylance

5
推荐指数
0
解决办法
404
查看次数

在 CONDA 环境中专门使用 PIP 有哪些陷阱?

背景

官方文档和此博客位于同一网站 - 建议安装尽可能多的需求,conda然后使用 pip。显然这是因为conda将不知道对依赖项所做的任何更改pip,因此无法正确解析依赖项。

问题

现在,如果一个人专门使用pip并且不安装任何东西conda,那么似乎有理由期望conda不需要知道所做的任何更改pip- 因为conda实际上变成了一个隔离依赖项和管理版本的工具。然而,这违背了官方建议,因为人们不会安装尽可能多的要求conda

所以问题仍然存在:在环境中专门使用是否有任何已知的缺点?pipconda

类似主题

此处触及了一些类似的主题,但不涵盖专门在环境中使用的情况。我也来过这里:pipconda

python pip python-3.x anaconda conda

4
推荐指数
1
解决办法
540
查看次数