python列表生成式内必须定义匿名函数_Python3匿名函数字典排序、生成式与生成器、装饰器简介...

1. 参数匿名函数字典排序

函数的参数:

参数类型:

我们经常在看别人的代码中,经常出现def(*args,**kwargs)这样的表现形式;

*args tuple(1,)

**kwargs dict{"k" : "v"}

fun(*args,**keargs)

fun(1,2,3,4,5,a=10,b=40)

匿名函数:

匿名函数的定义:

顾名思义就是没有名字的函数,那为什么要设立匿名函数,他有什么作用?

lambda函数是一种快速付款定义机器智能单行的最小函数,可以用在任何需要函数的地方.

def fun(x,y)

return x*y

lambda方法:

r=lambda x,y:x*y

ss求绝对值(abs)

高阶函数:

map(f,list) 返回每个元素通过结果计算完的value的list

def f(x):

return x*x

map(f,[1,2,3,4,5])

reduce(f,[1,2,3,4,5])

filter(lamdba x:x%2 == 1,[1,2,3,4,5])

sorted函数:

sorted(...)

sorted(iterable,cmp=None,key=None,reverse=False) -->new sorted list

对字典进行排序:

按照value进行排序:

mm = dict(a=1,b=10,c=3,d=9)

print sorted(mm.iteritems(),key = lamdba d:d[1],reverse = True)

#/usr/bin/env python

# -*- coding:utf-8 -*-

# @time :2018/1/28 18:55

# @Author :FengXiaoqing

# @file :dicSort.py

def sortDictValue(dict1):

print(sorted(dict1.items(),key=lambda d:d[1],reverse=False))

if __name__ == '__main__':

aaa = dict(a=100,b=10,c=50,d=1)

l = list()

l = sortDictValue(aaa)

print(l)

print(sortDictValue(l))

2. 生成式和生成器

列表生成式格式:

[exp for val in collection if condition]

[x*x for x in xrange(10) if x*x%2 == 0]

生成器(generator):

方法一:

(exp for val in collection if condition)

方法二:

使用yield关键字,包含yield语句的函数会被特地编译成生成器。

yield可以理解力成return,但是并不退出,只是挂起,恢复的时候从yield下面开始执行。

生成式和生成器的区别:

列表显示生成式直接返回了表达式的结果列表,面生成器是一个对象,该对象包含了对表达式结果的计算引用,通过结果循环可以直接选举输出

生成器不会一次性列出所有的数据,当然你用到的时候,在列出来,更加节约内存的使用率。

类似 range(1,10) xrange(1,10)的区别,但是类型却不同。

#/usr/bin/env python

# -*- coding:utf-8 -*-

# @time :2018/1/28 22:34

# @Author :FengXiaoqing

# @file :production.py

a = [x*x for x in range(1,11) if x%2 ==0]

print (a)

print(type(a))

b = (x*x for x in range(1,11) if x%2 ==0)

print (b)

print(type(b))

for i in b:

print(i)

print('#'*20)

def test(l):

for i in l:

yield i

print("OK i = {0}".format(i))

m = test([1,2,3,4,5,6])

for i in m:

print(i)

结果:

[4, 16, 36, 64, 100]

at 0x0000000002160D00>

4

16

36

64

100

####################

1

OK i = 1

2

OK i = 2

3

OK i = 3

4

OK i = 4

5

OK i = 5

6

OK i = 6

3. 装饰器

装饰器的作用:

装饰器本质上是一个python函数,它可以让其他工具函数在不需要做任何代码变动的前提下增加额外功能 ,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能 本身无关的雷同代码并继续重用。

装饰器的作用简单点说:就是不改变 原来函数本身,在函数的前面或后面增加一些额外的功能 。

场景:京东购物,放入购物车后在结算前弹出的让你登录用户的窗口。

装饰器:

在了解装饰器之前 ,我们先来了解一个callable函数

说明:

1.方法用来检测对象是否可被调用 ,可被调用 批量的是对象测否使用()括号的方法调用 。

def a():

pass

callable(a)

2.可调用 对象,在实际调用 也可测调用 失败;但是不可调用 对象,调用 肯定不成功。

3.类对象都 是可被调用 对象,类的实例对象是否可调用 对象,取决于类是否定义了call方法

装饰器例子:

#!/usr/bin/env python

import datetime

def hellow(fun):

def preHello():

print("########start##########“)

fun()

print("########end###########“)

return preHello

原有方法:

def startend(func):

def start():

print("#########start#############")

func()

print("#########end#############")

return start

def hello():

print("hello world!")

hello = startend(hello)

hello()

改进后的使用方法:

def startend(func):

def start():

print("#########start#############")

func()

print("#########end#############")

return start

@startend

def hello():

print("hello world!")

hello()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值