def myfunc(x):
my_list = []
list.append(x)
是有关键词来从被再分配停止一个变量(my_list)? 让我们假设NA是关键字:
def myfunc(x):
NA listv = []
list.append(x)
以这样的方式,该线将被读取,而不是重新分配但对于每个函数调用的变量仍然活跃追加新的价值观。我知道GLOBAL变量,但我只想知道是否存在关键字!
def myfunc(x):
my_list = []
list.append(x)
是有关键词来从被再分配停止一个变量(my_list)? 让我们假设NA是关键字:
def myfunc(x):
NA listv = []
list.append(x)
以这样的方式,该线将被读取,而不是重新分配但对于每个函数调用的变量仍然活跃追加新的价值观。我知道GLOBAL变量,但我只想知道是否存在关键字!
您可以在C/C++中全局声明该变量,并在Python中使用global关键字将它们作为全局数据部分中的变量引用。 一些关于他们引用:
我猜你正在寻找的东西等同于Java中的final
关键字。简而言之,没有这样的关键字。 Python的态度是“如果你不想修改它,只是不要修改它,我不会阻止你”。
然而,你可以通过你的课堂上的一些调整来模仿类似的东西。
class MyFinalVariablesClass:
def __setattr__(self, attr, value):
# if it already has this attribute, complain !
if hasattr(self, attr):
raise Exception("Attempting to alter read-only value")
self.__dict__[attr] = value
或者在您的变量的情况下(没有测试过)
class WriteOnceReadWhenever:
def __setattr__(self, attr, value):
if attr == 'my_list' and hasattr(self, attr):
raise Exception("Attempting to alter read-only value")
self.__dict__[attr] = value
我相信你正在寻找的行为几乎完全论点Python的可变默认工作:仅在实例化功能定义。
def myfunc(x,*args,my_list=[]):
my_list.append(x)
的*args
将保护名单由错误地传递第二个参数被覆盖。
没有关键字来做到这一点。有解决方法(如可变的默认参数),但有更好的方法来实现相同的事情。
的exaple您可以将变量设置为功能属性:
def my_func():
my_func.my_list.append(1)
my_func.my_list = []
然而,这是这样做的只是一个哈克的方式:
class MyFuncFactory:
def __init__(self):
self.my_list = []
def __call__(self):
self.my_list.append(1)
因此,你可能会更好写一个类的而不是这种情况下的功能。
有时你可以使用一个nonlocal
变量。例如定义key
功能,要求国家我平时写的东西,如:
def my_key_builder():
some_state = 0
def key_function(arg):
nonlocal some_state
some_state += 1
return some_state % 2
return key_function
for x in sorted(a_list, key=my_key_builder()):
print(x)
使用nonlocal
而不是global
(或可变默认参数)允许您使用功能键多次。但是,如果功能变得稍大,使用类可能是最好的选择。
如果你想追加*一个新值,追加它,并且如果你想要一个在函数调用中保持其值的变量,不要使它成为本地函数。 – user2357112
这里没有追加到列表 –
[在Python中使用“全局”关键字]的可能重复(https://stackoverflow.com/questions/4693120/use-of-global-keyword-in-python) –