python进阶

枚举

from enum import Enum
class VIP(Enum):
	YELLOW = 1
	YELLOW_ALIAS = 1   #是YELLOW的别名
	BLACK = 2
	RED = 4
for vip in VIP:
    print(vip.name)
for vip in VIP.__members__:#打印包括别名的所有内容
    print(vip)
print(VIP(1))    #VIP.YELLOW   通过值来获取枚举类型

控制枚举不能定义别名,即不能定义值相同的枚举类型

from enum import IntEnum,unique
@unique
class VIP(IntEnum):
	YELLOW = 1
	YELLOW_ALIAS = 1   #是YELLOW的别名
	BLACK = 2
	RED = 4
print(VIP(1))
#提示报错

函数式变成

闭包 =函数+环境变量(函数定义时候)

如下代码,把curve_pre的结果返回给f,即,返回了curve方法,但是不仅仅是返回了curve方法,而是连同它所在的环境(a=10)一起返回了。这就是闭包。

如果再curve方法中改变a的值,那么就不能再称之为闭包了

def curve_pre():
    a = 10
    def curve(x):
        return a*x
    return curve
a = 2
f = curve_pre()
print(f.__closure__)  #打印闭包
print(f(2));
用闭包实现走路
x = 0
def wark_pre(x):
    def wark(step):
        nonlocal x
        new_x = x + step
        x = new_x
        return new_x
    return wark
f = wark_pre(x)
print(f(2))
print(f(3))
print(f(2))

匿名函数

用lambda来定义匿名函数

def add(x,y):
	return x+y
add(1,2)
f = lambda x,y:x+y
f(1,2)

map

第一个参数是方法,第二个参数是传的参数

list_x = [1,2,3,5,6,7,87]
def getData(x):
    return x*x
r = map(getData,list_x)
print(list(r))
# [1, 4, 9, 25, 36, 49, 7569]

使用匿名函数来简化如上功能

list_x = [1,2,3,5,6,7,87]
r = map(lambda x:x*x,list_x)
print(list(r))

也可以传递多个参数,但是最终的结果只会取交集

list_x = [1,2,3,5,6,7,87]
list_y = [1,2,4,5]
r = map(lambda x,y:x*x+y,list_x,list_y)
print(list(r))

reduce

计算顺序如下:(((1+2)+3)+4)+5

from functools import reduce
 # 连续计算,连续调用lambda
list_x = [1,2,3,4,5,6,67]
r = reduce(lambda x,y:x+y,list_x)
print(r)

filter

过滤函数,过滤掉不满足条件的数据,返回一条新的数据

list_x = [1,0,1,1,1,0,2,3]
r = filter(lambda x:True if x == 1 else False,list_x)
print(list(r))
#[1, 1, 1, 1]

装饰器

下面的*args指的是定义一个可变参数,这样,这个装饰器就可以用于不同参数列表的方法了
下面的**kw是用来满足关键字参数的传参情况的,这样就可以满足所有的情况了

import time
def showTime(func):
    def showNowTime(*args,**kw):
        print(time.time())
        func(*args,**kw)
    return showNowTime

@showTime
def showData():
    print('王梦同牛逼!')
@showTime
def showData2(func_name1):
    print('王梦同牛逼!')
@showTime
def showData3(func_name1,func_name2,**kw):
    print('王梦同牛逼!')
showData()
#1543508028.8441682
#王梦同牛逼!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值