加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

终于学会Python?别闹了,本文中的东西你搞懂了吗?

发布时间:2019-08-29 00:56:23 所属栏目:建站 来源:编程艾老师
导读:副标题#e# 作为一名新手Python程序员,你首先需要学习的内容之一就是如何导入模块或包。但是我注意到,那些许多年来不时使用Python的人并不是都知道Python的导入机制其实非常灵活。在本文中,我们将探讨以下话题: 常规导入(regular imports) 使用from语句

打开终端, cd至my_package包所在的文件夹,但不要进入my_package。在这个文件夹下运行Python解释器。我使用的是IPython,因为它的自动补全功能非常方便:

  1. In [1]: import my_package 
  2. In [2]: my_package.subpackage1.module_x 
  3. Out[2]: <module 'my_package.subpackage1.module_x' from 'my_package/subpackage1/module_x.py'> 
  4. In [3]: my_package.subpackage1.module_x.main 
  5. spam spam spam 

相对导入适用于你最终要放入包中的代码。如果你编写了很多相关性强的代码,那么应该采用这种导入方式。你会发现PyPI上有很多流行的包也是采用了相对导入。还要注意一点,如果你想要跨越多个文件层级进行导入,只需要使用多个句点即可。不过,PEP 328建议相对导入的层级不要超过两层。

还要注意一点,如果你往 module_x.py文件中添加了if__name__==‘__main__’,然后试图运行这个文件,你会碰到一个很难理解的错误。编辑一下文件,试试看吧!

  1. from . module_y import spam as ham 
  2. def main: 
  3. ham 
  4. if __name__ == '__main__': 
  5. # This won't work! 
  6. main 

现在从终端进入 subpackage1文件夹,执行以下命令:

  1. python module_x.py 

如果你使用的是Python 2,你应该会看到下面的错误信息:

  1. Traceback (most recent call last): 
  2. File "module_x.py", line 1, in <module> 
  3. from . module_y import spam as ham 
  4. ValueError: Attempted relative import in non-package 

如果你使用的是Python 3,错误信息大概是这样的:

  1. Traceback (most recent call last): 
  2. File "module_x.py", line 1, in <module> 
  3. from . module_y import spam as ham 
  4. SystemError: Parent module '' not loaded, cannot perform relative import 

这指的是, module_x.py是某个包中的一个模块,而你试图以脚本模式执行,但是这种模式不支持相对导入。

如果你想在自己的代码中使用这个模块,那么你必须将其添加至Python的导入检索路径(import search path)。最简单的做法如下:

  1. import sys 
  2. sys.path.append('/path/to/folder/containing/my_package') 
  3. import my_package 

注意,你需要添加的是 my_package的上一层文件夹路径,而不是my_package本身。原因是my_package就是我们想要使用的包,所以如果你添加它的路径,那么将无法使用这个包。

我们接下来谈谈可选导入。

可选导入(Optional imports)

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读