如何确定变量是否在 Python 中声明?

发布于 2024-08-29 00:14:01 字数 780 浏览 5 评论 0原文

我想使用一个模块作为其他模块中引用的单例。它看起来像这样(这实际上不是我正在处理的代码,但我简化了它以扔掉所有不相关的东西):

main.py

import singleton
import printer

def main():
   singleton.Init(1,2)
   printer.Print()

if __name__ == '__main__':
   pass

singleton.py

variable1 = ''
variable2 = ''

def Init(var1, var2)
   variable1 = var1
   variable2 = var2

Printer.py

import singleton

def Print()
   print singleton.variable1
   print singleton.variable2

我期望得到输出 1/2,但得到空的空间。据我所知,在将 singleton 导入 print.py 模块后,变量再次初始化。

所以我认为我必须检查它们之前是否在 singleton.py 中初始化:

if not (variable1):
   variable1 = ''
if not (variable2)
   variable2 = ''

但我不知道该怎么做。或者有一种更好的方法在 python 中使用单例模块,但我不知道:)

I want to use a module as a singleton referenced in other modules. It looks something like this (that's not actually a code I'm working on, but I simplified it to throw away all unrelated stuff):

main.py

import singleton
import printer

def main():
   singleton.Init(1,2)
   printer.Print()

if __name__ == '__main__':
   pass

singleton.py

variable1 = ''
variable2 = ''

def Init(var1, var2)
   variable1 = var1
   variable2 = var2

printer.py

import singleton

def Print()
   print singleton.variable1
   print singleton.variable2

I expect to get output 1/2, but instead get empty space. I understand that after I imported singleton to the print.py module the variables got initialized again.

So I think that I must check if they were intialized before in singleton.py:

if not (variable1):
   variable1 = ''
if not (variable2)
   variable2 = ''

But I don't know how to do that. Or there is a better way to use singleton modules in python that I'm not aware of :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很酷不放纵 2024-09-05 00:14:01

Init 内部的赋值强制变量被视为局部变量。使用 global 关键字来修复此问题:

variable1 = ''
variable2 = ''

def Init(var1, var2)
   global variable1, variable2
   variable1 = var1
   variable2 = var2

The assignment inside Init is forcing the variables to be treated as locals. Use the global keyword to fix this:

variable1 = ''
variable2 = ''

def Init(var1, var2)
   global variable1, variable2
   variable1 = var1
   variable2 = var2
场罚期间 2024-09-05 00:14:01

您可以使用字典vars全局

vars().has_key('variable1')

globals().has_key('variable1')

编辑:

另外...

'variable1' in vars()

例如

if not 'variable1' in vars():
  variable1 = ''

You can use de dictionaries vars and globals:

vars().has_key('variable1')

or

globals().has_key('variable1')

Edit:

Also...

'variable1' in vars()

e.g.

if not 'variable1' in vars():
  variable1 = ''
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文