Skip to main content

该模块允许您在每次迭代之间注入函数调用,而无需手动执行。创建主要是为了好玩:)

项目描述

注入循环

我为了好玩而创建的这个模块让您可以在每次迭代之间在循环本身内部注入函数调用。

重要的!目前,它只支持单行for循环(只支持“签名”),即

for XYZ().xyz in obj([], [], []):

会工作,并且

for XYZ().xyz in obj(
        [],
        [],
        []
):

将不会!

用法:

  • inject_in_loop.Base使用您自己的类导入并继承它。
  • 继承类必须定义一个名为的属性/方法,该属性/方法function将在每次迭代之间调用。
  • 使用以下语法:

for YourClass().item in Array:...

for YourClass().item1.item2 in Array:...

for YourClass().item1, YourClass().item2 in Array:...

for YourClass().item1, item2 in Array:...

  • 在第一种情况下,该变量item将可用。
  • 在第二种情况下,变量item1item2将可用,它仅在数组中的每个元素都可以解包成一个双项元组的情况下才起作用,就像常规for a,b in array:...
  • 在第三种情况下,变量item1item2将可用,就像第二个示例一样。但是,在这种情况下YourClass.function,每次迭代都会调用两次,因为该示例中有两个对象。
  • 在第四个场景中,变量item1item2将是可用的,和第二个例子一样,其实和第二个场景是一样的。

您还可以将参数传递给将被发送到的类function

一个例子inject_in_loop/main.py

from inject_in_loop import Base
from time import sleep


class Sleep(Base):
    function = sleep


for Sleep(0.3).range1.range2 in zip(range(10), range(10)):
    print(range1 + range2, "[obj.a.b] a + b")

它会在每次迭代之间休眠 0.3 秒,输出将是:

0 [obj.a.b] a + b
2 [obj.a.b] a + b
4 [obj.a.b] a + b
6 [obj.a.b] a + b
8 [obj.a.b] a + b
10 [obj.a.b] a + b
12 [obj.a.b] a + b
14 [obj.a.b] a + b
16 [obj.a.b] a + b
18 [obj.a.b] a + b

或者:

class PrintNewLine(Base):
    function = print


for PrintNewLine().item in ("a", "b", "c"):
    print(item)

输出将是

a

b

c

您可以在 中看到几个示例inject_in_loop/main.py

为了运行这些示例,您需要直接运行该文件(而不是通过导入它。)。

您还可以创建 mixins,它将调用带有相应参数的多个函数,如 ex 示例中所示:

from inject_in_loop import Base
from time import sleep

class Mixin(Base):
    functions = [sleep, print]

for Mixin(f_params={"sleep": (1,),"print": ()}).element in range(10):
    print(element)

您必须指定参数 f_params(必须是关键字参数),它将为每个函数保存一个带有相应参数元组的字典。mixin 中的函数将保存在functions类中命名的属性下。

您还可以在 for 循环中使用解包,如示例中所示:

from inject_in_loop import Base
from time import sleep

class Sleep(Base):
    function = sleep
    
    
for Sleep(0.3, unpack="b").a.b.c in [["a", "b", "c", "d"]]*5:
    print(a, b, c)

结果将是:

a ['b', 'c'] d
a ['b', 'c'] d
a ['b', 'c'] d
a ['b', 'c'] d
a ['b', 'c'] d

b是“加星标”参数,如表达式a, *b, c = ["a", "b", "c", "d"]. 您不能有多个加星标的论点。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

InjectInLoop-1.0.2.tar.gz (3.5 kB 查看哈希

已上传 source

内置分布

InjectInLoop-1.0.2-py3-none-any.whl (4.0 kB 查看哈希

已上传 py3