Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问作为可选参数传递的类实例的属性_Python_Class_Python 2.7_Instance_Argument Passing - Fatal编程技术网

Python 访问作为可选参数传递的类实例的属性

Python 访问作为可选参数传递的类实例的属性,python,class,python-2.7,instance,argument-passing,Python,Class,Python 2.7,Instance,Argument Passing,我有两个具有列表属性的类实例,例如: foo.range = [1,2] bar.range = [3,4] 我还有一个接受多个参数的函数: def permutations(*args): return list(itertools.product(arg.range for arg in args)) 我希望permutations(foo,bar)返回这两个(或更多)列表的所有排列(即[(1,3)、(1,4)…])),但实际上我得到了[([1,2],),([3,4],)] 有人

我有两个具有列表属性的类实例,例如:

foo.range = [1,2]
bar.range = [3,4]
我还有一个接受多个参数的函数:

def permutations(*args):
    return list(itertools.product(arg.range for arg in args))
我希望
permutations(foo,bar)
返回这两个(或更多)列表的所有排列(即
[(1,3)、(1,4)…])
),但实际上我得到了
[([1,2],),([3,4],)]

有人能帮我理解我哪里出了问题,以及如何实现我希望的结果吗?

希望iterables作为单独的参数(
itertools.product(*iterables[,repeat])
),因此您需要使用splat(
*
)操作符将项目解压到其中:

>>> def permutations(*args):
        return list(itertools.product(*(arg.range for arg in args)))

>>> permutations(foo, bar)
[(1, 3), (1, 4), (2, 3), (2, 4)]
考虑此简单函数,它将收集在args中传递给它的所有位置参数:

>>> def func(*args):
    print args
    print list(args[0])
...
当我们将生成器表达式传递给它时,它将作为
args
元组中的一个单独项进行收集:

>>> func(x for x in range(5))
(<generator object <genexpr> at 0x7fda2ab4e780>,)
[0, 1, 2, 3, 4]

太好了。谢谢你的决议和出色的解释。我非常接近,意识到我需要打开物品,但不知道把星号放在哪里。
>>> func(*(x for x in range(5)))
(0, 1, 2, 3, 4)
# Failed as expected for args[0]
Traceback (most recent call last):
  File "<ipython-input-215-13af4340dad1>", line 1, in <module>
    func(*(x for x in range(5)))
  File "<ipython-input-213-08941e2a3c06>", line 3, in func
    print list(args[0])
TypeError: 'int' object is not iterable