当前位置: 首页 > 面试题库 >

如何在Python模块中定义__name__变量?

刘嘉木
2023-03-14
问题内容

我知道标准示例:如果直接执行模块,则其__name__全局变量定义为"__main__"。但是,在文档的任何地方都找不到关于__name__一般情况下如何定义的精确描述。该模块的文件说…

在模块内,模块名称(作为字符串)可用作全局变量的值__name__

…但是“模块名称”是什么意思?它仅仅是模块的名称(已.py删除的文件名),还是包括标准的软件包名称?

如何__name__确定Python模块中变量的值?为了获得加分,请准确指出此操作在Python源代码中的何处执行。


问题答案:

它设置为导入模块的绝对名称。如果将其导入为foo.bar,则__name__设置为'foo.bar'

名称是在import.c模块中确定的,但是由于该模块处理各种不同类型的导入(包括zip导入,仅字节码的导入和扩展模块),因此有
多个 代码路径可用于查找。

通常,import语句会转换为对的调用__import__,默认情况下会实现为对的调用PyImport_ImportModuleLevelObject。请参阅__import__()文档以了解参数的含义。在PyImport_ImportModuleLevelObject相对名称中已解析,因此您可以根据需要name跟踪那里的变量。

该模块的其余部分通过PyImport_AddModuleObject创建实际的名称空间对象和设置name键来处理实际的导入,但是您可以将该name值追溯到PyImport_ImportModuleLevelObject。通过创建模块对象,可以__name__moduleobject.c对象构造函数中设置其值。



 类似资料:
  • 每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。 使用模块的__name__ 例8.2 使用模块的__name__ #!/usr/bin/python

  • 我想在任何目录的任何脚本中导入自定义编写的函数,就像在任何脚本中导入请求模块一样。我正在运行Ubuntu和Python 3.9 编辑:我按照本教程完成了我的要求-https://packaging.python.org/tutorials/packaging-projects/

  • 主要内容:自定义模块编写说明文档到目前为止,读者已经掌握了导入 Python 标准库并使用其成员(主要是函数)的方法,接下来要解决的问题是,怎样自定义一个模块呢? 前面章节中讲过,Python 模块就是 Python 程序,换句话说,只要是 Python 程序,都可以作为模块导入。例如,下面定义了一个简单的模块(编写在 demo.py 文件中): 可以看到,我们在 demo.py 文件中放置了变量(name 和 add)、函数(

  • 本文向大家介绍python中如何打包用户自定义模块,包括了python中如何打包用户自定义模块的使用技巧和注意事项,需要的朋友参考一下 假设需要打包的模块文件名为my.py,打包模块需要新建的一个脚本setip.py,然后在脚本下输入如下的内容: 以管理员身份运行cmd,进入my.py的目录,执行下面的命令即可打包: 运行后在该目录下方出现一个文件夹dist,进入这个文件夹,会出现一个my-1.0

  • 问题内容: 假设我具有以下文件结构: data.py core.py 我需要获取data.py文件中定义的所有变量。我该如何实现?我可以使用,但是它返回模块的所有属性,包括等等。 问题答案: 通常是这样做的秘诀,但这引出了问题。

  • 问题内容: 有没有办法在模块内部设置全局变量?当我尝试以最明显的方式进行操作(如下所示)时,Python解释器说该变量不存在。 并将模块导入其他文件后 追溯是: … UnboundLocalError:赋值之前引用了本地变量’ DBNAME ‘ 问题答案: 这是怎么回事。 首先,Python真正唯一的全局变量是模块范围的变量。您不能创建真正全局变量。您所要做的就是在特定范围内创建变量。(如果您在P