小编STe*_*kov的帖子

为什么 f 字符串需要在赋值表达式两边加上括号?

在 Python (3.11) 中,为什么在 f 字符串内使用赋值表达式(“海象运算符”)时需要用括号括起来?

例如:

#!/usr/bin/env python

from pathlib import Path

import torch


DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")

ckpt_dir = Path("/home/path/to/checkpoints")

_ckpt = next(ckpt_dir.iterdir())
print(_ckpt)
sdict = torch.load(_ckpt, map_location=DEVICE)

model_dict = sdict["state_dict"]

for k, v in model_dict.items():
    print(k)
    print(type(v))
    print(_shape := v.size())
    print(f"{(_numel := v.numel())}")
    print(_numel == torch.prod(torch.tensor(_shape)))
Run Code Online (Sandbox Code Playgroud)

上面的代码块 withprint(f"{_numel := v.numel()}")相反不会解析。

解析/AST 创建是否要求这样做?

python f-string python-assignment-expression

15
推荐指数
2
解决办法
1650
查看次数

AWS - 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

我对 AWS 还很陌生,所以请耐心等待:(

我目前正在制作一个具有上传照片功能的网络应用程序。我想将这些照片保存在 S3 存储桶中,并将对它们的引用保存在我的数据库中。我目前正在遵循本指南:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

但是,我已经完成了指南中所述的所有操作(或者至少我希望如此),但是当我运行应用程序并运行该createAlbum()方法时,我收到错误:

XMLHttpRequest cannot load https://my-bucket-name.s3-us-west-2.amazonaws.com/myalbumname/. 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

我确保存储桶权限中允许所有用户拥有权限,我按照文档的指示更新了 CORS 配置,并更新了角色策略。

这是我的凭据代码:

var albumBucketName = 'my-bucket-name'; //not the real value, obviously
var bucketRegion = 'us-west-2';
var IdentityPoolId = 'my-identity-pool-id'; //here, too
AWS.config.update({
  region: bucketRegion,
  credentials: new AWS.CognitoIdentityCredentials({
  IdentityPoolId: IdentityPoolId
});
var s3 = new AWS.S3({
  apiVersion: '2006-03-01',
  params: {Bucket: …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-s3 amazon-web-services

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

Pylint - 如何跳过无效名称模块错误

如何在不更改模块名称的情况下跳过此错误?

Module name AaB doesn't conform to snake_case naming style ('[^\\W\\dA-Z][^\\WA-Z]*$' pattern) (invalid-name)
Run Code Online (Sandbox Code Playgroud)

我在模块开始时尝试过

# pylint: disable-all
Run Code Online (Sandbox Code Playgroud)

# pylint: disable=invalid-name
Run Code Online (Sandbox Code Playgroud)

我还尝试在.pylintrc文件中配置:

ignore-patterns=AaB.py
Run Code Online (Sandbox Code Playgroud)

我还能尝试什么?

python pylint

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

是否可以使用 dataclass 而不是 typeddict 来定义 dict 类型并使 mypy 满意?

我有一个数据类,比方说:

from dataclasses import dataclass

@dataclass
class Foo:
    bar: int
    baz: int
Run Code Online (Sandbox Code Playgroud)

我有一个从接收 json 并将其作为字典加载的 API 调用的函数:

def handler(foo) -> Foo:
    return Foo(**foo)
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以输入 foo 而无需实际创建TypedDict数据类的镜像?

例如:

from typing_extensions import TypedDict


class SerializedFoo(TypedDict):
    bar: int
    baz: int
Run Code Online (Sandbox Code Playgroud)

我觉得必须定义两者很奇怪。

python mypy python-dataclasses python-typing typeddict

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

setup.py 中的依赖版本说明符后的单个“=”

我正在看一个setup.py具有以下语法的:

from setuptools import setup

setup(
...
    tests_require=["h5py>=2.9=mpi*",
                   "mpi4py"]
)
Run Code Online (Sandbox Code Playgroud)

我理解 ">= 的想法,其中h5py至少应该是 2.9 版本,但我一生都无法理解=mpi*之后的内容。是不是说版本应该以某种方式与 mpi 版本匹配,同时至少为 2.9?

我找不到任何解释指定 python 包版本的内容,也解释了单个=.

我发现它使用的唯一其他地方是一些晦涩的博客文章,似乎暗示它有点像使用别名导入包,这对我来说没有多大意义;还有mpi4py 文档,其中包含命令行片段conda install -c conda-forge h5py=*=mpi* netcdf4=*=mpi*,但并未真正解释它。

python versioning setup.py conda

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

指定通过输入接受的特定函数。Literal

如何指定typing我的函数仅接受特定的可调用对象?例如,我想要类似于这样的功能:

import typing

def accepted_function1():
    pass
def accepted_function2():
    pass

def function_accepting_functions(foo: Literal[accepted_function1, accepted_function2]):
    foo()
Run Code Online (Sandbox Code Playgroud)

python typing python-typing

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

有没有办法用 mypy 覆盖 python 中继承的类属性类型?

我编写了一个defaultdict可以default_factory使用 key 作为参数进行调用的子类。

from collections import defaultdict
from typing import TypeVar, Any, Callable, Generic

K = TypeVar('K')


class keydefaultdict(defaultdict, Generic[K]):
    ''' Drop-in replacement for defaultdict accepting key as argument '''

    default_factory: Callable[[], Any] | Callable[[K], Any] | None

    def __missing__(self, key: K) -> Any:
        if self.default_factory is None:
            raise KeyError(key)
        else:
            try:
                ret = self[key] = self.default_factory(key)
            except TypeError:  # try no-key signature
                ret = self[key] = self.default_factory()
            # if failed, let the error propagate as …
Run Code Online (Sandbox Code Playgroud)

python mypy python-typing python-3.10

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

在旧版本的 Python 上使用现代输入功能

因此,我正在使用 Python 编写一个事件发射器类。

目前代码如下所示:

from typing import Callable, Generic, ParamSpec

P = ParamSpec('P')

class Event(Generic[P]):
  def __init__(self):
    ...

  def addHandler(self, action : Callable[P, None]):
    ...

  def removeHandler(self, action : Callable[P, None]): 
    ...

  def fire(self, *args : P.args, **kwargs : P.kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)

如您所见,注释依赖于,它仅在 python 3.10 中ParamSpec添加。typing

虽然它在 Python 3.10(在我的机器上)中运行良好,但在 Python 3.9 及更早版本(在其他机器上)中却失败了,因为这ParamSpec是一项新功能。

那么,如何ParamSpec在运行程序时避免导入或使用一些后备替代方案,同时不混淆编辑器中的输入(pyright)?

python python-typing pyright

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

告诉 mypy 我确实知道返回参数的类型

以下代码从 mypy 中产生一个可以理解但错误的错误:

from typing import List, Union, Any

class classA():
    def __init__(self, name: str) -> None:
        self.__name = name

    def __eq__(self, other: Any) -> bool:
        if (type(self) == type(other)):
            return (self.name == other.name)
        return False

    @property
    def name(self) -> str:
        return self.__name


class classB():
    def __init__(self, id: int) -> None:
        self.__id = id

    def __eq__(self, other: Any) -> bool:
        if (type(self) == type(other)):
            return (self.id == other.id)
        return False

    @property
    def id(self) -> int:
        return self.__id


class classC():
    def …
Run Code Online (Sandbox Code Playgroud)

python-3.x mypy

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

TypeORM 找不到“MyEntity”的元数据

我 1. 在“app-data-source.ts”上有以下数据源

import { DataSource } from "typeorm";
import { App } from "./entities/app";

export const appDataSource = new DataSource({
    type: 'postgres',
    host: process.env.CONFIG_DB_HOST,
    port: 5432,
    username: process.env.CONFIG_DB_USER,
    password: process.env.CONFIG_DB_PASSWORD,
    database: process.env.CONFIG_DB_DATABASE,
    entities: [App],
    synchronize: false,
});

Run Code Online (Sandbox Code Playgroud)
  1. 它在“entities/app.ts”上使用实体应用程序
import { Column, Entity, PrimaryColumn } from "typeorm";

@Entity('apps')
export class App {
    @PrimaryColumn()
    tenant_id: number;
    
    @Column()
    client_id: string;
    
    @Column()
    legacy_client_id: string;

    @Column()
    user_pool: string;
}
Run Code Online (Sandbox Code Playgroud)
  1. 以及查询实体应用程序的以下模块(如上图 2 所示)。
import { App } from './entities/app';
import { appDataSource } from …
Run Code Online (Sandbox Code Playgroud)

postgresql datasource typeorm nestjs

2
推荐指数
1
解决办法
2467
查看次数

如何在Python中使用Dict指定类型提示

我有一个函数将返回一个字典,例如:

from typing import Dict

def foo() -> Dict[]:
    params = {
        "side": "Buy",
        "symbol": "BTCUSDT",
        "order_type": "Market",
        "time_in_force": "PostOnly",
        "reduce_only": False,
        "close_on_trigger": False,
    }
    return {
        "method": "POST",
        "api": "private/linear/order/create",
        "body": params
    }
Run Code Online (Sandbox Code Playgroud)

里面的内容应该是什么Dict[]

python types return typing python-typing

2
推荐指数
1
解决办法
1683
查看次数

Python 中的 all(map) 和 any(map) 输出布尔值,但 IPython 中输出 true 映射对象

我使用 python 3.10.1,通过 ipython (7.31.0,调用相同的 python 3.10.1)交互进行探索,然后在脚本准备好后直接通过 python 进行探索。

我的代码中有一个错误,我将其简化为两者之间的以下行为差异:

[Python]

In [1]: any(map(bool, ("")))
Out[1]: <map at 0x7f7f2d6061d0>
Run Code Online (Sandbox Code Playgroud)

[CPython]

>>> any(map(bool, ("")))
False
Run Code Online (Sandbox Code Playgroud)

因为 IPython 中的输出map对象是真实的,所以当在语句中使用代码时,if两个程序将给出相反的结果。我想知道是什么导致了这种差异,是否可以采取任何措施来修复它,以及是否存在其他类似的错误(功能?)我应该注意。

python numpy ipython shadowing any

2
推荐指数
1
解决办法
96
查看次数