资讯专栏INFORMATION COLUMN

import

Eminjannn / 2748人阅读

摘要:有绝对路径引入和相对路径引入两种方法。绝对路径对于相对路径来说优势为相对路径取决于当前的包,所以在哪里执行就会有不一样的难以预料的后果。相对引用的符号对应的就是的值。如果在函数中执行这个就是而不是上级包名。此时用就能解决。

Import

下面是包的结构

package
├── __init__.py
├── subpackage1
│   ├── __init__.py
│   ├── moduleX.py
│   └── moduleY.py
├── subpackage2
│   ├── __init__.py
│   └── moduleZ.py
└── moduleA.py

我们现在在moduleX.py中。

有绝对路径引入和相对路径引入两种方法。相对路径对于绝对路径来说优势为: 当调整模块和包的时候如果是绝对路径那么需要一个个挨着改。绝对路径对于相对路径来说优势为:相对路径取决于当前的包,所以在哪里执行就会有不一样的难以预料的后果(from . import module error: main is not a package。相对引用的" . "符号对应的就是__name__的值。如果在main函数中执行这个" . "就是__main__而不是上级包名。此时用from baoming import module就能解决)。 下面来导入一些包:[A]表示绝对路径 | [B]表示相对路径。

导入同一个子包下的 moduleY

[A] from package.subpackage1 import moduleY

[B] from . import moduleY

导入同一个子包下的 moduleY.py中的spam函数

[A] from package.subpackage1.moduleY import spam

[B] from .moduleY import spam

从兄弟子包下的moduleZ中导入func函数

[A] from package.subpackage2.moduleZ import func

[B] from ..moduleZ import func

导入父包下的moduleA

[A] from package import moduleA

[B] from .. import moduleA 或from ...package import moduleA

引用中有一个最常见的错误就是:循环引用

A.py

from .B import B_greet_back
def A_say_hello():
    print("A says hello!")
    B_greet_back()
def A_greet_back():
    print("A says hello back!")
if __name__ == "__main__":
    A_say_hello()

B.py

from .A import A_greet_back
def B_say_hello():
    print("B says hello!")
    A_greet_back()
def B_greet_back():
    print("B says hello back!")
if __name__ == "__main__":
    B_say_hello()

此时会有引用错误:ImportError: cannot import name "A_greet_back"

[解决办法]

1.可以引用整个包而不是指定引用包里的函数

更改 b.py from .A import A_greet_back 为 from . import A

2.延迟引用

B.py

def B_say_hello():
    from .A import A_greet_back
    print("B says hello!")
    A_greet_back()
def B_greet_back():
    print("B says hello back!")
if __name__ == "__main__":
    B_say_hello()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43996.html

相关文章

  • UCloud私有云双活数据中心解决方案,强效保障业务可靠性和连续性

    引言据信通院《2022云计算白皮书》报告,国内云计算市场达3000亿规模,云计算成为企业数字化转型的基础设施已是大势所趋。随着企业数字化转型的逐步深入,业务发展与IT基础架构演进密不可分,如何保障数据隐私安全和业务连续性,是 IT 建设中必须关注的问题。出于数据隐私和安全性考量,私有云解决方案成为构建数字化转型的基础底座,通过同城双活及两地三中心的高可用架构保障生产环境稳定性和业务过程连续性;同时...

    社区管理员 评论0 收藏0
  • 了解CSS中的@import

    摘要:坑爹呢,看了一大堆,结果告诉我不要使用这也只是个建议,因为的确会带来一些问题,所以网络上会有各种抵制的文章,既然设计了,总有它的有用之处,不能过于绝对。 我们知道,css文件引入方式有两种: 1. HTML中使用link标签 CSS中@import @import style.css; 第一种方式最为常见最为主流,第二种方式则很少见到有人这么写,因而也常被开发工程师所...

    luxixing 评论0 收藏0
  • 了解CSS中的@import

    摘要:坑爹呢,看了一大堆,结果告诉我不要使用这也只是个建议,因为的确会带来一些问题,所以网络上会有各种抵制的文章,既然设计了,总有它的有用之处,不能过于绝对。 我们知道,css文件引入方式有两种: 1. HTML中使用link标签 CSS中@import @import style.css; 第一种方式最为常见最为主流,第二种方式则很少见到有人这么写,因而也常被开发工程师所...

    FrancisSoung 评论0 收藏0
  • UCloud私有云双活数据中心解决方案,强效保障业务可靠性和连续性

    引言据信通院《2022云计算白皮书》报告,国内云计算市场达3000亿规模,云计算成为企业数字化转型的基础设施已是大势所趋。随着企业数字化转型的逐步深入,业务发展与IT基础架构演进密不可分,如何保障数据隐私安全和业务连续性,是 IT 建设中必须关注的问题。出于数据隐私和安全性考量,私有云解决方案成为构建数字化转型的基础底座,通过同城双活及两地三中心的高可用架构保障生产环境稳定性和业务过程连续性;同时...

    社区管理员 评论0 收藏0
  • Hystrix命令入门使用

    摘要:主要介绍各接口和注解的使用方法。创建请求命令命令就是我们之前所说的,他用来封装具体的依赖服务调用逻辑。通过调用和可以返回对象,如下前者返回的是一个,该命令会在调用的时候立即执行,当每次被订阅的时候都会重放它的行为。表示使用执行方式。 主要介绍Hystrix各接口和注解的使用方法。 创建请求命令 Hystrix命令就是我们之前所说的HystrixCommand,他用来封装具体的依赖服务调...

    Maxiye 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<