zoukankan      html  css  js  c++  java
  • 模块

    模块

    此章详细地址 http://www.cnblogs.com/Eva-J/articles/7292109.html#_label2

    模块导入相当于执行了模块里面的代码

    导入sys模块通过path与modules来查询模块的可以导入的路径和是否导入了此模块

    print(sys.modules.keys()) 查看导入和内置模块

    在模块中 有一个变量__name__,
    当我们直接执行这个模块的时候,__name__ == '__main__'当我们执行其他模块,在其他模块中引用这个模块的时候,这个模块中的__name__ == '模块的名字'

    模块的导入

    同时导入两种但操作步骤一样

    if 'shujuku' == 'demo':
        import demo as f
    elif 'shujuku'=='demo1':
        import demo1 as f
    f.read1()
    from time import sleep
    sleep(5)#此时由于导入的方法,所以不用加上前缀,time.sleep()

    模块的导入的变量冲突

    print('from the my_module.py')
    money=1000
    
    def read1():
        print('my_module->read1->money',money)
    
    def read2():
        print('my_module->read2 calling read1')
        read1()
    
    def change():
        global money
        money=0

    这是我定义的一个demo模块

    然后在主界面上执行下面的代码

    from demo import money,read1
    print(money)#from the my_module.py 1000
    money = 20#
    print(money)#20
    read1()#my_module->read1->money 1000

    可以看出当变量重定义是,变量就改变了,但是模块内的的变量例如read1()的money值始终没有变,用为此时money是一个始终不变的的内存地址

    from demo import *

    这段代码表示把所有的变量,函数都导入进来了,同时执行里面的代码。但是不推荐,因为你不知道里面的变量的具体情况

    同理覆盖函数覆盖效果

    from my_module import read1
    def read1():
        print('==========')
    read1()
    '''
    执行结果:
    from the my_module.py
    ==========
    '''

    如果在模块中加入__all__=[函数名,变量],则用from demo import *是只导入[]中的数据,而不导入其他变量

    __name__的用法

    __name__主要查看的是当前py文件的名字,当py文件独立运行的时候,而自己的文件里面有print(__name__)时,便会打印出当前的文件名,如果py文件里面import了模块时,模块里面也有单独执行print(__name__)便会打印出模块的名字,利用这个便可以实现被当做模块式会不执行某些代码,而独立运行时便会执行某些代码。下面请看代码。

    #假如这段代码既可以独立执行,但也可以被当做模块文件名是demo
    def fib(n): a, b
    = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() if __name__ == "__main__": #如果独立运行时__name__的输出结果为__main__,及运行以下代码
                          #如果被当做模块运行时__name__的输出变为demo 及!= __main__便会不执行以下代码 print(__name__) num
    = input('num :') fib(int(num))

     模块的总结

    所有的模块导入都应该尽量往上写
    内置模块
    扩展模块
    自定义模块
    模块不会重复被导入 : sys.moudles
    从哪儿导入模块 : sys.path
    import
    import 模块名
    模块名.变量名 和本文件中的变量名完全不冲突
    import 模块名 as 重命名的模块名 : 提高代码的兼容性
    import 模块1,模块2

    from import
    from 模块名 import 变量名
    直接使用 变量名 就可以完成操作
    如果本文件中有相同的变量名会发生冲突
    from 模块名 import 变量名字 as 重命名变量名
    from 模块名 import 变量名1,变量名2
    from 模块名 import *
    将模块中的所有变量名都放到内存中
    如果本文件中有相同的变量名会发生冲突
    from 模块名 import * 和 __all__ 是一对
    没有这个变量,就会导入所有的名字
    如果有all 只导入all列表中的名字
    __name__
    在模块中 有一个变量__name__,
    当我们直接执行这个模块的时候,__name__ == '__main__'
    当我们执行其他模块,在其他模块中引用这个模块的时候,这个模块中的__name__ == '模块的名字'
  • 相关阅读:
    linux rar安装
    ce
    Hp培训学习注册攻略
    Novell云计算
    bigdata
    Quest *nix Xwindows
    Foglight 5.6.7 控制台jboss报404
    view
    架构-数据库访问-SQL语言进行连接数据库服务器-DB-Library:DB-Library
    架构-数据库访问-SQL语言进行连接数据库服务器:SQL语言进行连接数据库服务器
  • 原文地址:https://www.cnblogs.com/accolade/p/10488760.html
Copyright © 2011-2022 走看看