【问题标题】:Python: Importing multiple methods from external modulePython:从外部模块导入多个方法
【发布时间】:2017-12-09 18:47:32
【问题描述】:

对于非常常见的 Python 模块,我发现使用 from .. import 语句进行导入大大提高了我的代码的可读性,因为我可以按名称引用方法而无需点符号。但是,在某些模块中,我需要的方法嵌套不同,例如在os:

from os.path import join
from os import listdir, getcwd

为什么from os import path.join, listdir, getcwd 不起作用?以更简洁的方式导入我需要的所有方法的“pythonic”方式是什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    关于from <module> import <identifier> 是否是Pythonic 本身的观点是相当分裂的——它隐藏了一个方法的起源,所以仅仅通过阅读就很难弄清楚某个变量/函数的来源编码。另一方面,它减少了一些人认为 Pythonic 的冗长,即使它没有明确规定。无论哪种方式,Pythonic 都是一个难以捉摸的术语,因为它通常意味着“我认为 Python 代码应该看起来像”支持几个 PEP 和晦涩的邮件列表帖子,同时方便地省略了那些违背 Pythonic 概念的帖子。

    from os import path.join 不起作用,因为os 定义了os.path 模块(通过直接写入所有事物的sys.modules),它不是os 模块中的标识符本身。然而,path 是os 模块中的标识符,指向os.path 模块,因此您可以使用from os import path 或from os.path import join。

    最后,简洁和Pythonic不是同义词,事实上PEP 8例如规定使用多行进行多次导入,即使你可以简洁 em>写import <module1>, <module2>, <module3> ...。它说可以像这样导入多个标识符,但是请记住,os 和 os.path 是两个不同的模块,因此基于 PEP 8,它们不应位于同一行,因此应写为:

    from os import <identifier_1>, <identifier_2>
    from os.path import <identifier_3>, <identifier_4>
    

    现在,我会声称这是Pythonic,但它基于 PEP 8 是最有意义的,至少对我而言。

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2021-03-07
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多