导入语句python3中的更改

发布于 2021-02-02 23:19:34

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

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

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

    例如,考虑以下树:

    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))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看