Python高级编程(更新中...)

107 阅读1分钟

5 python中的浅拷贝和深拷贝

浅拷贝只拷贝容器本身,对集合和字典可变部分只是引用,当修改是会有影响,下面参考代码如下

import copy

list1=[1,2,[3,4]]
list2=copy.copy(list1)
list3=copy.deepcopy(list1)

list1[0]=5
list1[2][0]=6

print(list1)
print(list2)
print(list3)

输出结果如下:

[5, 2, [6, 4]]
[1, 2, [6, 4]]
[1, 2, [3, 4]]

6 线程的顺序

线程打印本身无序,除非加上 join

import threading
import time
import logging

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(threadName)s - %(message)s')

def work(num):
    logging.debug(f"Working {num} starting...")
    time.sleep(1)
    logging.debug(f"Working {num} end.")

if __name__ == '__main__':
    threads =[]
    for i in range(5):
        t = threading.Thread(target=work, args=(i,))
        t.start()
        t.join()

7 函数的闭包

目的是防止环境变量污染

outer返回的是Inner方法,但是inner方法又记住了outer传递的不可变变量,则保证了方法调用的安全

    def inner(y):
        return x+y
    return inner

if __name__ == '__main__':
    demo=outer(10)
    print(demo(2))

输出结果为12, 10