在 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 子句。
我创建了一个函数 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 子句。