另外,在网上可以找到许多创建静态变量的解决方案。(尽管我还没有看到我喜欢的一个。)
为什么Python不支持方法中的静态变量?这被认为是非Python的,还是与Python的语法有关?
编辑:
我专门询问了 为什么 进行设计决策,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量。
忽略这一点的想法是,静态变量仅在以下两种情况下才有用:何时真正应该使用类以及何时真正应该使用生成器。
如果要将状态信息附加到函数,则需要一个类。也许是一个简单的类,但是仍然是一个类:
def foo(bar):
static my_bar # doesn't work
if not my_bar:
my_bar = bar
do_stuff(my_bar)
foo(bar)
foo()
# -- becomes ->
class Foo(object):
def __init__(self, bar):
self.bar = bar
def __call__(self):
do_stuff(self.bar)
foo = Foo(bar)
foo()
foo()
如果您希望函数的行为在每次调用时都发生变化,则需要一个生成器:
def foo(bar):
static my_bar # doesn't work
if not my_bar:
my_bar = bar
my_bar = my_bar * 3 % 5
return my_bar
foo(bar)
foo()
# -- becomes ->
def foogen(bar):
my_bar = bar
while True:
my_bar = my_bar * 3 % 5
yield my_bar
foo = foogen(bar)
foo.next()
foo.next()
当然,静态变量 是
快速和肮脏的脚本,让你不想处理大结构的小任务的麻烦有用。但是在那儿,您实际上只需要什么global
就可以了,这看起来似乎有点笨拙,但是对于小的一次性html" target="_blank">脚本来说,这是可以的:
def foo():
global bar
do_stuff(bar)
foo()
foo()
问题内容: 在C / C ++中,我们使用静态局部变量来维护方法的状态。但是,为什么Java不支持它呢? 是的,我可以为此使用一个静态字段。但是创建一个仅维护一个方法状态的字段有点奇怪吗? 问题答案: 您已经找到了唯一的解决方案。 Java放弃了C ++的许多复杂性,这就是其中之一。 作用于函数的静态变量并发地对您造成麻烦(例如,正是由于这个原因,strtok是与pthread一起使用的著名的讨厌
我的类中有一个静态变量,我在cpp文件中将其实例化为值1000。 cpp文件的代码。 当我打印容器对象的ID值时,它们不断递增。 我的问题是,当我创建一个新对象时,我将静态变量实例化为值0f1000,那么为什么它会随着创建的每个对象不断递增呢?
默认添加的栏目为静态浏览,是不生成静态的需要在栏目中配置是否生成静态
问题内容: java为什么不能从静态环境引用非静态变量? 问题答案: 你必须了解一个类与该类实例之间的区别。如果你在街上看到汽车,即使你看不到哪种型号或类型,也将立即知道它是汽车。这是因为你将看到的与“汽车” 类进行了比较。该类包含与所有汽车相似的类。可以将其视为模板或想法。 同时,你看到的汽车是“汽车”类的一个实例,因为它具有你期望的所有属性:有人驾驶它,它有引擎,车轮。 因此,该班级说“所有汽
问题内容: 我在这里阅读Threadlocal的JavaDoc https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ThreadLocal.html 它说:“ ThreadLocal实例通常是希望将状态与线程关联的类中的私有静态字段(例如,用户ID或事务ID)。” 但是我的问题是,为什么他们选择使其静态化(通常)-使其具有“每个线程”状态
问题内容: 我是一位Java程序员,对公司领域来说是新手。最近,我已经使用Groovy和Java 开发了一个应用程序。我编写的所有代码都使用了大量的静态变量。高级技术人员要求我减少使用的静电数量。我已经在谷歌上搜索了相同的内容,并且发现许多程序员都反对使用静态变量。 我发现静态变量更易于使用。而且我认为它们也是有效的(如果我错了,请纠正我),因为如果我必须对一个类中的一个函数进行10,000次调用