python - 将函数中定义的变量的值分配给单独函数中的变量

标签 python python-3.x scope

def initColors():
   BLACK = (0,0,0)  
   RED = (255,0,0)
   BLUE = (0,0,255)
   LIGHTGRAY = (128,128,128)
   DARKGRAY = (64,64,64)
   WHITE = (255,255,255)
initColors()
def initOtherVars():
   nhover = WHITE
   hover = RED
   mselected = BLACK
   selected = RED
initOtherVars()

我希望它将 nhover 的值设置为 WHITE 的值,但我收到此错误:

Traceback (most recent call last):
   File "C:\Users\jarr3\Desktop\Python\Battlr\battlrSelectionScreen1.py", line 30, in <module>
initOtherVars()
   File "C:\Users\jarr3\Desktop\Python\Battlr\battlrSelectionScreen1.py", line 27, in initOtherVars
      nhover = WHITE
NameError: name 'WHITE' is not defined

似乎无法将变量分配给函数中函数中定义的变量的值,即使在定义第二个函数之前调用第一个函数也是如此。为什么是这样?有没有不同的方法来完成我想做的事情。 (除了不使用函数之外,我还想继续使用函数。)谢谢。

最佳答案

Python 有作用域。变量仅在作用域内已知。您可以定义全局变量以强制它们在全局范围内可用,但这会使它变得困惑,并且这是不好的做法。

更多信息,请参阅Short Description of the Scoping Rules? .

您可以使自己的产品全局化:

def initColors():
    # declare them global
    global BLACK,RED,BLUE,LIGHTGRAY,DARKGRAY,WHITE
    BLACK = (0,0,0)  
    RED = (255,0,0)
    BLUE = (0,0,255)
    LIGHTGRAY = (128,128,128)
    DARKGRAY = (64,64,64)
    WHITE = (255,255,255)

initColors()

def initOtherVars():
    # need to be global as well, else invalid outside this scope 
    global nhover,hover,mselected,selected
    nhover = WHITE
    hover = RED
    mselected = BLACK
    selected = RED

initOtherVars()

按照这种方式,您首先必须将颜色放入全局空间,然后再放入其他变量。


您可以创建一个类,将颜色保存为类变量,这样就可以通过 Classname.Varname 访问它:

class MyColors:
   BLACK = (0,0,0)  
   RED = (255,0,0)
   BLUE = (0,0,255)
   LIGHTGRAY = (128,128,128)
   DARKGRAY = (64,64,64)
   WHITE = (255,255,255)

def initOtherVarsByClass():
    # these need still to be made global
    global Cnhover,Chover,Cmselected,Cselected
    Cnhover = MyColors.WHITE
    Chover = MyColors.RED
    Cmselected = MyColors.BLACK
    Cselected = MyColors.RED

initOtherVarsByClass()

但是您仍然需要将其他变量设为全局才能访问您在函数中定义的变量。我认为将一个类设置为“holder”并在其中创建您的 mselected 等以便通过该类进行访问会更容易。

class LinkColors():
    nhover = MyColors.WHITE
    hover = MyColors.RED
    mselected = MyColors.BLACK
    selected = MyColors.RED

您也可以创建仅返回颜色的函数:

def GetSelected(): 
    return MyColors.RED

您可以获得更多的类,而不是让全局空间变得困惑。

关于python - 将函数中定义的变量的值分配给单独函数中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581418/

相关文章:

python - 如何计算多变量 1 列的相关系数

python - asyncio yield from concurrent.futures.Future 执行者

python - -bash :/Library/Frameworks/Python.框架/版本/3.6/bin/pip:没有这样的文件或目录

c++ - 继承层次结构中的成员访问 - C++

python - 无法在 google colab 中安装 textract

python - 将用户输入限制为 64 位?

C++ 全局和局部变量

javascript - jQuery 范围(?)问题与最小案例演示

javascript - 传输大数据时 CEFPython 窗口关闭且无警告

python - Sqlite3 内存中多线程问题 - 阻塞的线程立即失败