我有一些命名元组:
JOIN = NamedTuple("JOIN", [])
EXIT = NamedTuple("EXIT", [])
Run Code Online (Sandbox Code Playgroud)
我还有处理每种类型元组的函数:
def handleJoin(t: JOIN) -> bool:
pass
def handleExit(t: EXIT) -> bool:
pass
Run Code Online (Sandbox Code Playgroud)
我想做的是创建一个字典,handleTuple这样我就可以这样称呼它:
t: Union[JOIN, EXIT] = #an instance of JOIN or EXIT
result: bool
result = handleTuple[type(t)](t)
Run Code Online (Sandbox Code Playgroud)
我不知道如何定义所述字典。我尝试定义一个泛型T:
T = TypeVar("T", JOIN, EXIT)
handleTuple: Dict[T, Callable[[T], bool]
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息“类型变量 T 未绑定”,我不明白。到目前为止我得到的最接近的是:
handleTuple: Dict[Type[Union[JOIN, EXIT]], bool]
handleTuple = {
JOIN: True
EXIT: False
}
Run Code Online (Sandbox Code Playgroud)
这可以很好地按照我想要的方式调用它,但是我无法弄清楚Callable定义中的部分,因此我可以包含我的函数。我怎样才能做到这一点
我有点困惑我应该如何输入基类抽象方法?
在这种情况下,我的基类只要求继承类实现一个名为“learn”的方法,该方法返回 None 而不强制任何参数。
class MyBaseClass(ABC):
@abstractmethod
def learn(self, *args, **kwargs) -> None:
raise NotImplementedError()
Run Code Online (Sandbox Code Playgroud)
但如果我实现它 mypy 会引发错误““学习”签名与超类型“MyBaseClass”不兼容”
class MyOtherClass(MyBaseClass):
def learn(self, alpha=0.0, beta=1) -> None:
# do something
return None
Run Code Online (Sandbox Code Playgroud)
那么我应该如何在基类中声明 learn 方法呢?
@enum.nonmember我试图为Python 3.11 中的新装饰器提出一个用例。文档明确提到它是一个应用于成员的装饰器。但是,当我尝试直接直接装饰成员时:
import enum
class MyClass(enum.Enum):
A = 1
B = 2
@enum.nonmember
C = 3
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
Traceback (most recent call last):
File "C:\Program Files\Python311\Lib\code.py", line 63, in runsource
code = self.compile(source, filename, symbol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\codeop.py", line 153, in __call__
return _maybe_compile(self.compiler, source, filename, symbol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\codeop.py", line 73, in _maybe_compile
return compiler(source, filename, symbol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\codeop.py", line 118, in __call__
codeob = compile(source, filename, symbol, self.flags, True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<input>", line …Run Code Online (Sandbox Code Playgroud) 我需要获取python使用的随机哈希种子来复制失败的单元测试.
如果PYTHONHASHSEED设置为非零整数,sys.flags.hash_randomization则可靠地提供它:
$ export PYTHONHASHSEED=12345
$ python3 -c 'import sys, os;print(sys.flags.hash_randomization, os.environ.get("PYTHONHASHSEED"))'
12345 12345
Run Code Online (Sandbox Code Playgroud)
但是,如果哈希是随机的,它只是指出该种子使用,而不是其中:
$ export PYTHONHASHSEED=random
$ python3 -c 'import sys, os;print(sys.flags.hash_randomization, os.environ.get("PYTHONHASHSEED"))'
1 random
Run Code Online (Sandbox Code Playgroud)
信息sys.hash_info从不包括取决于种子的数据.使用python3.4之后的哈希函数,尝试从给定的哈希重构种子似乎也是不可行的.
上下文:在微调算法时,我们已经看到了依赖于set/dict迭代次序的heisenbug.复制它们需要测试种子,最糟糕的是所有4294967295,但即使我们平均约100次测试也很长.
我们一直考虑将PYTHONHASHSEED外部设置为随机但已知的值,但我们希望避免使用这个额外的层.
我正在阅读 python 文档https://docs.python.org/3/reference/expressions.html about generator.close()。
我对文档的翻译是:
##generator.close()
GeneratorExit在生成器函数暂停的位置引发 a 。
1.1 已经关闭,
1.2 或引发GeneratorExit(通过不捕获异常),
close 返回给它的调用者。
如果生成器产生一个值,则 aRuntimeError被提高。
如果生成器引发任何其他异常,则会将其传播给调用者。
close() 如果由于异常或正常退出,生成器已经退出,则不执行任何操作。
我不明白该close()行为如何对应于文档。
>>> def echo(value=None):
... print("Execution starts when 'next()' is called for the first time.")
... try:
... while True:
... try:
... value = (yield value)
... except Exception as e:
... value = e
... finally:
... print("Don't forget to clean up when 'close()' is called.")
... …Run Code Online (Sandbox Code Playgroud) 我一直在尝试同时运行两个功能,但一个功能似乎永远无法工作,除非我停止另一个功能。第一个函数每 30 秒发送一封电子邮件,而第二个函数每 5 秒打印一条简单的语句。组合起来,每 6 个“Hello Worlds”输出应发送一封电子邮件。
然而,我从来没有收到过电子邮件,除非将打印更改为提前停止,例如 10 秒后结束。我该怎么做才能让两者同时运行而不停止?
async def timer():
end = time.time() + 30
while True:
if time.time() >= end:
sendmail(name, filepath + "\\" + name, receiver)
end = time.time() + 30
async def runs():
while True:
print("Hello World")
time.sleep(5)
loop = asyncio.get_event_loop()
loop.create_task(runs())
loop.create_task(timer())
loop.run_forever()
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习 Celery,我正在使用 Django 2.0 和 celery 5.0.2,我的操作系统是 Ubuntu。
这是我的结构我的项目结构是:
celery/
manage.py
celery/
__init__.py
cerely_app.py
settings.py
urls.py
wsgi.py
apps/
main/
__init__.py
admin.py
apps.py
models.py
task.py
views.py
test.py
Run Code Online (Sandbox Code Playgroud)
我的 cerely_app 配置基于文档:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery.settings')
app = Celery('celery')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
Run Code Online (Sandbox Code Playgroud)
还有我的init.py:
from .celery_app import app as celery_app
__all__ = ('celery_app',)
Run Code Online (Sandbox Code Playgroud)
但是当我使用命令 python3 manage.py runserver 时 django 给出导入错误:
$python3 manage.py runserver
Traceback (most recent call last):
File "manage.py", line 15, in …Run Code Online (Sandbox Code Playgroud) 该class语句采用各种功能的关键字参数。例如,该__init_subclass__函数接收在类声明中传递的关键字参数:
class A(object):
def __init_subclass__(cls, **kwargs):
print(f'{kwargs=}')
class B(A, my_arg=5):
pass
Run Code Online (Sandbox Code Playgroud)
kwargs={'my_arg': 5}
Run Code Online (Sandbox Code Playgroud)
但是,这样做会阻止动态类创建:该type函数似乎不采用class关键字参数。工厂函数可以,但__init_subclass__在工厂必须修改类时可能会发生冲突或类似。
我想type()在其 3 参数版本中使用内置函数来动态创建一个类。但是,似乎没有记录的方法来传递关键字参数(如my_arg前面的示例)。
推荐的做法是什么?
我有一个应用程序,它已经无限运行,异步事件循环永远运行,而且我需要每 10 秒运行一个特定的函数。
def do_something():
pass
a = asyncio.get_event_loop()
a.run_forever()
Run Code Online (Sandbox Code Playgroud)
我想每 10 秒调用一次函数 do_something 。如何在不使用 while 循环替换 asynctio 事件循环的情况下实现这一目标?
编辑:我可以用下面的代码来实现这一点
def do_something():
pass
while True:
time.sleep(10)
do_something()
Run Code Online (Sandbox Code Playgroud)
但我不想使用 while 循环在我的应用程序中无限运行,而是想使用 asyncio run_forever()。那么如何使用 asyncio 每 10 秒调用相同的函数呢?有没有类似的调度程序不会阻止我正在进行的工作?
Q = [np.array([0, 1]), np.array([1, 2]), np.array([2, 3]), np.array([3, 4])]
for q in Q:
print(q in Q)
Run Code Online (Sandbox Code Playgroud)
运行上面的代码,它在第一次迭代时给出结果“True”,而随后出现 ValueError。
真的
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
我不知道为什么它在第二次迭代时开始出错。任何人都可以帮助我plz..
python ×9
python-3.x ×5
mypy ×2
asynchronous ×1
celery ×1
django ×1
enums ×1
generator ×1
generics ×1
hash ×1
python-3.11 ×1
unit-testing ×1
valueerror ×1