我不知道如何在这个问题上寻求帮助,尽管我确信它已经被问过一百次了。
这是我第一次尝试使用python程序。它由两个文件组成,pythontest.py和main.py。
pythontest.py
myvar = ""
def setname(name):
myvar = name
def printname():
print(myvar)main.py
import pythontest
pythontest.setname("Bob")
pythontest.printname()当我在终端中运行main.py时,没有打印输出,但也没有错误。我不知道为什么。我也不知道为什么要把pythontest.放在函数前面,因为我没有让它们是私有的,也不是一个对象。
发布于 2020-05-18 22:29:56
简而言之,如果您希望修改全局变量,Python希望在函数中使用global关键字。因此,您需要执行如下操作:
def setname(name):
global myvar
myvar = name因为您没有这样做,所以当Python解释器进入setname时,它在计算表达式myvar = name时创建了一个新的myvar变量,这个变量是函数的本地变量。该函数一返回,本地myvar就被有效地删除了。全球myvar没有受到任何影响。
现在,Python允许在不使用global关键字的情况下读取全局变量。您的printname函数实际上正在打印某些内容,它恰好是一个空字符串,因为这是您分配给全局myvar变量的内容,并且setname没有更新它。
这里有一个指向Python常见问题的链接,它更详细地解释了这一点:
编辑(解决第二个问题):
我强烈建议阅读Python关于模块的文档。简单简单的答案是有两个原因:
pythontest来调用这些函数。这引出了第二点。from pythontest import setname, printname
setname("Bob")
printname()在这个示例中,Python将不再创建模块对象,而是为每个函数创建一个函数对象,并将该对象分配给一个变量,该变量具有导入函数的名称(例如,变量setname引用pythontest中的setname函数)。以这种方式导入函数对象时,不需要提供pythontest前缀。
其次,您可以在导入模块(或函数)时为它们提供一个不同的名称,然后在整个Python文件中使用这个新名称。下面是一个示例:
import pythontest as pt
pt.setname("Bob")
pt.printname()您甚至可以通过导入的单个函数/变量来完成此操作:
from pythontest import setname as really_cool_setname, printname as showname
really_cool_setname("Bob")
showname()附带说明:
记住,所有东西都是Python中的一个对象,甚至是导入模块、函数和变量。
https://stackoverflow.com/questions/61879584
复制相似问题