Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
Run Code Online (Sandbox Code Playgroud)
有什么我可以通过实际参考传递变量吗?
我希望能够将变量的名称作为字符串获取,但我不知道Python是否具有那么多的内省功能.就像是:
>>> print(my_var.__name__)
'my_var'
Run Code Online (Sandbox Code Playgroud)
我想这样做因为我有一堆vars我想变成一本字典,如:
bar = True
foo = False
>>> my_dict = dict(bar=bar, foo=foo)
>>> print my_dict
{'foo': False, 'bar': True}
Run Code Online (Sandbox Code Playgroud)
但我想要比这更自动的东西.
Python中有locals()和vars(),所以我想有一种方法.
我正在研究项目euler问题14,作为第一次尝试,我掀起了这个强力解决方案:
def collatz(n, memo={1: [1]}):
if n not in memo:
memo[n] = [n] + collatz(3 * n + 1 if n % 2 else n // 2)
return memo[n]
def p014():
return max(xrange(1, 10**6), key=lambda n: len(collatz(n)))
Run Code Online (Sandbox Code Playgroud)
我的问题是关于lambda,我通常不愿意使用它们,但在这种情况下我不知道有什么优雅的方法可以避免它.functools链接两个callables 有什么内容或其他东西,或者我缺少任何其他简洁的替代品?