• python基础--导入模块


    一,import的使用
    1, 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块中的功能
    一个模块就是包含了一组功能的python文件,例如demo.py 可以通过import
    来使用这个文件
    定义demo模块如下
    print("导入模块")
    num = 1000
    def read1():
        print('demo模块',num)
    def read2():
        print('demo模块')
        read1()
    def change():
        global num
        num = 0
    模块中可以包含语句和函数,(我们平时写的.py文件就是),只在第一次导入的
    时候执行模块里的内容
    import demo
    import demo
    会输出:导入模块(一次)
    2,第一次导入模块会做的三件事
    1,为源文件创建新的名称空间(作用域),
    2,执行源文件模块中所包含的代码
    3,创建demo变量来指向该空间
    ps:每次导入之前会检查内存中是否存在这个模块,若存在,不做反应
    不存在,执行上述步骤
    3,导入模块的作用域跟现有作用域不同
    def read1():
        print("hahaha")
    demo.read1() # demo模块 1000
    read1() # hahaha
    # 模块中的函数跟当前函数不在同一个作用域中,因此不冲突
    # 同理,变量也是一样的
    4,可以为模块起名字,
    import demo as do
    5,可以一行导入多个模块
    import demo,os,time二,from ... import ... 的使用
    1,from demo import read1
    2,区别:使用from ... import ...是将要导入的函数直接导入进当前的作用域,
    所以在当前的名称空间中,直接使用名字就可以了,不用加前缀:demo
    相当于在当前文件定义了一个read1函数,这就导致了,此时如果我们也有read1函数,
    会导致覆盖。
    3,也可以使用as
    4,也可以一行导入多个模块
    5 from demo import *
    把demo中所有的不是以下划线_开头的名字都导入到当前位置
    不推荐使用,因为你不知道demo模块中会有什么变量,是否会将你的
    变量函数覆盖。
    6,模块循环导入问题
     m1.py 的内容
     print('导入m1')
     from m2 import y
     x='m1'
    
     m2.py文件的内容
     print('导入m2')
     from m1 import x
     y='m2'
    
     run.py文件内容
     import m1
    执行run会报错
    导入m1
    Traceback (most recent call last):
    导入m2
      File "C:/Users/王聪/PycharmProjects/8月/python基础/模块测试/run.py", line 1, in <module>
        import m1
      File "C:Users王聪PycharmProjects8月python基础模块测试m1.py", line 2, in <module>
        from m2 import y
      File "C:Users王聪PycharmProjects8月python基础模块测试m2.py", line 2, in <module>
        from m1 import x
    ImportError: cannot import name 'x' from 'm1' (C:Users王聪PycharmProjects8月python基础模块测试m1.py)
    我们来看run的执行过程:导入m1-执行m1-打印m1-导入m2-打印m2-导入m1-但此时m1已经导入了,没有发现x:报错
    执行m1也会报错
    来看m1的执行过程:打印m1-导入m2-执行m2-打印m2-导入m1-(此时m1还没有导入)打印m1-导入m2(但此时m2已经导入)
    没有发现 y :报错
    我们可以得知:执行模块并不是导入模块
    修改
    print('导入m1')
    x='m1'
    from m2 import y
  • 相关阅读:
    webshell
    FireFox与IE开发上的一些区别
    面向对象的Jscript(顶)
    CSS背景属性
    [转]javascript中style.left和offsetLeft的使用
    BLOG排版小窍门
    面向对象的JavaScript编程
    Js脚本:动态添加HTML自定义属性以及处理html元素的自定义属性(兼容Firefox和IE)
    lookupedit 设置选项值
    comboboxEdit 不能输入,只能选择
  • 原文地址:https://www.cnblogs.com/cong12586/p/11359518.html
Copyright © 2020-2023  润新知