为什么Python的导入不能像C的#include那样工作?

2024-03-16

我实际上已经尝试理解 Python 导入大约一年了,我几乎放弃了 Python 编程,因为它看起来太混乱了。我有 C 语言背景,我认为import工作就像#include,但是如果我尝试导入某些内容,我总是会遇到错误。

如果我有两个这样的文件:

foo.py:

a = 1

bar.py:

import foo
print foo.a
input()

为什么我需要引用模块名称?为什么不能够写import foo, print a?这种混乱有什么意义呢?为什么不直接运行代码并为您定义一些内容,就好像您将其编写在一个大文件中一样?为什么它不能像 C 的 #include 指令那样工作,它基本上是复制和粘贴代码?我在 C 中没有导入问题。


为了做你想做的事,你可以使用(不推荐,进一步阅读解释):

from foo import *

这会将所有内容导入到您当前的命名空间中,您将能够调用print a.

然而,这种方法存在以下问题。考虑一下当你有两个模块时的情况,moduleA and moduleB,每个都有一个名为的函数GetSomeValue()。 当你这样做时:

from moduleA import *
from moduleB import *

您有命名空间解析问题*,因为您实际调用的函数是什么GetSomeValue(), the moduleA.GetSomeValue() or the moduleB.GetSomeValue()?

除此之外,您还可以使用Import As特征:

from moduleA import GetSomeValue as AGetSomeValue
from moduleB import GetSomeValue as BGetSomeValue

Or

import moduleA.GetSomeValue as AGetSomeValue
import moduleB.GetSomeValue as BGetSomeValue

此方法手动解决冲突。

我相信您可以从这些示例中体会到显式引用的必要性。

* Python 有其名称空间解析机制,这只是出于解释目的的简化。

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

为什么Python的导入不能像C的#include那样工作? 的相关文章

  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • 使用 pywin32com 进行 opc 的内存泄漏

    我很难弄清楚如何解决内存泄漏问题 我认为这可能是 pywin32 的问题 但我不完全确定 我用于读取 写入单个项目的代码似乎工作得很好 但是当使用组函数时 它会慢慢泄漏内存 我怀疑这是来自必须在 server handles 中传递的基于
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • 在Python中寻找坐标系中某些点之间的最短路径

    我编写了一个代码 可以在坐标系中的特定宽度和长度范围内生成所需数量的点 它计算并列出我使用欧几里德方法生成的这些点的距离矩阵 我的代码在这里 import pandas as pd from scipy spatial import dis
  • 使用 ABCMeta 和 EnumMeta 的抽象枚举类[重复]

    这个问题在这里已经有答案了 简单的例子 目标是通过从两者派生的元类创建一个抽象枚举类abc ABCMeta and enum EnumMeta 例如 import abc import enum class ABCEnumMeta abc
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • 在硬件级别模拟按键 - Windows

    我正在寻找一种语言或库 使我能够在最大可能的水平上模拟击键 而无需实际按下按键 我对击键级别的具体衡量标准是 当我的计算机已经运行按键侦听器 例如鼠标键和粘滞键 时 它是否会产生与物理按键相同的输出 我尝试过很多击键模拟的方法 java A
  • Apple IOS 上的 C# 应用程序 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有基于 C Net 的应用程序 有什么方法可以在 Apple IOS 上运行这些应用程序吗 我没有资
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • API 调用时出现 UnicodeEncodeError (json)

    我正在尝试打印此 API 调用的结果 但收到 UnicodeEncodeError 可能是超级菜鸟问题 但非常感谢任何帮助 import http client import json api key hidden connection h
  • 为什么 `Pool.map()` 多处理中的内存消耗急剧增加?

    我正在对 pandas 数据帧进行多重处理 方法是将其拆分为多个数据帧 这些数据帧存储为列表 并且 使用Pool map 我将数据帧传递给定义的函数 我的输入文件约为 300 mb 因此小数据帧大约为 75 mb 但是 当多处理运行时 内存
  • Python记录多个模块记录器在主程序之外不起作用

    我的目标是从多个模块进行日志记录 同时仅在一个位置 主程序中 配置记录器 如图所示这个答案 https stackoverflow com questions 15727420 using python logging in multipl
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List
  • 如何正确对齐 WPF GeometryGroup 中的路径?

    我正在使用一个GeometryGroup在圆的中心绘制一个符号 下面的示例显示了我在对此进行实验时的尝试之一 它具有从同一原点 32 32 出发的三条直线
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化
  • 通过 subprocess.communicate 在 python 脚本之间传输 pickled 对象输出

    我有两个 python 脚本 object generator py 它会腌制给定的对象并打印它 另一个脚本 object consumer py 通过 subprocess communicate 选择第一个脚本的输出 并尝试使用 pic

