在下面的方法定义,什么是*和**为做param2?
def foo(param1, *param2):
def bar(param1, **param2):
Run Code Online (Sandbox Code Playgroud) python syntax parameter-passing variadic-functions argument-unpacking
我有一个Python脚本,它将整数列表作为输入,我需要一次使用四个整数.不幸的是,我无法控制输入,或者我将它作为四元素元组列表传入.目前,我正在以这种方式迭代它:
for i in xrange(0, len(ints), 4):
# dummy op for example code
foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]
Run Code Online (Sandbox Code Playgroud)
它看起来很像"C-think",这让我怀疑有更多的pythonic方式来处理这种情况.迭代后会丢弃该列表,因此无需保留.也许这样的事情会更好吗?
while ints:
foo += ints[0] * ints[1] + ints[2] * ints[3]
ints[0:4] = []
Run Code Online (Sandbox Code Playgroud)
但是,仍然没有"感觉"正确.: - /
所以我有一个生成器函数,看起来像这样.
def generator():
while True:
for x in range(3):
for j in range(5):
yield x
Run Code Online (Sandbox Code Playgroud)
在我加载此函数并多次调用"next"之后,我希望它能够产生值
0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 0 0 0 0 0 ...
但它只是一直产生0.这是为什么?
>>> execfile("test.py")
>>> generator
<function generator at 0x10b6121b8>
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
>>> generator().next()
0
Run Code Online (Sandbox Code Playgroud) 假设我有一个实现__iter__()函数的类,首选使用iter(obj)还是obj.__iter__()直接调用?除了使用magic函数少输入5个字符之外,还有什么真正的区别?
相比之下:对于next()和__next__()我可以看到在magic函数中具有默认值的优点。