python基础之函数式编程、匿名函数、内置函数
2017-04-13 14:43
381 查看
一 函数式编程
不修改外部状态。模仿数学里得函数进行编程。
用函数编程写出得代码相当精简。
可读性比较差。
例子:
y=2*x+1 x=1 def test(x): return 2*x+1 test(x)
一 匿名函数
匿名函数就是不需要显式的指定函数。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lamba表达式中封装有限的逻辑进去。
注:匿名函数引用计数为0,lambda经常和内置函数一起使用
lambda/filter/map/reduce这些都是函数式编程的风格。
语法:
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
先来个简单得:
#这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10))
换个高级点得:
salaries={ 'egon':3000, 'alex':100000000, 'wupeiqi':10000, 'yuanhao':250 } def get_value(k): return salaries[k] #换成匿名函数: lambda k:salaries[k] f=lambda k:salaries[k] #匿名函数也可以赋值一个名字,但是这便违反了匿名的初衷 print(f) print(f('egon')) print(max(salaries)) print(max(salaries,key=get_value)) print(max(salaries,key=lambda k:salaries[k])) print(min(salaries,key=lambda k:salaries[k]))
二 内置函数
classmethod staticmethod property delattr hasattr getattr setattr issubclass super
其他内置函数
练习题:
作业一、1、用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb
name=['alex','wupeiqi','yuanhao']
m=map(lambda name:name+'_sb',name) print(list(m))
2、用map来处理下述l,然后用list得到一个新的列表,列表中每个人的名字都是sb结尾
l=[{'name':'alex'},{'name':'y'}]
print(list(map(lambda i:{'name':i['name']+"sb"},l)))
作业二:
1、用filter来处理,得到股票价格大于20的股票名字
shares={
'IBM':36.6,
'Lenovo':23.2,
'oldboy':21.2,
'ocean':10.2,
}
res=filter(lambda x:shares[x]>20,shares) print(list(res)) 或者 for i in res: print(i)
作业三:
如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
1、map来得出一个包含数字的迭代器,数字指的是:购买每支股票的总价格
res=map(lambda x:x['shares']*x['price'],portfolio) print(list(res)) 或者 for i in res: print(i)
2、基于1的结果,用reduce来计算,购买这些股票总共花了多少钱
l1=[] res=map(lambda x:x['shares']*x['price'],portfolio) print(list(res)) 或者 for i in res: l1.append(i) res=reduce(lambda x,y:x+y,l1) print(res)
3、用filter过滤出,单价大于100的股票有哪些
res=filter(lambda x:x["price"]>100,portfolio) for i in res: print(i)
相关文章推荐
- Py修行路 python基础 (十三)匿名函数 与 内置函数
- Python开发基础-Day11内置函数补充、匿名函数、递归函数
- python基础----内置函数----匿名函数(lambda)
- Python基础(10)_内置函数、匿名函数、递归
- python-基础知识之匿名函数、内置函数
- python基础之内置函数补充、匿名函数、递归函数
- Python零基础入门之七变量与内置函数
- Python基础之内置函数(二)
- Python基础11--匿名函数和偏函数
- python 基础 学习 内置函数
- Python3 基础:返回函数和匿名函数
- Python基础之内置函数(一)
- Python基础(七)内置函数
- python基础31[python内置函数列表]
- python基础之内置函数(一)
- python基础-内置函数详解
- Python菜鸟之路:Python基础-内置函数补充
- [Python入门及进阶笔记]Python-基础-内置函数小结
- [Python入门及进阶笔记]Python-基础-内置函数小结
- 4.python语法基础-匿名函数lambda