Python高级----列表推导式、拷贝、装饰器

2018-08-26  本文已影响0人  Alice丨殇

列表推导式

所谓的列表推导式,就是指的轻量级循环创建列表

基本方法(一个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 arg

ret = show4("老王")
print(ret)
上一篇 下一篇

猜你喜欢

热点阅读