• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

python导入语法的疑问

dksslq 2018-06-25 浏览量:694
本人python初学者,对import和from import的实质还是一头雾水,请问,import和from import具体做了什么事情?到底是直接执行对应的module还是直接导入其中的符号?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 客户端可以执行import或from语句。如果模块还没有加载,这两个语句会去搜索、编译以及执行模块文件程序。主要差别在于,import会读取整个模块,所以必须进行定义后才能读取它的变量名;from将获取(或者是复制)模块特定的变量名。

    import使一个变量名引用整个模块对象,因此必须通过模块名称来得到该模块的属性(例如,module1.printer)。而from会把变量名复制到另一个作用域,所以它就可以直接在脚本中使用复制后的变量名,而不用通过模块(例如,printer)。

    from语句有破坏命名空间的潜质。如果使用from导入变量,而那些变量碰巧和作用域中现有变量重名,变量就会被悄悄的覆盖掉。使用import语句时就不存在这种问题,因为必须通过模块名才能获取其内容。不过,使用from时,只要你了解并预料到可能发生这种事,在实际情况下这就不是一个大问题了,尤其是当你明确列出导入变量名时(例如,from module import x y z)。

    另一方面,和reload调用同时使用时,from语句有比较严重的问题,因为导入的变量名可能引用之前版本的对象。再者,from module import *形式的确可能破坏命名空间,让变量名难以理解,尤其是在导入一个以上的文件时。

    比较务实的建议是:简单的模块一般倾向于使用import,而不是from。多数的from语句是用于明确列举想要的变量,而且限制在每个文件中只用一次from *形式。这样一来,任何无定义的变量名都可以认为是存在于from *所引用的模块内。当你必须使用两个不同模块内定义的相同变量名变量时,才真的必须使用import,这种情况下不能使用from。

    • 发布于 2018-06-25
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7

  • import A 表示将A整个库导入。

    from A import B 表示在A库中导入B模块。

    两种方式的差异在于:第一情况导入了整个库,操作该库时用A.fun;第二种情况导入了A库的一部分,操作该库中B模块时用B.fun。

    • 发布于2018-06-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为一个模块中可以包含很多子模块,如果直接导入,要调用子模块(功能函数等)就需要用"模块名.子模块名"这样的命名空间路径来指定,这样需要多输入很多内容,不方便编程,所以在不存在命名冲突的时候,可以用“from 模块名 import 子模块” 这样的语句直接导入子模块,从而可以直接调用子模块,减少了输入。
    • 发布于2018-06-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 都可以用来导入模块,import是直接导入整个模块,from import则是细分导入的具体模块,其实作为初学者来说,无需在此过多纠结


    • 发布于2018-06-25
    • 举报
    • 评论 0
    • 0
    • 0

  • Python导入模块的方法有两种:import module 和 from module import,区别是前者所有导入的东西使用时需加上模块名的限定,而后者不需要。
    
    import xx导入模块对于模块中的函数,每次调用需要“模块.函数”来用。
    from xx import fun 直接导入模块中某函数,直接fun()就可用。
    • 发布于2018-06-29
    • 举报
    • 评论 0
    • 0
    • 0

  • import是将整个模块导入,from import则是将模块中的一个子模块导入
    • 发布于2018-06-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

python导入语法的疑问