在 python 中复制一个函数

Copy a function in python

我创建了一个函数 collatz 运行 正确。然后根据我设置为512个数字长的数字列表,应该运行通过函数多次添加迭代次数以循环得到:

for number in numbers: 
     collatz(number)

这按预期工作,只是它抢占了函数内的迭代。这给我留下了所有读数为 0 的迭代列表,尽管数字列表已正确填充。作为参考,我要复制的功能是:

def collatz(n):
    iterations = []
    iterations.append(n)
    if n == 1 or n < 1:
        iterate_num = len(iterations) - 1
        all_iterations.append(iterate_num)
    elif n % 2 == 0:
        even = n / 2
        collatz(even)
    elif n % 2 != 0:
        odd = (3 * n) + 1
        collatz(odd)
    else:
        pass

是否可以通过每个函数分别复制该函数的次数等于数字列表的长度到运行?

您应该 return iterations 并使用递归调用的结果扩展它:

def collatz(n):
    # Stuff
    elif n % 2 == 0:
        even = n / 2
        iterations.extend(collatz(even))
    else:
        odd = (3 * n) + 1
        iterations.extend(collatz(odd))
    return iterations

另一个解决方案是通过引用传递迭代:

def collatz(n, iterations = None):
    if iterations is None:
        iterations = []
    # Stuff
    elif n % 2 == 0:
        even = n / 2
        collatz(even, iterations)
    else:
        odd = (3 * n) + 1
        collatz(odd, iterations)

另外,这个构造是不必要的:

elif n % 2 == 0:
    # stuff
elif n % 2 != 0:
    # stuff
else:
    pass

首先,else: 而不是 pass 本身是不必要的。此外,此处 n % 2 只能为零或不为零,因此永远不会到达 else 子句。