0

我昨天刚刚从这个网站了解到我可以:

class Seq(object):
    def __init__(self, seq):
        self.seq = seq
    def __repr__(self):
        return repr(self.seq)
    def __str__(self):
        return str(self.seq)
    def all(self):
        return Seq(self.seq[:])
    def head(self, count):
        return Seq(self.seq[:count])
    def tail(self, count):
        return Seq(self.seq[-count:])
    def odd(self):
        return Seq(self.seq[1::2])
    def even(self):
        return Seq(self.seq[::2])
    def reverse(self):
        return Seq(self.seq[::-1])

>>> s = Seq(range(0, 100))
>>> print s.head(10).odd().even().reverse()
[9, 5, 1]

我想枚举类 Seq 中这些序列方法链的可能组合,可能是:

itertools.product([s.head,s.odd,s.even,s.reverse], repeat=4)    
# may not just limited those 4 functions
  1. 如何itertools.product()使用

    1)。生成可调用的函数链列表?像这样:

    foo = s.head().odd().even().reverse()

    2)。生成 eval()able 链字符串,然后我可以稍后存储在 ascii 文件或 eval() 中或用于记录目的?

  2. ,可以接受参数,而,head()不需要,例如 head() 和 tail() 的参数可以来自列表: tail()even()odd()

      head_lmt = [10,20,30]
      tail_lmt = [30,40,50]
      foo = s.head().odd().tail().reverse()
                   ^------------------------------------head_lmt  10 or 20 or 30
                                ^-----------------------tail_lmt  30 or 40 or 50
    

如果我的 Q1 是可能的,我如何将这些参数填充到可调用列表和 eval()-able 字符串中,也就是生成更具体的可调用列表和 eval()-able 字符串?

谢谢!

4

1 回答 1

0

请注意,“s.head()”之类的内容表示“绑定”到 Seq 的特定实例的方法,即“s”。像“Seq.head()”这样的东西意味着一个未绑定的方法,所以仍然可以传入不同的 Seq 实例。

从那里它只需要基本的功能组合和字符串连接。

def chain_method(from_method, to_method):
    def inner(arg):
        return to_method(from_method(arg))
    return inner

possible_funcs = []
log_strings = []
for possible_combo in itertools.product([Seq.head,Seq.odd,Seq.even,Seq.reverse], repeat=4):
    meta_method = possible_combo[0]
    for method in possible_combo[1:]:
        meta_method = chain_method(meta_method, method)
    log_string = []
    for method in possible_combo:
        log_string.extend(['.', method.__name__, '()'])
    possible_funcs.append(meta_method)
    log_strings.append("".join(log_string))

不过,我不确定附加参数的示例是什么意思。您打算如何将不同的参数值与不同的功能组合结合起来?

于 2011-06-05T06:25:30.630 回答