列表推导式
所谓的列表推导式,就是指的轻量级循环创建列表
基本方法(一个for循环)
image.png
在循环中加if
image.png
两个for循环
image.png
三个for循环
image.png
深拷贝和浅拷贝
copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy 深拷贝 拷贝对象及其子对象
import copy
>>> a = [1,2,3,4,['a','b']] #定义一个列表a
>>> b = a #赋值
>>> c = copy.copy(a) #浅拷贝
>>> d = copy.deepcopy(a) #深拷贝
>>> a.append(5)
>>> print(a)
[1, 2, 3, 4, ['a', 'b'], 5] #a添加一个元素5
>>> print(b)
[1, 2, 3, 4, ['a', 'b'], 5] #b跟着添加一个元素5
>>> print(c)
[1, 2, 3, 4, ['a', 'b']] #c保持不变
>>> print(d)
[1, 2, 3, 4, ['a', 'b']] #d保持不变
>>> a[4].append('c')
>>> print(a)
[1, 2, 3, 4, ['a', 'b', 'c'], 5] #a中的list(即a[4])添加一个元素c
>>> print(b)
[1, 2, 3, 4, ['a', 'b', 'c'], 5] #b跟着添加一个元素c
>>> print(c)
[1, 2, 3, 4, ['a', 'b', 'c']] #c跟着添加一个元素c
>>> print(d)
[1, 2, 3, 4, ['a', 'b']] #d保持不变
#说明如下:
#1.外层添加元素时, 浅拷贝c不会随原列表a变化而变化;内层list添加元素时,浅拷贝c才会变化。
#2.无论原列表a如何变化,深拷贝d都保持不变。
#3.赋值对象随着原列表一起变化
装饰器
装饰器是程序开发中经常会用到的一个功能,所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数。
pyrhon3写代码要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:
-
封闭:已实现的功能代码块
-
开放:对扩展开发
def w1(fun):#通用装饰器
def inner(*args,**kwargs):
print(“装饰中”)
return fun(*args,**kwargs)
return inner@w1 #相当于show1 = w1(show1)
def show1():
print(“哈哈”)@w1
def show2(arg):
print(“哈哈哈”)
print(arg)@w1
def show3():
print(“哈哈哈哈哈”)
return “呵呵呵”@w1
def show4(arg):
print(“哈哈哈哈哈哈哈哈哈”)
return argret = show4(“老王”)
print(ret)