zoukankan      html  css  js  c++  java
  • import module与from module import * 两种模块导入有何区别

    #原创,转载请留言联系

    • 区别1

    import module 引用共享变量时,要使用module.变量名。

    而from module import * 直接使用变量名即可

    • 区别2(有点绕)

    import module方式操作module的变量时,本地不会创建新变量,操作的是目标模块的变量!

    from module import *方式操作module变量时,实质上是在本地创建一个与目标模块相同的变量名,并且默认与目标模块变量指向同一个内存空间。

    看似功能一样,但是在开发中稍不注意可能会排bug排到头皮发麻!

    用一个小示例说明!

    先建立一个module.py,里面就一个公共变量,a = []。

    然后我们用import module方式先操作module的变量,再打印,看下有没变化。

    import module
    module.a = [1,2,3]
    print(module.a)
    
    from module import a
    print(a)
    
    输出:
    [1, 2, 3]
    [1, 2, 3]

    看似很平常,正常操作,但是,继续看!

    from module import a
    a = [1,2,3]
    print(a)
    
    import module
    print(module.a)
    
    输出:
    [1, 2, 3]  # 结果不同了!
    []

    怎么调一下位置,就输出不一样了?

    因为!from module import 方式是自己创建了一个自己的变量a指向module.a的内存空间。当执行命令a = [1,2,3]时,变量a赋值了,重新分配了内存空间。并不是module文件里的a变量重新分配空间,所以odule文件里的a变量的值没有变化!

    而import module方式是操作module文件里面a的变量,即使进行了赋值,重新分配了内存空间,但是他还是module里面的变量。所以当别人导入module的时候,module.a的值就是[1,2,3]了!

    *建议!开发中,如果有操作公共变量的情况,一定要全部都用import module方式!

  • 相关阅读:
    WebService-01-使用jdk发布第一个WebService服务并调用
    Oracle触发器
    java调用存储过程、存储函数
    存储过程/存储函数
    SQL查询排名第二名的信息
    sql行转列
    SELECT列表中的标量子查询
    sql子查询在insert、update、delete中的应用
    sqlserver存储过程中,set rowcount 0是什么意思?
    固态硬盘安装系统
  • 原文地址:https://www.cnblogs.com/chichung/p/9610500.html
Copyright © 2011-2022 走看看