美文网首页
引入第三方代码的三种方式

引入第三方代码的三种方式

作者: 醉看红尘这场梦 | 来源:发表于2020-03-13 10:15 被阅读0次

    Python之所以广泛流行,依靠的当然不仅仅是它流畅简单的语法,还有在其背后给他站台撑腰的众多模块代码。依靠它们,可以让我们更简单的完成日常的开发工作。之前的例子里,我们使用的,都是属于Python核心功能的代码,因此,无须引入任何内容。

    这一节,我们就来看引入第三方模块的几种方式。

    严格来说,Python有两种分法代码的方式,分别叫做module和package。一个编写好的Python文件就可以理解成是一个module,而一个package则包含了多个modules。

    使用import引入模块

    在Python里,内置了一个叫做this的module,如果在文件的一开始,使用import this,执行一下就会看到下面的结果:

    '''
    The Zen of Python, by Tim Peters
    
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
    '''
    
    

    这是Python的设计本源,随着你逐步深入的了解Python,每次回过头来再看这段话,就都会有更深一层的感悟了。

    而现在,我们要关注的重点,是import关键字。通过import module_name的方式,我们可以引入各种各种第三方模块。

    例如,最常用的是完成各种数学运算的math

    import math
    
    print(math.gcd(4, 6))  # 2
    
    

    可以看到,当引入了一个module之后,我们必须使用module_name.function_name这样的方式使用其中的函数。在我们的这个例子中,使用math.gcd计算了两个数的最大公约数。

    另外,关于这种內联的单行注释,我们要注意两点书写的约定:

    • #要和代码最后一个字符保留两个空格的距离;
    • 注释的第一个字母要和#保留一个空格的距离;

    否则,IDE就会给你一个格式不合规范的提示。

    当然,如果你觉得每次都要用module_name.function_name这样的方式调用方法太麻烦,还可以给module起个别名,像这样:

    import math as m
    
    

    这样,在接下来的代码里,我们就可以用m表示mathmodule了:

    m.gcd(4, 6) # 2
    
    

    当然,结果和之前是一样的。

    使用from引入名称

    或者,如果你觉得就算是一个字母的模块名还是麻烦,还可以这样:

    from math import gcd
    
    print(gcd(4, 6)) # 2
    
    

    from的这种用法很接近自然语言,它的字面意思就是,从math中,引入gcd方法。如果我们要从一个module中引入多个方法,可以用逗号把它们分开:

    from math import gcd, sqrt
    
    print(sqrt(gcd(4, 6))) # 2
    
    

    当然,我们也可以像下面这样,直接引入一个module的所有方法:

    from math import *
    
    print(sqrt(gcd(4, 6)))  # 2
    
    

    但是,在正式的项目中,我们要尽量避免这种用法,以避免意外的被其它变量覆盖掉module中的名字,例如:

    from math import *
    
    sqrt = 10
    print(sqrt(gcd(4, 6)))  # 2
    '''
    Traceback (most recent call last):
      File "/Users/puretears/Desktop/tmp/ErrorHandling/ErrorHandling.py", line 5, in <module>
        print(sqrt(gcd(4, 6)))  # 2
    TypeError: 'int' object is not callable
    '''
    
    

    就像上面这个例子一样,一旦我们用*引入了模块的所有名字。其中的函数就有可能意外被我们定义的同名变量覆盖掉。因此,不要轻易使用import *。当我们明确导入一个名字的时候,至少,这对自己也是一个暗示:“喔,我要使用一个叫做sqrt的函数了,不要再使用同名的变量”。

    相关文章

      网友评论

          本文标题:引入第三方代码的三种方式

          本文链接:https://www.haomeiwen.com/subject/itcyjhtx.html