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

导入语句python3中的更改

宇文峰
2023-03-14
问题内容

什么是相对进口?在python2中还允许在其他什么地方导入star?请举例说明。


问题答案:

每当导入相对于当前脚本/软件包的软件包时,就会进行相对导入。

例如,考虑以下树:

mypkg
├── base.py
└── derived.py

现在,你derived.py需要从中获得一些东西base.py。在Python 2中,你可以这样做(在中derived.py):

from base import BaseThing

Python 3不再支持该功能,因为它是否明确要求“相对”还是“绝对” base。换句话说,如果base系统中安装了一个名为Python的软件包,那么你将得到错误的软件包。

相反,它要求你使用显式导入,这些显式导入在类似路径的基础上显式指定模块的位置。你derived.py将看起来像:

from .base import BaseThing

领导.说“ base从模块目录导入”;换句话说,.base映射到./base.py

类似地,有一个..前缀沿目录层次结构向上../(如..mod映射到../mod.py),然后沿…两个层次向上(../../mod.py),依此类推。

但是请注意,上面列出的相对路径是相对于当前模块(derived.py)所在的目录的,而不是相对于当前工作目录的。

@BrenBarn已经解释了star导入案例。为了完整性,我将不得不说相同;)。

例如,你需要使用一些math功能,但只能在单个功能中使用它们。在Python 2中,你被允许是半懒惰的:

def sin_degrees(x):
    from math import *
    return sin(degrees(x))

请注意,它已经在Python 2中触发了警告:

a.py:1: SyntaxWarning: import * only allowed at module level
  def sin_degrees(x):

在现代Python 2代码中,你应该这样做,而在Python 3中,你必须执行以下任一操作:

def sin_degrees(x):
    from math import sin, degrees
    return sin(degrees(x))

要么:

from math import *

def sin_degrees(x):
    return sin(degrees(x))


 类似资料:
  • 我有3个不同的TS文件,在1个主TS文件中动态加载2个TS文件,如下所示 现在,在这两个TS文件中,我正在导入jquery和jquery父TS文件 我的tsconfig.json 所以我的问题是jquery文件加载3次还是只加载一次。

  • 问题内容: 想知道。排序导入语句的正确方法是哪种?还有哪个更具可读性? 喜欢, 外部类(如),然后是内部包 类。 只是按字母顺序 提前致谢。 问题答案: 从Java编程风格指南中 import语句必须在package语句之后。import语句应首先使用最基本的软件包进行排序,并与相关的软件包分组在一起,并且各组之间应留空行。 ..... ..... 导入语句的位置由Java语言强制执行。通过排序,

  • 问题内容: 我认为将import语句放在靠近使用它的片段的位置,可以通过使其依赖项更加清晰来提高可读性。Python会缓存吗?我应该在乎吗?这是一个坏主意吗? 还有一点理由:这是针对使用库中奥秘功能的方法的,但是当我将方法重构为另一个文件时,我没有意识到我会错过外部依赖项,直到遇到运行时错误。 问题答案: 其他答案似乎对真正的工作方式略有困惑。 这个说法: 大致等效于以下语句: 也就是说,它将在当

  • 本章节将为大家介绍Python循环语句的使用。 Python中的循环语句有 for 和 while。 Python循环语句的控制结构图如下所示: while 循环 Python中while语句的一般形式: while 判断条件: 语句 同样需要注意冒号和缩进。另外,在Python中没有do..while循环。 以下实例使用了 while 来计算 1 到 100 的总和:#!/usr/b

  • 是否有人使用es2015语法编写jasmine/jest测试?需要多少填隙/填充胶/选区划分? 我无法正确导入函数。我有一个模块:../utils/TweetUtils.js 和一个测试套件: ../../\uuuuu测试\uuuu/TweetUtils-test.js 如果我用这样的东西将控制台输出破解到套件中:

  • 问题内容: 我已经将一个现有的Java应用程序导入到我的工作区中。我看到,在应用程序中的不同包中存在具有相同名称的类。 例如,存在一个名为“ Status.java”的类,其中包含 当我尝试在一个类中同时使用它们时,例如如下所示 它开始在Eclipse中指出一个错误 该 进口com.bayer.frontlayer.dao.Status 碰撞与其他import语句 有没有解决这个问题而无需更改类的