假设:
def myfunc(x):
my_list = []
list.append(x)
是否有一个关键字来阻止变量(my_list)被重新分配? 我们假设NA是关键字:
def myfunc(x):
NA listv = []
list.append(x)
以这种方式读取行并且不重新分配,但变量仍然有效,为每个函数调用附加新值。我知道GLOBAL变量,但我只想知道关键字是否存在!
答案 0 :(得分:0)
您可以像在C / C ++中一样全局声明变量,并在python中使用global关键字将它们作为全局数据部分中的变量引用。 关于它们的一些参考文献:
答案 1 :(得分:0)
我猜你正在寻找与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
答案 2 :(得分:0)
我相信你所寻求的行为几乎就是python中默认参数的可变性:仅在函数定义期间实例化。
def myfunc(x,*args,my_list=[]):
my_list.append(x)
*args
将保护列表不会被错误传递的第二个参数覆盖。
答案 3 :(得分:0)
没有关键字可以执行此操作。有一些解决方法(例如可变的默认参数),但有更好的方法来实现同样的事情。
对于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
(或可变的默认参数)允许您多次使用键功能。但是,如果使用类函数变得稍大,则可能是最佳选择。