具有模块导入的命名空间

2023-11-29

我正在学习Python,尽管我已经学习了大约一年,但我仍然是一个初学者。我正在尝试编写一个在主模块中调用的函数模块。被调用模块中的每个函数都需要数学模块才能运行。我想知道是否有一种方法可以在不将数学模块导入被调用模块内的情况下执行此操作。这是我所拥有的:

main.py:

from math import *
import module1

def wow():

    print pi


wow()
module1.cool()

module1.py:

def cool():

    print pi

跑步时main.py I get:

3.14159265359

Traceback (most recent call last):
  File "Z:\Python\main.py", line 10, in <module>
    module1.cool()
  File "Z:\Python\module1.py", line 3, in cool
    print pi
NameError: global name 'pi' is not defined

我很难理解为什么运行时出现名称错误main.py。我知道变量pi导入后成为主模块的全局变量,因为wow可以访问它。我也知道cool导入后成为主模块的全局变量,因为我可以打印module1.cool并得到<function cool at 0x02B11AF0>。所以自从cool位于主模块的全局命名空间内,程序不应该首先查看函数内部cool对于变量pi,然后当它在那里找不到它时,看看里面main变量模块pi and find it there?

据我所知,解决这个问题的唯一方法是将数学模块导入其中module1.py。但我不喜欢这个想法,因为它使事情变得更加复杂,而且我喜欢漂亮、简单的代码。我觉得我已经接近掌握命名空间了,但在这方面需要帮助。谢谢。


正如回溯所示,问题不在于main.py, 但在module1.py:

Traceback (most recent call last):
  File "Z:\Python\main.py", line 10, in <module>
    module1.cool()
  File "Z:\Python\module1.py", line 3, in cool
    print pi
NameError: global name 'pi' is not defined

换句话说,in module1,没有全局名称pi,因为你还没有在那里导入它。当你这样做时from math import * in main.py,这只是从导入所有内容math模块的命名空间放入main模块的命名空间,而不是进入every模块的命名空间。

我认为您在这里缺少的关键是每个模块都有自己的“全局”名称空间。一开始这可能会有点令人困惑,因为在像 C 这样的语言中,有一个由所有语言共享的全局命名空间extern变量和函数。但一旦你克服了这个假设,Python 的方式就完全有意义了。

所以,如果你想使用pi from module1,你必须做from math import * in module1.py。 (或者你可以找到其他方法来注入它 - 例如,module1.py可以做from main import *, or main.py可以做module1.pi = pi等等,或者你可以临时抱佛脚pi进入魔法builtins/__builtin__模块,或使用各种其他技巧。但显而易见的解决方案是import您想要将其导入到的位置。)


顺便说一句,你通常不想这样做from foo import *除了交互式解释器或偶尔的顶级脚本之外的任何地方。也有例外(例如,一些模块明确设计为以这种方式使用),但经验法则是import foo或使用有限的from foo import bar, baz.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有模块导入的命名空间 的相关文章

