为什么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那样工作? 的相关文章

  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 如何在 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 但是如果我尝试导入某些内容 我总是会遇到错误 如果我有两个这样的文件