zoukankan      html  css  js  c++  java
  • Python模块导入的两种常用方法及效率优化

    前言:遇到这个问题后,在网上查到了很好的资料。此处将网上的三篇文章总结汇总,以便日后查阅。
    虽有改写,均视为转载!原文的作者和连接附在文末。若侵犯原作者权益,请联系本人删改此文!

    模块:是指一个可以交互使用,或者从另一Python 程序访问的代码段。

    只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块自身可以通过这种方法来使用其它模块的功能。

    方法一

    import modname
    

    用import语句导入模块,就在当前的名称空间(namespace)建立了一个到该模块的引用.这种引用必须使用全称,也就是说,当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 funcname,而应该使用 modname.funcname

    调用类的属性和方法:创造实例X = module_name.class_name( ,)

    ​ X.属性

    ​ X.方法()

    虽然开头没有列出用到的所有类,但你清楚地知道在程序的哪些地方使用了导入的模块,还避免了导入模块中的每个类可能引发的名称冲突。

    方法二

    #导入单个及多个类
    from modname import funcname 
    from modname import fa, fb, fc  
    
    #导入模块中所有的类
    from modname import *   
    

    与第1种方法的区别:funcname 被直接导入到本地名字空间去了,所以它可以直接使用,而不需要加上模块名的限定* 表示,该模块的所有公共对象(public objects)都被导入到 当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入。

    modname没有被定义,所以modname.funcname这种方式不起作用。并且,如果funcname如果已经被定义,它会被新版本(该导入模块中的版本)所替代。

    建议:
    1)如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import

    2)如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import

    3)如果模块包含的属性和方法与你的某个模块同名,你必须使用import module来避免名字冲突

    4)尽量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。

    调用类的属性和方法: 创造实例X = class_name( ,)

    ​ X.属性

    ​ X.方法()

    不推荐使用,即没有列出使用到的类,又有可能造成名称冲突。

    总结:方法二:假如类名相同,将会产生覆盖类,即后输入的类有效,即使前面的类中的属性和方法比覆盖类多,也将无效。简而言之,产生覆盖后,前面的类将全部无效。不主张从一个包或模块中用import * 导入所有模块,因为这样的通常会导致可读性很差。

    from Package import specific_submodule的用法并没有错,实际上这还是推荐的用法,除非导入的模块需要使用其它包中的同名子模块。综上所述,一般情况应该使用import , 但有几个例外 :1) module文档告诉你要用from-import的 ;2) 导入一个包组件。需要一个包里面的某个子模块,一般用from A.b import cimport A.b.c 更方便,且不会冒混淆的危险.

    网上还有reload和_import_()的方法,不是很常用,此处略过

    效率优化

    例如我们要使用os模块中的某个属性,那我们可以单独引入os中某个属性

    from os import version
    

    同样的我们也可以把引入的模块属性或者对象,直接赋给另外一个变量,使用as:

    from os import version as ver
    

    这样使用方便

    如果在一个函数中频繁的使用某个模块的属性,那我们可以像上述那样,给它去一个本地变量的别名。因为频繁使用属性,而且模块是全局变量,这样消耗了多余的系统资源。

    而且这样会使变量查找速度快很多。在查找全局变量之前总是会先查找本地变量,将经常用到的模块替换为一个本地变量,会使你的程序跑的快很多。并且在写代码的时候便于记忆,便于书写代码。


    转自:

  • 相关阅读:
    组原——④存储器4
    sdk和api的区别
    转载:直播测试
    生成短链接
    H5调原生
    Android Intent 启动方法和启动Action大全
    ps和top的区别
    安卓知识点
    正则基础之——捕获组(capture group)
    正则基础之——反向引用
  • 原文地址:https://www.cnblogs.com/NeroSong/p/7340817.html
Copyright © 2011-2022 走看看