随机推荐

  • iphone 粘性菜单 jquery onscroll ios 9

    在更新到之前 这段代码在我的 iPhone 上运行良好iOS 9 0 1 13A404 但现在相同的代码似乎只有在手指松开后才能工作 或者在 jQuery 之后onscroll结束 当我快速滑动以使页面滚动时 document on scr
  • odbc_prepare 给出致命错误:允许的内存大小已耗尽

    我有一个 Debian 服务器 64 位 我想通过 PHP 将其连接到 AS400 的数据库 我已经安装了 IBM i Access for Linux 和 unixodbc 我已经遵循了这个教程 https www albertopica
  • 如何在插入语句的目标数据库名称中使用变量?

    我想声明一个服务器名称并在插入语句中使用该名称 到目前为止我收到的只是一条错误消息 declare machine nvarchar 6 declare bar nvarchar 3 set machine Name00 set bar f
  • 如何使用export_savedmodel保存和恢复tf.estimator.Estimator模型?

    我最近开始使用 Tensorflow 并尝试习惯 tf estimator Estimator 对象 我想做一些非常自然的先验事情 在训练了我的分类器之后 即 tf estimator Estimator 的实例 带有train方法 我想将
  • Pygame绘制抗锯齿填充多边形

    The documentation says For aapolygon use aalines with the closed parameter but pygame draw aalines doesn t let me specif
  • 如果主题带有星号,Outlook 电子邮件存档宏将不起作用

    我正在使用以下代码将我的电子邮件存档到目前完美运行的指定文件夹 除非电子邮件主题包含 然后这会给出调试消息 运行时错误 2147286788 800300fc 我可以在下面的代码中添加任何内容 使其忽略或将 替换为其他内容 以允许它自动存档
  • 火车站所需站台最少数量

    问题如下 给定到达火车站的所有火车的到达和出发时间 任务是找到火车站所需的最少站台数量 以便没有火车等待 火车可以在午夜之前到达 也可以在午夜之后到达 我理解传统问题是如何在没有火车可以在午夜之前到达并在午夜之后离开的条件下工作的 因为我见
  • iPhone 的 UIImageView isAnimating 返回错误

    我发现 isAnimating 即使在完成最大循环数并停止动画之后也会返回 true 然而 一旦你移动 UIImageView 它会突然更新并变为 false 以下是我的代码的重要部分 我以标准方式设置动画 UIImageView newI
  • ksoap2 org.xmlpull.v1.xmlpullparserexception 预期的 start_tag 错误

    下面是我编写的代码 用于验证用户登录凭据 使用 net编写的Web服务 private static final String SOAP ACTION http tempuri org getCredentials private stat
  • 查看 NSUserDefaults 文件内容

    有什么办法可以看到 NSUserDefaults 的内容吗 我可以从终端使用 pico 打开 plist 文件 但它显示奇怪的字符 我实际上看不到内容文件内容 有什么办法可以在 Xcode 中打开该文件吗 基本上 我希望能够查看和编辑 NS
  • iOS 上的 AWSS3TransferUtilityErrorDomain 代码=2

    AWSS3TransferUtilityErrorDomain Code 2 在 iOS 上上传达到 100 时出现此错误 而 Android 则工作正常 我在用react native s3 但这似乎是 sdk 或我的存储桶策略的问题 但
  • NameError:名称“self”未在 EXEC/EVAL 中定义

    我正在编码一些东西 并且有一个部分出现错误 但我找不到发生错误的原因 代码 示例 类似于错误部分 class Test def init self a 0 self x a self l 2 x for x in range a lt se
  • 使用 pip 安装 VTK

    我在 Arch Linux 上使用 Python 3 7 我一直在尝试用 pip 安装 Mayavi 但在安装 vtk 时总是失败 所以我发现即使尝试通过 pip 自行安装 vtk 应该有效 那个vtk确实没有安装 我收到此错误 sudo
  • 如何检测照片的拍摄角度,并像桌面应用程序在查看时自动旋转网站显示?

    如果我用相机拍照 它会存储设备的方向 角度 因此当我使用良好的应用程序在 PC 上查看图像时 它会显示自动旋转到 0 但是当我上传到网站时 它显示的是原始角度 所以图像看起来不太好 我怎样才能用 PHP 检测到这一点并旋转图像 并从它的元信
  • 如何在 Android 中用谷歌地图 v2 上的我的图标替换蓝点?

    我正在尝试用 Google 地图 v2 上我自己的图标替换蓝点 在地图上显示当前位置 我在下面尝试过 但没有成功 Android Maps API v2 更改我的位置图标 地图 V2 myLocation 蓝点回调 在 Google Map
  • 如何检测用户是否已登录 Firebase?

    我在 javascript 文件中使用 firebase node api 进行 Google 登录 firebase initializeApp config let provider new firebase auth GoogleAu
  • 具有多个 sql_variant 参数的 SQLCLR 自定义聚合

    Hy 几个月前我发布了一个关于 CLR 用户定义聚合的问题post 这就像一个魅力 但现在我想使用 sql variant 类型的两个参数来实现完全相同的功能 就像我之前的文章一样 这两个函数是 sMax 和 sMin 并且将根据第二个值返
  • 单线程同步与异步混淆

    Assume makeBurger 需要 10 秒 在同步程序中 function serveBurger makeBurger makeBurger console log READY Assume takes 5 seconds to
  • 如何正确使用CALLER_IS_SYNCADAPTER

    不知怎的 我不理解查询参数CALLER IS SYNCADAPTER的工作概念 它的默认值为 false 如果设置 则不会自动设置 DIRTY 标志 那么它到底意味着什么呢 根据我的理解 联系人的每次更改都会导致将脏标志设置为 1 同步适配
  • 具有模块导入的命名空间

    我正在学习Python 尽管我已经学习了大约一年 但我仍然是一个初学者 我正在尝试编写一个在主模块中调用的函数模块 被调用模块中的每个函数都需要数学模块才能运行 我想知道是否有一种方法可以在不将数学模块导入被调用模块内的情况下执行此操作 这