操纵和导入多个文件的全局变量



我正在尝试在python中创建一个程序,并在称为" functions.py"的文件中声明了所有函数。在" main.py"文件中,我使用

from functions import setup

调用"设置"函数。但是,每当我运行文件时,我都会出现"名称"的错误。我不确定错误是什么。我已经阅读了一些有关跨文件使用全局变量的阅读,这就是我想出的" functions.name"的方式,这也不起作用。我并不是真的在寻找解决方案本身,而是真的想知道跨文件的导入和操纵变量的最佳方法是什么,因为我所附的代码只是真实设置功能的一小部分和主代码。

function.py

def setup():
#Sets up the player's stats.
    global name
    name = input("What is your name? ").capitalize()

main.py

setup()    
print ("Welcome " + functions.name + ".")

解决方案本se 是更改您的导入方式:

import functions
functions.setup()
print(Welcome " + functions.name + ".")

但是,我担心如果您采用这种方法,那么您的多文件程序将与单文件程序一样令人困惑。

更广泛的解决方案是在可能的情况下避免全局变量。也许设置可以返回其创建的任何内容,然后其呼叫者可以决定该怎么做:

def setup():
    return input("What is your name? ").capitalize()

name = functions.setup()
print("Welcome " + name + ".")

或,如果setup()除了发现玩家的名字外,还有更多的工作要做,请尝试以下操作:

# functions.py
class Player:
    # Fill this in later as you refine your design
    pass
def setup():
    player = Player()
    player.name = input("What is your name? ").capitalize()
    # player.score = ...
    # player.charm = ...
    # etc
    return player

import functions
player = functions.setup()
print("Welcome " + player.name + ".")

在多个脚本上共享变量的一种方法是将它们保留在一个单独的脚本中,除了保留这些变量之外,该脚本无助。您可以通过引用myscript.myvar参考每个变量。它类似于对类变量(Myclass.classvar/self.classvar)或导入功能(例如NP.Array)的引用。

一个例子:

params.py

# Variable declarations with some default value.
name = ''
somevar = 0
somevar2 = None

functions.py

import params
def setup():
#Sets up the player's stats.
    params.name = input("What is your name? ").capitalize()

main.py

import params
from functions import setup
setup()    
print ("Welcome " + params.name + ".")

你叫什么名字?大体

欢迎大量。

您几乎完成了此操作,但缺少"未包装"变量声明。如果您在函数中声明名称,但是在任何def之外并完整导入脚本,但我认为"推荐"方法是使用单独的脚本。上述方法的区别在于,参数使对这些变量的参考保持活力。在您的函数中,当功能返回时,name会丢失,因为不再参考它。

如果要拥有一个软件包级变量,则必须在软件包级别创建它:

name = ""
def setup():
#Sets up the player's stats.
    global name
    name = input("What is your name? ").capitalize()

现在您可以访问变量:

>>> from functions import setup
>>> setup()
What is your name? Ivan
>>> functions.name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'functions' is not defined
>>> import functions
>>> functions.name
'Ivan'
>>> 

相关内容

  • 没有找到相关文章

最新更新