重新导入模块
若要讲新增测试内容运行成功,可以使用reload()函数重新加载模块。
reload(module) 用于重新载入之前载入的模块,参数 module 为之前载入的模块名。
在python3中,reload()是在imp模块中
循环导入模块
在某一个模块中调用另一个模块中的函数,且在另一个模块中也调用该模块中的函数。要避免出现此列问题,需要注意:
(1)在程序设计思路上进行分层(分包),用以降低耦合;
(2)推荐单独写一个综合类(六大原则–单一职责(职责扩散)),用以调用不同模块中的不同函数。
浅拷贝与深拷贝
在 Python 中,浅拷贝指的是拷贝一个对象时,仅仅将该对象的引用(id())进行拷贝,但是拷贝对象和源对象还是引用同一个地址。此时,其中任意一个对象的改变都会影响到另一对象,如某人刚开始叫张三,后来由于某种原因改名为张小三了,可是张三与张小三还是同一个人,不管是张三缺胳膊,还是张小三少腿,都体现在同一个人身上。因此,在这儿可以简单的理解为浅拷贝即是对一个对象的顶层拷贝,通俗的理解就是只拷贝了引用,而并没有拷贝内容。
深拷贝
在 Python 中,深拷贝指的是拷贝一个对象时,不仅把对象的引用进行复制,还会拷贝该对象的值。因此,进行深拷贝后的对象与源对象是互相独立的,其中任意一个对象的改动都不会对另一对象形成影响,如某人名叫老王,然后使用克隆技术以老王的细胞来 克隆出另一个人叫李四,这样老王和李四就是相互独立存在的,不管老王缺胳膊还是李四少腿了都不会影响到对方。通俗的说,深拷贝就是对一个对象中所有层次的拷贝,即既拷贝了引用,也拷贝了内容。
# coding:utf-8
import copy
a=[1,2,3]
print(a)
print("a的id值为:%d"%id(a))
print("-----------------")
#深拷贝
blist=copy.deepcopy(a)
print(blist)
print("blist的id值为:%d"%id(blist))
print("-----------------")
a.append(4) #a添加了4
print(a)
print("a的id值为:%d"%id(a))
print("---------------")
print(blist)
print("blist的id值为:%d"%id(blist))
通俗地说,深拷贝与浅拷贝指的是对某个对象拷贝的多与少,即浅拷贝是拷贝的内容少(只拷贝了引用)、深拷贝是拷贝的内容多(既拷贝了引用,也拷贝了内容)。
copy(t) 拷贝父对象,不会拷贝对象的内部的子对象。
1.可变类型的copy()
# coding:utf-8
import copy
a=[1,2,3]
print(a)
print("a的id值为:%d"%id(a))
print("-----------------")
blist=copy.copy(a)
print(blist)
print("blist的id值为:%d"%id(blist))
print("------改变a的值-----------")
a.append(4) #a添加了4
print(a)
print("a的id值为:%d"%id(a))
print("---------------")
print(blist)
print("blist的id值为:%d"%id(blist))
通过copy()函数拷贝可变类型对象特别类似于deepcopy()函数拷贝对象时的效果
2.不可变类型的copy()
元组
copy()函数拷贝不可变类型的对象后的 id 值是相同的
3. 比 对比 copy() 、 deepcopy() 的区别
①deepcopy()拷贝(完全拷贝),既拷贝了父对象,又拷贝了子对象; [[ ],[],…]
②copy()拷贝(部分拷贝),只拷贝父对象,而不拷贝子对象。
copy()拷贝父对象,不会拷贝对象的内部的子对象
globals() 成员变量
想查看python解释器中有哪些成员变量,可以使用globals()函数查看
locals() 局部变量
若在某个函数中定义几个局部变量后,需要一次性输出所有的变量,此时,就可以使用 locals()函数来查看
# coding:utf-8
def show():
a=1
b="haha"
#所有局部变量输出
print(locals())
if __name__=="__main__":
show()
LEGB规则
在 Python 中,通常是使用 LEGB 规则的顺序来查找一个标识符所对应的内容值,所谓“LEGB 规则”,指的就
是下列内容的首字母缩写,LEGB 规则的顺序如下:
Locals -->Enclosing function(闭)–>Globals–>Builtins
builtins
当 Python 解释器在启动时,会自动载入很多内建函数、类,如 dict()、list()、str()、type、print 等,这些都位于__builtin__模块中,此时可以使dir(builtins)来查看
== 与 is
比较的是内容,还是内存地址值。 --使用==比较的是内容;使用 is 比较的是内存地址值(引用)
冒泡排序
冒泡排序,通俗地说,即是每轮比较,大的元素往后挪,比较完第一轮后,最大的元素排到了列表的最后一位(以从小到大数值进行排序);
a = [8, 4, 1, 5, 2, 6, 3, 7] j=0 while ja[i+1]: temp = a[i] a[i] = a[i+1] a[i+1] = temp i += 1 j+=1 print(a)
选择排序
固定第一个位置的数,默认就是最小的,然后依次与后边的所有数进行比较!(从小到大顺序)
a = [8, 4, 1, 5, 2, 6, 3, 7] j=0 while ja[i]: temp = a[j] a[j] = a[i] a[i] = temp i += 1 j+=1 print(a)



