zoukankan      html  css  js  c++  java
  • if __name__=='__main__': 有什么用

    if __name__=='__main__':

    每个python模块(Python文件)都包含一个内置的变量__name__,里面存储着当前模块名。
    当模块被直接在shell中执行时,当前模块名为:"__main__"
    当模块被导入到其他Python文件时,当前模块名为:当前文件名称(.py)
     
    即,当文件被导入时,不执行if里面的语句。
     
    if __name__=='test':
        print('谢谢你导入了test')
    如果模块(.py)文件中有上面的代码,则表示当该模块被导入程序中时被执行的代码。
    而该文件直接运行时,不会执行该代码。
     
    在程序第一次导入指定文件时,会执行三个步骤:
    1,找到模块文件。
    注意:1,导入时不需要加上文件的路径
               2,导入时不需要加上文件的后缀名
    2,编译成字节码
    (在内存中构建module类的实例,模块对象,对象名称为全局变量test)
    (模块变量名(文件名)不能是python中的关键字和内置函数名)
    (并非所有的py文件都会生成编译得到的pyc文件,对于那些只执行一次的程序文件,会将内存中的编译结果在执行完成后直接丢弃)
    (比如使用compileall模块可以强制编译成pyc文件)
    (另外,运行字节码pyc文件并不会比直接运行py文件更快,执行它也一样是一行行地解释、执行,唯一快的地方在于导入装载的时候无需重新编译而已。)
    3,执行模块的代码
    (执行模块文件(已完成编译)的时候,按照一般的执行流程执行:一行一行地、以代码块为单元执行。一般地,模块文件中只用来声明变量、函数等属性,以便提供给导入它的模块使用,而不应该有其他任何操作性的行为,比如print()操作不应该出现在模块文件中,但这并非强制。)
    (执行完模块文件后,这个模块文件将有一个自己的全局名称空间,在此模块文件中定义的变量、函数等属性,都会记录在此名称空间中。)
     
     
    import使用一个变量名引用整个模块对象,
    from将模块中的变量名复制到程序中
    导入只发生一次,当第二次导入时,不会执行上面三个步骤
     
  • 相关阅读:
    复利计算-做汉堡,结对2.0
    复利计算-结对
    《构建之法》第四章读后感
    复利计算单元测试
    实验一 命令解释程序的编写
    《构建之法》前三章章读后感
    1.0 2.0 3.0复利计算器
    实验0:了解和熟悉操作系统
    学习进度条
    0302思考并回答一些问题
  • 原文地址:https://www.cnblogs.com/blogzyq/p/13893474.html
Copyright © 2011-2022 走看看