模块之间引用不能循环成环,圆圈
 
模块的收搜
 
!!!把模块当作脚本执行
什么叫模块:py文件,如果一个py文件被导入了,他就是一个模块,
模块没有具体的调用过程
但是能对外提供功能
 
什么叫脚本:py文件,如果这个py文件直接被执行,这个被直接执行的文件就是一个脚本(点击右键运行这个py文件)
 
 
前提介绍:py文件叫login,文件内的函数叫log_in
 
当一个py文件(名字叫Login.py)当作脚本执行的时候,能够独立完成登录功能
print('__name__:',  repr(__name__))
返回:__name__:   '__main__'
结论:当一个py文件被当作脚本执行的时候,__name__是一个字符串数据类型的'__main__'。即__name__等于'__main__'这个py文件本身,被当作脚本,可以这样去理解
 
 
当一个py文件定义成模块的时候(login模块名)被当导入的时候需要等待调用才能完成功能
import  login
login.log_in
__name__:    'login'
结论:当一个py文件被当作模块被导入的时候,__name__是一个字符串数据类型的模块名。即
__name__等于 'login'这个模块名,被当作模块,可以这样理解
 
问题?就是说在一个py文件里,怎么控制他当作脚本执行的时候,他去执行他里面的函数调用,而同时这个py文件被当做模块被调用的时候,不执行俩次(因为被当作脚本执行时,函数有调用才能被执行嘛,如果被当作模块导入时就会被打印俩次。)
说白了就是去加个开关去判断他是被当作脚本执行呢还是被当作模块导入。怎么做?
所以就可以这样去判断:
在这个login.py文件里:
内容如下:
def  log_in:
    print('我是脚本文件')
if __name__  ==   '__main__':#这用法是固定的
    log_in()
老师总结:
只要当前这个文件直接被执行,就会执行if条件语句内的代码
当前这个文件是引入模块的时候被执行,就不会执行if条件内语句內的代码。
 
#意思是说:__name__等于__main__这个py文件本身的时候,我就走下面的log_in()然后就执行。
 
#这样就可以控制Login这个py文件被当作模块被导入时,不会打印俩次。其实可以简单理解为__name__和__main__就是这个文件名,如果文件名等于文件,就当作脚本执行,就执行这个py文件打印调用结果,如果这个文件名等于这个模块名的时候就不去执行模块内的调用,就是说当作模块时不被调用俩次,你想调用模块的函数要自己手动调,而不是直接就全部将模块内的东西直接调用过来就打印结果了。
 

if __name__ == '__main__的理解的更多相关文章

  1. 魔力Python--if __name__ == '__main__' 的理解

    if __name__ == '__main__' 的理解 __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ . 这句话的意思就是,当模块被直接运行时,以下代码块将被运行, ...

  2. Python中if __name__ == "__main__": 的理解

    1.在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在pytho ...

  3. Python中if __name__ = "__main__"的理解

    通俗的理解__name__ ="__main__"的意思就是:当.py文件被直接运行时,if __name__ = "__main__"之下的代码快将被运行:当 ...

  4. python对 if __name__=='__main__'的理解

    对于学过其他编程语言的人来说都知道程序都是从main函数开始执行的,而对于python来说他并没有主函数,他不像其他语言需要需要转化为二进制文件 然后才能执行,他时通过翻译器从第一行开始逐行执行,所以 ...

  5. python if __name__=='__main__'的理解

    定义一个模块叫module.py: def main(): print "we are in %s" %__name__ if __name__=='__main__': main ...

  6. 关于__name__=='__main__'的理解

    一.总的来说,如果__name__=='__main__'成立,表示当前模块就是主程序, 如果__name__=='__main__'不成立,表示当前模块是被导入到某个模块中的,而此时__name__ ...

  7. 【疑难杂症】if __name__ == '__main__'的理解

    今天进行小批量梯度下降时,代码给我报错,具体代码如下 import torch import numpy as np from torch.utils.data import Dataset from ...

  8. 如何简单地理解Python中的if __name__ == '__main__'

    https://blog.csdn.net/yjk13703623757/article/details/77918633 1. 摘要 通俗的理解__name__ == '__main__':假如你叫 ...

  9. 理解 if __name__ == '__main__'

    简单地理解Python中的if __name__ == '__main__' if __name__ == '__main__'的意思是: 当.py文件被直接运行时,if __name__ == '_ ...

随机推荐

  1. Redux DevTools浏览器插件调试redux

    与redux的Devtools模块不同,该工具主要依赖浏览器插件完成.模式也比Devtools简单点. redux-devtools 是一个非常棒的工具,它可以让你实时的监控Redux的状态树的Sto ...

  2. jq控制select值为某个时选中

    $("#selectche_type option").each(function(){//用id ,用class好像不得,不知道为何 alert(2) if($(this).va ...

  3. java中excel导入\导出工具类

    1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...

  4. create-react-app之Invalid Host Header

    [create-react-app之Invalid Host Header] 1.When you enable the `proxy` option, you opt into a more str ...

  5. Nodejs this详解

    [Nodejs this详解] Nodejs中, 文件层this,指向的是module.export. 函数层this,指向的是global对象. 参考:http://www.jb51.net/art ...

  6. 解题5(StringMerge1)

    题目描述 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串 ...

  7. Java volatile关键字的用法

    volatile不能解决同步问题 如果想要理解volatile关键字的作用不得不先了解Java内存模型 摘抄一下来自百度百科的话 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把 ...

  8. pta l3-1(凑零钱)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054207279104 题意:给定n枚硬币的面值,需要支付 ...

  9. 测试--错误java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=select], {ExactMatcher:fDisplayName=select(com.rjj.demo.DemoApplicationTests)]...

    异常这个错误java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=select], {ExactMatche ...

  10. GIRDVIEW 控件绑定数据后 后台c#控制隐藏某列

    gv_EnterpriseInfo.DataSource = pageResult.Data; gv_EnterpriseInfo.DataBind(); 之后加判断条件: if (true) { g ...