• 大爽Python入门教程 81 导入`import`


    大爽Python入门公开课教案 点击查看教程总目录

    1 导入其他文件代码

    如果一个py文件里面定义好一个函数,或者类,或者变量。
    另一个py文件中想要直接地使用,则可以使用import语句导入。

    比如a1.py如下

    def check_all_even(nums):
        # 检查是否全都是偶数
        for num in nums:
            if num % 2 == 1:
                return False
    
        return True
    

    a1.py有同级文件b1.pya1.pyb1.py在同一文件夹下)
    b1.py中想使用check_all_even这个函数,有以下几种调用方法。

    1. import ...
    import a1
    a1.check_all_even([1, 2, 3])
    

    这是导入了a1文件,使用a1文件里面的所有东西(函数,类,变量),
    都要用a1.开头才行,表明用的是a1的方法。(在导入比较多的时候,这个能够帮助区分)

    1. from ... import ...
    from a1 import check_all_even
    check_all_even([1, 2, 3])
    

    这是从a1文件中,专门导入了check_all_even方法
    后面可以直接调用check_all_even, 不用在开头使用a1.

    2 详细语法

    假如有一个文件a_long_name_file.py,里面有很多方法和类,
    比如像这样。

    def check_all_even(nums):
        # 检查是否全都是偶数
        for num in nums:
            if num % 2 == 1:
                return False
    
        return True
    
    def check_all_odd(nums):
        # 检查是否全都是奇数
        for num in nums:
            if num % 2 == 0:
                return False
    
        return True
    
    class Node:
        def __init__(self, num):
            self.num = num
            self.next = None
    
    class AdvancedNode(Node):
        def __init__(self, num):
            super().__init__(num)
            self.prev = None
    

    方法一

    如果使用上面的方法一

    import a_long_name_file
    
    a_long_name_file.check_all_odd([1,2,3])
    

    每次调用方法之前都写一个长长的a_long_name_file.不仅费劲,
    而且不美观(可读性差)

    那么这个时候,一般可以使用as语法来起一个别名(相当于起一个好叫的外号)。
    后面调用里面的东西时,可以使用这个别名来调用。
    比如

    import a_long_name_file as aln
    
    aln.check_all_odd([1,2,3])
    

    方法二

    如果使用上面的方法二,要导入里面所有的函数和类

    from a_long_name_file import check_all_even, check_all_odd, Node, AdvancedNode
    
    check_all_odd([1,2,3])
    

    这个写起来比价麻烦,也不美观(可读性差),未来有改动时还需要另外修改。

    这里可以使用*来代表所有

    from a_long_name_file import *
    
    check_all_odd([1,2,3])
    

    这是把a_long_name_file里面所有的都导入进来

    方法二补充

    from a_long_name_file import check_all_even
    
    check_all_odd([1,2,3])
    

    如果觉得check_all_even名字太长,也可以使用as语法来给其设置别名

    from a_long_name_file import check_all_even as check
    
    check([1,2,3])
    

    这里就是把check_all_even命令为check,后面就可以直接用check

    总的来讲,as可用来给变量重命名。

    3 __name__=="__main__"

    导入细节介绍

    导入一个文件时(无论使用何种导入方式),
    也会执行该文件代码。
    比如b1.py如下

    def show_first(word):
        print(word[0])
    
    show_first("abc")
    

    b2.py代码如下

    from b1 import show_first
    
    show_first("kind")
    

    b2.py的执行输出如下

    a
    k
    

    b2.py先执行了b1.py中的show_first("abc")
    然后才执行的自身的代码show_first("kind")

    测试需要

    对于一些支援性的代码文件。
    我们希望可以在其中有一些代码测试其函数或者类。
    但是不希望外部导入时也执行这些测试代码。
    常会用到__name__=="__main__"

    示例如下

    c1.py如下

    def simple(num):
        line = "-" * num
        print(line)
    
    if __name__ == "__main__":
        simple(2)
    

    输出如下

    --
    

    c2.py如下

    import c1
    
    c1.simple(5)
    

    输出如下

    -----
    

    此时c2.py没有执行c1.pyif __name__ == "__main__":中的代码。

    这也正是if __name__ == "__main__":的作用。
    只有文件本身被运行时,if判断才为True,其下的代码才会被执行。
    文件被其他文件导入时,文件中的if判断为False,其下的代码不会被执行。

    __name__

    那么__name__到底是个什么东西呢。
    解释示例如下

    d1.py代码如下

    print(__name__)
    

    执行输出如下

    __main__
    

    d2.py代码如下

    import d1
    

    执行输出如下

    d1
    

    也就是文件本身被执行时,__name__会为"__main__"
    被其他文件调用后,__name__为自身文件名。

    补充: 像__name__这样首位都有双下划线的名字,
    是python里面很特殊的内置变量。

  • 相关阅读:
    Django -- 10.Django和Ajax
    Django -- 9.模型层(2)
    Django -- 8.模型层(1)
    Django -- 7.模板层
    Django -- 6.视图层
    Django -- 5.路由层(URLconf)_基于Django2
    Django -- 4.Django简介
    Django -- 3.web框架
    Delphi中Chrome Chromium、Cef3学习笔记(四)
    Delphi中Chrome Chromium、Cef3学习笔记(三)
  • 原文地址:https://www.cnblogs.com/BigShuang/p/15790106.html
Copyright © 2020-2023  润新知