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)
  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/zhangyangcheng/p/8150179.html
Copyright © 2011-2022 走看看