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将模块中的变量名复制到程序中
    导入只发生一次,当第二次导入时,不会执行上面三个步骤
     
  • 相关阅读:
    使用SQLCOMMAND以及SQLADAPERT 调用存储过程
    将表A的数据复制到表B,以及关于主表和子表的删除办法
    登录次数验证,可能还是有些不足的,希望大家指正
    MVC过滤器
    sql数据库delete删除后怎么恢复,这是网上找的答案。。希望大神验证指教一下
    淘宝前后端分离实践
    P1852 [国家集训队]跳跳棋
    P2154 [SDOI2009]虔诚的墓主人
    P4208 [JSOI2008]最小生成树计数
    P2467 [SDOI2010]地精部落
  • 原文地址:https://www.cnblogs.com/blogzyq/p/13893474.html
Copyright © 2011-2022 走看看