【发布时间】:2014-03-04 01:36:51
【问题描述】:
[灵感来自this question]
假设我有两个列表:
list1 = ['tom', 'mary', 'frank', 'joe', 'john', 'barry']
list2 = [1, 2, 3, 4]
我想将list1 中的每个名称与list2 中的数字相匹配。由于list2 中有四个数字,我想将前四个名称中的每一个与list2 中的相应数字配对,并将随机数字分配给list1 中的其余名称。
我知道我可以使用带有enumerate 和random.choice 的for 循环来解决这个问题。事实上,我已经为原始问题提供了such a solution。
但是,我想知道是否可以执行以下操作:
for name, number in itertools.izip_longest(list1, list2, fillvalue=MAGIC):
print name, number
最初,我想使用这样的东西:
MAGIC = random.choice(list1)
但是,它首先执行random.choice(list1),然后将答案用作fillvalue 进行压缩操作。这是没有吸引力的,因为它不会为它压缩的每对值选择一个新的随机值。因此很明显,itertools.izip_longest 需要它的fillvalue,它本身就有一个值,它不会调用它。事实上,如果我要为它提供一个函数,它将产生一个由名称和一个可调用函数组成的对,这也是不受欢迎的。因此,lambda 函数不是可行的解决方案。
我将如何创建一个在调用某个函数时调用它的变量? itertools.izip_longest 如何使用 fillvalue 变量?是否调用了该变量的__repr__?如果是这样,我可以使用 __repr__ 创建一个在其中调用函数的类吗?
【问题讨论】:
-
“我将如何创建一个在调用某个函数时调用它的变量?” - 你不会。你会调用一个函数。
-
你可以使用属性获得你想要的对象属性,而在 Python 3 中,你可以使用讨厌的元类魔法在类范围内获得你想要的东西,但是对于常规变量,你不能去做吧。
-
@user2357112:是的,但是当“调用”
. Thus, if__repr__` 是调用一些外部函数时,很多类的实例都会显示它们的__repr__值,然后突然之间,你有一个变量,其中包含一个实例,其值由函数确定。否则,我确实熟悉变量和函数之间的区别。 -
izip_longest不调用repr。它只是直接吐出对象。 -
@inspectorG4dget:您真的不希望
__repr__在每次调用时都返回不同的值。此外,即使这样做了,izip_longets 方法仍然不起作用,因为填充值是在调用函数时确定的,而不是每次填充时确定的。
标签: python function variables representation