随机推荐

  • 如何在 C++ 中正确返回数组(类成员)?

    我对 C 还很陌生 所以这可能是一个微不足道的问题 我的类有一个私有成员变量 它是一个数组 我需要返回该数组 但我不确定如何正确执行此操作 class X private double m Array 9 public double Get
  • 这段代码可以防止SQL注入吗?

    背景 我已签约分析现有数据提供者 并且我知道以下代码有错误 但为了指出它有多糟糕 我需要证明它容易受到 SQL 注入的影响 Question 什么 Key 参数可能会破坏PrepareString函数并允许我执行DROP陈述 代码片段 Pu
  • 如何访问网络文件?

    using namespace std ofstream myfile myfile open Z ABC TXT fails Z is a network drive myfile open C Temp ABC TXT OK myfil
  • 为 JavaScript 模块编写 scalajs Facade 时如何使用 JSImport

    我使用 JSImport 编写了一个外观 并且它有效 不幸的是 我通过反复试验找到了解决方案 并且我不完全理解为什么这个特定的解决方案有效 但我尝试过的其他解决方案却无效 背景 我从一个使用 sbt 构建的工作项目开始 它是一个单页应用程序
  • 有没有办法以正确的顺序生成 Liquibase 数据?

    我正在使用 Liquibase 对现有数据库进行版本控制 所以我使用 liquibase logLevel debug driver com mysql jdbc Driver classpath lib mysql connector j
  • 合并删除远程分支列表下的分支后仍然看到Git Branch

    我正在开发一个自动化套件 我在其中创建了两个分支 p2pOnOff 和 release 分支 后来我将它们合并到 master 并使用以下命令删除它们 git branch d p2pOnOff git push origin p2pOnO
  • 删除元组列表中包含 nan 的元组 - Python

    我有一个很长的元组列表 想要使用 Python 删除其中包含 nan 的任何元组 我目前拥有的 x 录音开始 0 nan 4 nan 7 事件标记1 150 我正在寻找的结果 x 录音开始 0 事件标记1 150 我尝试过使用 np isn
  • 将 fb-contrib 库与 Gradle 的 FindBugs 插件结合使用

    是否可以整合Facebook 贡献 http fb contrib sourceforge net 带有 Gradle 的库FindBugs 插件 http www gradle org docs current userguide fin
  • 在Java中,为什么Stack是一个具体类,而Queue是一个接口?

    Queue 的哪一个子类是 普通 队列 1 java util Stack 是 Java 1 0 的遗留类 它早于 Collections 框架很多年 坦率地说 它是一个例子horrible多方面的设计 一切都不是事情应有的样子 主要问题是
  • 为什么 numpy.var 是 O(N) 空间?

    我有一个 13GB 的数组 我打电话numpy var对其进行计算方差 然而 它又分配了约 13GB 来执行此操作 为什么需要 O N 空间 或者我打电话numpy var以错误的方式 import numpy as np data pri
  • 打印一个文件中与另一文件中的模式匹配的行

    我有一个超过 40 000 行的文件 file1 我想提取与 file2 中的模式匹配的行 大约 6000 行 我像这样使用 grep 但它很慢 grep f file2 file1 gt out 有没有更快的方法来使用awk or sed
  • 通过线性布局以编程方式设置两个按钮之间的边距

    我如何以编程方式在按钮 regler 和 decommender 之间设置 20dp 的边距 这是我的工作 LinearLayout lytmain new LinearLayout Mcontex lytmain setOrientati
  • 如何传递特征矩阵行引用以将其视为向量?

    我有一个对向量引用进行操作的函数 例如 void auto bias const Eigen VectorXf v Eigen Ref
  • Vim:打开文件后读取模型行?

    我从事各种项目 其中许多项目设置了特定于文件的 vim 设置 我被要求不要在 vimrc 中设置模型行 加载文件后有没有办法加载模型设置 所以如果我用 vim 打开 tmp c int main int argc char argv ret
  • 工具提示气球显示位置(用于错误通知)

    不久前我问了一个与此密切相关的问题 通知用户错误的替代方法 https stackoverflow com questions 2878043 alternative way to notify the user of an error 简
  • ASP.NET MVC 显示成功消息

    这是我从应用程序中删除记录的示例方法 Authorize Roles news admin public ActionResult Delete int id var ArticleToDelete from a in db Article
  • PyQt - 如何打开目录文件夹?

    我搜索了很多 我知道如何打开目录对话框窗口 但我正在寻找的是在Windows操作系统下打开目录文件夹的方法 就像右键单击本地文件夹之一并选择打开一样 有什么建议么 对于 python 3 7 你可以这样做 os startfile path
  • 在c中实现时间延迟

    我不知道如何准确地描述这个搜索 所以我没有运气找到任何东西 S 我需要在 C 中实现时间延迟 例如我想做一些事情 然后等一分钟 然后继续做事情 这有道理吗 谁能帮我吗 在标准 C C99 中 您可以使用time 为此 请执行以下操作 inc
  • 将内存中的图像转换为 Blob [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我内存中有一个图像 类型 java awt Image 我想使用jdk 1 7将其转换为Blob 类型 java sql Blob 我能找
  • 为什么Python的导入不能像C的#include那样工作?

    我实际上已经尝试理解 Python 导入大约一年了 我几乎放弃了 Python 编程 因为它看起来太混乱了 我有 C 语言背景 我认为import工作就像 include 但是如果我尝试导入某些内容 我总是会遇到错误 如果我有两个这样的文件