Python 3.x python3:Python中有一种静态变量吗?

Python 3.x python3:Python中有一种静态变量吗?,python-3.x,static,global-variables,Python 3.x,Static,Global Variables,我是python的新手 python中是否有类似的静态关键字?我需要实现一个简单的函数,从池中分配一个整数ID,实际上它只是增加一个全局变量并返回它: id = -1 def generate_id(): global id id += 1 return id 这样做对吗?在C中,我可以在函数中声明一个static变量 与java不同,python中没有“static”关键字 用于功能 可以向函数添加属性,并将其用作静态变量 def incrfunc(): inc

我是python的新手

python中是否有类似的
静态
关键字?我需要实现一个简单的函数,从池中分配一个整数ID,实际上它只是增加一个全局变量并返回它:

id = -1

def generate_id():
    global id
    id += 1
    return id

这样做对吗?在
C
中,我可以在函数中声明一个
static
变量

与java不同,python中没有“static”关键字

用于功能

可以向函数添加属性,并将其用作静态变量

def incrfunc():
  incrfunc.tab += 1
  print incrfunc.tab

# initialize
incrfunc.tab = 0
上课时

但是,如果您使用python中的类,下面是语言约定

在类声明中赋值的所有变量都是 类变量。和在类内赋值的变量 方法是实例变量


注意:如果你问我,我的观点是,利用类并在类内部和外部使用它们总是好的。

在python中,没有像java那样的“静态”关键字

用于功能

可以向函数添加属性,并将其用作静态变量

def incrfunc():
  incrfunc.tab += 1
  print incrfunc.tab

# initialize
incrfunc.tab = 0
上课时

但是,如果您使用python中的类,下面是语言约定

在类声明中赋值的所有变量都是 类变量。和在类内赋值的变量 方法是实例变量


注意:如果你问我,我认为,使用类并在类内部和外部使用它们总是好的。

简单的方法是返回一个“生成器”函数,在局部上形成闭包,然后只操作局部:

def new_id_generator():
    id = 0

    def gen():
        nonlocal id
        id += 1
        return id

    return gen

g = new_id_generator()

print(g(), g()) # 1 2

简单的方法是返回一个“生成器”函数,该函数在局部上形成闭包,然后只操作局部:

def new_id_generator():
    id = 0

    def gen():
        nonlocal id
        id += 1
        return id

    return gen

g = new_id_generator()

print(g(), g()) # 1 2

这回答了你的问题吗@Fuppes先生,谢谢,我会读那个帖子。这回答了你的问题吗@Fuppes先生,谢谢,我会读那个帖子的。谢谢你的反馈。在new_id_generator()函数中——是否保证
id
变量仅在
new_id_generator()内部可见?因此,换句话说,脚本中的任何其他代码都无法触及/更改
id
?@标记通过检查允许更改的堆栈帧,可能会出现一些奇怪的攻击,但这比将其作为函数或您自己的类的属性要困难得多。Python没有严格的“私有”控件,因此您实际上只能阻止某些行为,而不能完全阻止它。我想这是你能得到的最“私人”的。谢谢你的反馈。在new_id_generator()函数中——是否保证
id
变量仅在
new_id_generator()内部可见?因此,换句话说,脚本中的任何其他代码都无法触及/更改
id
?@标记通过检查允许更改的堆栈帧,可能会出现一些奇怪的攻击,但这比将其作为函数或您自己的类的属性要困难得多。Python没有严格的“私有”控件,因此您实际上只能阻止某些行为,而不能完全阻止它。我想这是你能得到的最“私人”的。