zoukankan      html  css  js  c++  java
  • 1- 探究细节

    import导入模块

    1. import 搜索路径

    import sys
    sys.path
    

    路径搜索

    • 从上面列出的目录里依次查找要导入的模块文件

    • ' ' 表示当前路径

    程序执行时导入模块路径
    sys.path.append('/home/itcast/xxx')
    sys.path.insert(0, '/home/itcast/xxx')    #可以确保先搜索这个路径
    

    2. 重新导入模块

    模块被导入后,import module不能重新导入模块,重新导入需用

    测试模块内容 

    调用模块中的方法

     

    修改测试模块 

    重新加载模块 

    作用域

    什么是命名空间

    随便喊一声“美女”,看看有多少人回头

    比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间

    test.py

    num = 200
    def print_num():
        print("----print_num func, num=%d----"%num)
    

    main.py 

    from test import *
    num = 100
    
    def print_num2():
        print("----print_num2 func, num=%d----"%num)
    
    print_num()#调用test命名空间中的print_num函数,它会使用test命名空间中的全局变量
    print_num2()#调用当前命名空间中print_num2函数,它会使用当前命名空间中的全局变量

     运行python3 main.py结果如下:

    ----print_num func, num=200----
    ----print_num2 func, num=100----
    

      

    globals、locals

     在之前学习变量的作用域时,经常会提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域

    locals

     globals

    ==、is

    >>> a = 1000
    >>> b = 1000
    >>> a == b
    True
    >>> a is b
    False

     

    总结

    • is 是比较两个引用是否指向了同一个对象(引用比较)。
    • == 是比较两个对象的值是否相等(值比较)。

    对象值比较(==)的定义

    View Code

    定义__eq__方法,重新实现==比较方法

    View Code

    深拷贝、浅拷贝

    1. 浅拷贝 copy.copy

    • 浅拷贝是对于一个对象的顶层拷贝

    通俗的理解是:拷贝了引用,并没有拷贝内容

    2. 深拷贝 copy.deepcopy

    • 深拷贝是对于一个对象所有层次的拷贝(递归)

     

    3. 注意点

    浅拷贝对不可变类型和可变类型的copy不同

     使用copy模块功能的时候,它会根据当前拷贝的数据类型是可变类型,还是不可变类型,有不同的处理方式。

    View Code

    对于可变类型(列表)第一层相当于深拷贝独立开辟内存

    对于不可变类型(元祖),就是浅拷贝,直接复制的是引用地址 

    4. 拷贝的其他方式

    • 分片表达式可以赋值一个序列
    a = "abc"
    
    b = a[:]
    • 字典的copy方法可以拷贝一个字典
    d = dict(name="zhangsan", age=27)
    
    co = d.copy()
    • 有些内置函数可以生成拷贝(list)
        a = list(range(10))
    
        b = list(a)
    • copy模块中的copy函数
        import copy
    
        a = (1,2,3)
    
        b = copy.copy(a)
  • 相关阅读:
    源码学习之Yii-去掉magic_quote里的反斜线
    PHP中传递回调函数的方法
    mac里的terminal环境下如何跳转行首和行末
    mac下切换输入法
    nginx上配置vhosts
    MySQL学习之查询优化(一)
    MySQL学习之索引(三)
    在LINUX下为自己加上sudo权限的方法
    MySQL学习之索引(二)
    MySQL学习之索引(一)
  • 原文地址:https://www.cnblogs.com/zhangyangcheng/p/8150179.html
Copyright © 2011-2022 走看看