在 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 创建是否要求这样做?
我对 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) 如何在不更改模块名称的情况下跳过此错误?
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)
我还能尝试什么?
我有一个数据类,比方说:
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)
我觉得必须定义两者很奇怪。
我正在看一个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*,但并未真正解释它。
如何指定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) 我编写了一个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 编写一个事件发射器类。
目前代码如下所示:
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)?
以下代码从 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) 我 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)
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)
import { App } from './entities/app';
import { appDataSource } from …Run Code Online (Sandbox Code Playgroud) 我有一个函数将返回一个字典,例如:
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 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 ×9
mypy ×3
typing ×2
amazon-s3 ×1
any ×1
conda ×1
datasource ×1
f-string ×1
ipython ×1
javascript ×1
nestjs ×1
numpy ×1
postgresql ×1
pylint ×1
pyright ×1
python-3.10 ×1
python-3.x ×1
python-assignment-expression ×1
return ×1
setup.py ×1
shadowing ×1
typeddict ×1
typeorm ×1
types ×1
versioning ×1