zoukankan      html  css  js  c++  java
  • ~~面向对象进阶(二):__name__=="__main__"~~

    进击のpython

    *****

    面向对象进阶——__name__=="__main__"


    前面我们在讲模块的时候,其实还有一个知识点没有很好的讲

    那就是main和name

    可能你们在看一些代码的时候或多或少的都会见到下面的这串代码

    if __name__ == '__main__':
        func()
    

    但是百思不得其解,这行代码到底是什么意思呢?


    问题的解决都是一点一点来的

    我们先打印这个__name__

    看看是啥!

    __main__
    

    可以看到打印出来的就是__main__

    熬,那就是说这个代码是恒成立的

    那我要这个代码有什么用呢?

    还记得我们在说模块的时候说过

    一个py文件就可以看作是一个模块是吧

    那我这个文件是不是可以叫做模块啊

    是不是可以被新的文件调用啊

    那我们简单的丰富一下这个文件里面的代码

    print("这是在if上面的语句")
    print(__main__)
    if __name__ == '__main__':
        print("这是在if下面的语句")
    

    我们现在先在这个文件下运行,查看一下结果

    这是在if上面的语句
    __main__
    这是在if下面的语句
    

    然后我们把这个文件(fesa.py)当作模块

    在别的文件下进行调用

    结果如下:

    这是在if上面的语句
    fesa
    

    我们可以看到,这个结果是不一样的

    __name__的打印结果变成了模块的名字

    而且,在if下面的语句也没有被执行

    其实也很能理解,因为__name__变了

    就不再等于__main__了

    没有满足条件,当然就不会执行if下面的语句啦


    其实,我们在面向对象的时候知道

    self其实是实例本身对吧

    那么__main__就可以理解成模块本身

    (只能这么理解,但是实际不是这样的)

    我们学过sys模块

    我们可以用sys模块来简单的展示一下

    import sys
    
    for k, v in sys.modules.items():
        print(k, v)
    

    打印出来的结果有,但是你能在这么多的打印数据当中找到

    __main__ <module '__main__' from 'D:/xiangmu/asdfg.py'>
    

    看到了吗?

    这个__main__的值,其实就是这个模块本身

    所以总结一下:

    • 在自己的py文件里执行的时候,这句代码其实没有什么用,正常的执行
    • 在被当成模块调用的时候,只执行这句话上面的代码

    但是这玩仍有什么用呢?

    其实除了上面的作用以外

    还有别的操作!

    我要是想导入一个模块

    是不是这么写

    import time
    

    我要是把time写成字符串是不是不行

    那我要是想根据用户的输入来导入模块怎么写呢?

    那要是用户输入,是不是输入的就是一个字符串?

    直接写肯定是不行的

    在解释器里给我们提供了这种方法

    __import__("time")
    

    但是像这种魔法方法啊

    一般是不推荐使用的

    所以除了这种方法,我们还有另一个方法


    python官方给我们推荐了另一种方法

    import importlib
    
    importlib.import_module()
    

    这个方法里面会添加两个参数

    一个是函数名,另一个没什么用,暂时不用记

    里面写的是个字符串类型的

    当然这个是调用本路径的

    要是调用别的路径的就是

    文件名.方法


    *有点东西*
    *继续深究*
  • 相关阅读:
    SQL Server 2014忘记SA密码或禁用而且Windows身份验证也无法登录的解决办法
    深入解密.NET(Tuple元祖)
    DbContext 和 ObjectContext两者的区别
    开源的监控软件
    进程kswapd0与events/0消耗大量CPU的问题
    loadrunner---<二>---菜鸟对cookie的思考
    替换linux下的rm命令,并对-rf进行判断
    linux下恢复误删除的文件方法(ext2及ext3)
    oracle闪回使用以及删除存储过程恢复
    eclipse中新建maven项目-转
  • 原文地址:https://www.cnblogs.com/jevious/p/11259976.html
Copyright © 2011-2022 走看看