首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python库基础

Python库基础
EN

Stack Overflow用户
提问于 2020-05-18 21:50:43
回答 1查看 54关注 0票数 0

我不知道如何在这个问题上寻求帮助,尽管我确信它已经被问过一百次了。

这是我第一次尝试使用python程序。它由两个文件组成,pythontest.pymain.py

pythontest.py

代码语言:javascript
运行
复制
myvar = ""

def setname(name):
    myvar = name

def printname():
  print(myvar)

main.py

代码语言:javascript
运行
复制
import pythontest

pythontest.setname("Bob")

pythontest.printname()

当我在终端中运行main.py时,没有打印输出,但也没有错误。我不知道为什么。我也不知道为什么要把pythontest.放在函数前面,因为我没有让它们是私有的,也不是一个对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 22:29:56

简而言之,如果您希望修改全局变量,Python希望在函数中使用global关键字。因此,您需要执行如下操作:

代码语言:javascript
运行
复制
def setname(name):
    global myvar
    myvar = name

因为您没有这样做,所以当Python解释器进入setname时,它在计算表达式myvar = name时创建了一个新的myvar变量,这个变量是函数的本地变量。该函数一返回,本地myvar就被有效地删除了。全球myvar没有受到任何影响。

现在,Python允许在不使用global关键字的情况下读取全局变量。您的printname函数实际上正在打印某些内容,它恰好是一个空字符串,因为这是您分配给全局myvar变量的内容,并且setname没有更新它。

这里有一个指向Python常见问题的链接,它更详细地解释了这一点:

https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python

编辑(解决第二个问题):

我强烈建议阅读Python关于模块的文档。简单简单的答案是有两个原因:

  1. 导入模块时,Python实例化模块对象,将模块的内容加载到模块中,然后提供一个变量来访问该对象。变量在本地范围内被导入到它的文件中。该变量的名称是您导入的模块的名称,除非您更改它。导入模块中的函数是该模块对象的方法;因此,为什么需要使用pythontest来调用这些函数。这引出了第二点。
  2. 如果不想导入整个模块,则必须使用选项。首先,您可以从模块中导入特定的项。例如,如果您只想导入函数,可以使用以下语法:
代码语言:javascript
运行
复制
from pythontest import setname, printname
setname("Bob")
printname()

在这个示例中,Python将不再创建模块对象,而是为每个函数创建一个函数对象,并将该对象分配给一个变量,该变量具有导入函数的名称(例如,变量setname引用pythontest中的setname函数)。以这种方式导入函数对象时,不需要提供pythontest前缀。

其次,您可以在导入模块(或函数)时为它们提供一个不同的名称,然后在整个Python文件中使用这个新名称。下面是一个示例:

代码语言:javascript
运行
复制
import pythontest as pt
pt.setname("Bob")
pt.printname()

您甚至可以通过导入的单个函数/变量来完成此操作:

代码语言:javascript
运行
复制
from pythontest import setname as really_cool_setname, printname as showname

really_cool_setname("Bob")
showname()

附带说明:

记住,所有东西都是Python中的一个对象,甚至是导入模块、函数和变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61879584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档