1
A
回答
2
使用Python 3.x的你可以用nonlocal
关键字
def make_slow(action):
slowDuration = None
def slowAction(self, colony):
nonlocal slowDuration
slowDuration = 10 # It is changing the variable from the scope above
声明,如果你想从别的地方改变一个值,你不能返回值,尝试将global
...注意这可能会污染你当前的命名空间。
对于更pythonic的方法,你应该使用类似self.slowDuration
。这就是对象的用途。
1
slowDuration
是slowAction
函数的局部变量。局部变量的要点是它们只能在函数内部访问。
您应该更改slowAction
函数,以便它使用另一个位置定义的slowDuration
变量,例如作为make_slow
显然属于的类的成员变量。
您还可以使slowAction
成为覆盖__call__
方法的类的实例。
>>> class Counter:
... def __init__(self):
... self.count = 0
... def __call__(self, delta):
... self.count += delta
... print(self.count)
... def set_count(self, c):
... self.count = c
...
>>> c = Counter()
>>> c(1)
1
>>> c(3)
4
>>> c(3)
7
>>> c(3)
10
>>> c.set_count(42)
>>> c(-2)
40
你也可以使用一些诡计使函数对象本身上可用的共享变量:
def makeCounter():
counter = None
def counter_func():
counter.count += 1
print(counter.count)
counter = counter_func
counter.count = 0
return counter
,并使用它像这样:
>>> c = makeCounter()
>>> c()
1
>>> c()
2
>>> c()
3
>>> c()
4
>>> c.count = 42
>>> c()
43
>>> c()
44
>>> c()
45
但总的来说,“聪明“的代码应该避免,除非你有很好的理由使用它,因为它使得代码库变得更难理解。
相关问题
- 1. 是否有可能将数组声明为实例变量?
- 2. 为所有实例变量设置Attr_accessor
- 3. 是否有可能使Python函数的行为像实例一样?
- 4. 是否有可能专门为变量设置内存限制?
- 5. 是否有可能在不超载的情况下为每个函数设置可变数量的参数?
- 6. 函数的所有实例是否可以访问相同的私有变量?
- 7. 是否有可能在php中实例化一个函数?
- 8. 是否可以为每个实例设置不同的静态变量值?
- 9. 是否有可能在python中使用变量作为代码
- 10. 实例变量未设置在类的一个函数中
- 11. 是否有可能在构造函数中声明变量[Java]
- 12. 如何在python中将实例变量设置为fileHandle?
- 13. Python - 是否可以为操作员设置变量?
- 14. copyWithZone设置实例变量?
- 15. 是否有可能在python中调用带有可变函数的模块?
- 16. GraphQL - 是否有可能设置一个变量结果为突变
- 17. 是否有可能从Java的超类中调用子类的实例变量?
- 18. 带有实例变量的javascript函数
- 19. 是否有可能将变量传递给jQuery的css函数?
- 20. Ruby/IRB:将实例变量设置为私有还是不可见?
- 21. 是否有可能在Python中使用实例方法
- 22. 为什么不能将变量设置为等于Python中的函数调用?
- 23. 设置JavaScript函数里面的ruby实例变量
- 24. 是否有可能改变PHP的print_r函数的行为
- 25. 重新分配实例变量,是否更好先设置nil
- 26. 是否有可能将Rails变量传递给JavaScript函数?
- 27. 是否有可能在变量上调用jquery函数?
- 28. 是否有可能将setInterval设置为全局变量,以便通过单独的函数访问它?
- 29. 在Action Mailer中设置实例变量?
- 30. 在Ruby中设置实例变量
从'slowAction'或'make_slow'外面? – cdonts
对不起,如果我不清楚。我想调整一个完全独立于我称之为函数的函数的值。 – swagbag
恐怕这是不可能的。为什么你不能使用参数? – cdonts