python 高阶函数和匿名函数

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time   : 2017/11/02 22:46
# @Author : lijunjiang
# @File   : function2.py

"""
高阶函数

   就是把函数当成参数传递的一种函数
"""


def func1(x, y, f):
    return f(x) + f(y)


print(func1(-8, 11, abs))


# 执行结果:19
# 分析:abs() 求一个数的绝对值 -8传递给形参x, 11 传递给y , f接收一个函数,传入的为函数abs()
#      函数func1返回 x的绝对值和y绝对值的和

# 常用的内置高阶函数

# map(function, list) 函数
# 接收一个函数和一个List, 把List中的元素及依次传递给function,然后返回一个被function处理完所有List元素的列表

def func2(x):
    return (x * x)


l = [1, 2, 3, 4, 5, 6]
print(map(func2, l))


# 执行结果:[1, 4, 9, 16, 25, 36]
# 把列表l 中的元素传入函数func2中,求每个元素的平方,把每个元素的计算结果合并在一个列表,做为返回值

# reduce(function, sequence) 函数
# 返回一个值. 首先以序列的前两个元素调用函数function,再以返回值和第三个元素调用,依次执行下去

def func3(x, y):
    return (x + y)


sum = reduce(func3, xrange(1, 11))
print(sum)


# 执行结果:55
# 计算1-10的和

# filter(function, seqence) 函数
# 返回一个列表。包括给定的序列中所有调用function后返回值为True的元素
# sqqence是一个str或tuple,返回值必定是同一类型,否则,总是返回一个List

# 求给定序列中可以被3整除或被5整除的数
def func4(x):
    return (x % 3 == 0 or x % 5 == 0)


L = filter(func4, xrange(1, 26))
print(L)
# 执行结果:[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24, 25]


"""
匿名函数
不显示的声明函数,可直接传入
例: lambda x;x * x
以lambda关键字表示匿名函数,冒号前面的x表示函数的参数 x*x 等价于 def f(x):return(x * x)
只能有一个表达式,不用写return,返回值就是该表达示的结果
没有函数名,不必担心函数名冲突,但只能在当前调用
匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,利用变量来调用该函数
"""

f = lambda x: x * x
print(type(f))
print(f(6))


# 执行结果:
# <type 'function'>
# 36

# sorted(iterable[,cmp=None,[,key=None[,reverse=True]]]) 函数
# 作用:第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表
# 可选参数:cmp, kye, reverse
# cmp: 比较函数
# key: 从每个元素中提取的用于比较的关键字
# reverse:为True时倒序排列 False时正序排列
# 与sort()的区别,sort()适用于list,对list进行永久排序,sorted 对传入的iterable只进行临时排序

# 对一个字典进行排序

print('定义一个字典')
dict_test = {'a':10, 'c':200,'e':'50','g':3}
print(dict_test)

print('直接传入一个字典: sorted(dict_test)')
print(sorted(dict_test))
print('等价于 for i in dict_test: print(i)')
for i in dict_test:
    print(i)

print('传入字典对象:sorted(dict_test.iteritems())')
print(sorted(dict_test.iteritems()))
print('等价于: for j in dict_test.iteritems(): print(j)')
for j in dict_test.iteritems():
    print(j)

print('以字典的Keyc对字典进行排序')
print(sorted(dict_test.iteritems(), key=lambda d:d[0]))

print('以字典的value对字典时行排序')
print(sorted(dict_test.iteritems(), key=lambda v:v[1]))

# 执行结果:
"""
定义一个字典
{'a': 10, 'c': 200, 'e': '50', 'g': 3}
直接传入一个字典: sorted(dict_test)
['a', 'c', 'e', 'g']
等价于 for i in dict_test: print(i)
a
c
e
g
传入字典对象:sorted(dict_test.iteritems())
[('a', 10), ('c', 200), ('e', '50'), ('g', 3)]
等价于: for j in dict_test.iteritems(): print(j)
('a', 10)
('c', 200)
('e', '50')
('g', 3)
以字典的Keyc对字典进行排序
[('a', 10), ('c', 200), ('e', '50'), ('g', 3)]
以字典的value对字典时行排序
[('g', 3), ('a', 10), ('c', 200), ('e', '50')]
"""
posted @ 2017-11-02 22:57  考鸡蛋  阅读(297)  评论(0编辑  收藏  举报