函数式编程和内置函数:python学习之路第7天
Posted Linux云计算与Python干货及行情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程和内置函数:python学习之路第7天相关的知识,希望对你有一定的参考价值。
函数式编程和内置函数
一、上节回顾
全局函数和局部变量
name = ‘alex’
def change_name():
global name ---调用全局变量
name = ‘hujianwei’ --修改全局变量
print(name) --打印出:hujianwei
def foo(): ---定义一个内置函数
name = ‘wu’ -----局部变量
print(name) ---打印出:name
foo()
change_name()
---------------------------------------------------
name = ‘alex’
def change_name():
#global name ---调用全局变量
#name = ‘hujianwei’ --修改全局变量
#print(name) --打印出:hujianwei
name = ‘aaaa’
def foo(): ---定义一个内置函数
#name = ‘wu’ -----局部变量
nonlocal name ---调用上一级变量
name = ‘bbbb’ ---把上一级变量aaaa修改成bbbb
print(name) ---打印出:bbbb
print(name) -----打印aaaa
foo()
change_name()
------------------------------------------------
二、作用域
name = ‘alex’
def foo():
name = ‘hehe’
def bar():
print(name)
bar()
foo()
或者:
name = ‘alex’
def foo():
name = ‘hehe’
def bar():
print(name)
return bar
foo()
-----------------------------------------------------
name = ‘alex’
def foo():
name = ‘hehe’
def bar():
name = ‘wuhaifa’
def tt()
print(name)
return tt
return bar
bar = foo()
r1 = foo()
r2 = r1() ---r2 = r1() = foo()()
r3 = r2()
-----------------------------------------------------
三、匿名函数
lambda x:x+1 ,lambda关键字
-------------------------
def calc(x):
return x+1
------上面两句相当于:lambda x:x+1
res = calc(10) -----lambda被称为匿名函数
print(res)
输出结果:10
--------------------------------------------------
匿名函数:
func = lambda x:x+1
print(func(10))
输出结果:11
f = lambda x,y,z:x+y-z+5
print(f(1,2,3))
输出结果:5
-------------------------------------------------
四、函数式编程
(一)介绍
编程方法论:
面向过程(华山派)
面向函数式(武当派)
面向对象(峨嵋派)
面向过程:
找到解决问题的入口,按照固定的流程去模拟解决问题的流程
1.搜索目标--用户输入(配偶要求),按要求到数据结构(字典)内检索合适的人物
2.表白,表白成功进入3,否则进入1
3.恋爱,恋爱成功进入4,否则返回1
4.见家长,家长同意进入5,否则返回1
5.结婚
函数式:
函数式=编程语言定义的函数+数学意义的函数
数学函数:y=2*x+1
函数式:def calc(x):
return 2*x+1
(二)函数式编程尾递归调用优化
例1:不可改变:不可用变量保持状态,不修改变量
#非函数式
a = 1
def inre_test1():
global a
a+=1
return a
inre_test1()
print(a)
----------------------------------------------------
#函数式
n = 1
def inre_test2():
return n+1
print inre_test2(2)
print n
----------------------------------------------------
高阶函数↓,函数即变量
例2:把函数当作参数传给另外一个函数
(函数接收的参数是一个函数名)
def foo(n):
print(n)
def bar(name):
print(‘my name is %s’ %name)
foo(bar(‘alex’))
#相当于把bar赋值给foo函数变量n。bar函数的值为alex
---------------------------------------------------
尾递归、尾调用:在函数的最后一步调用
def bar():
return n
def foo(x):
bar()
--------------------------------------------------
五、map函数
def map_test(func,array): --#func=lambda x:x+1 arrary= [12,3,4,5,6,8,10]
ret=[]
for i in arrary:
res = func(i)
ret.append(res)
rerurn ret
print(map_test(lambda x:x_1,num_l))
print(‘内置函数map,处理结果:’,map_test(lambda x:x_1,num_l))
----------------------------------------------------
map使用:简单的例子
msg = ‘abcdefghijk’
re = map(lambda x:x.upper(),msg)
-----把msg参数传给lambda函数的x,然后转换成大写
list (re) ----把re结果转换成列表
print(re)
----------------------------------------------------
@@ filter函数 :帅选列表值,遍历序列中的每个元素,判断每个元素得到布尔值,如果事True,则留下来
people = [
{‘name’:’wangxs’,’age’:1000},
{‘name’:’lixs’,’age’:3000},
{‘name’:’zhangxs’,’age’:30},
{‘name’:’maxs’,’age’:12},
]
#把年纪大于100的过滤到;
print(list(filter(lambda p:p[‘age’]<=100,people)))
----------------------------------------------------
@@ reduce函数
python2直接用,python3集合到一个模块中
#from functools onport reduce
num_l = [1,2,3,4,5,6]
def reduce_test(arrary):
res = 0
for num in arrary:
res = num
return res
print(reduce_test(num_l))
--------------------------------------------------
六、内置函数
#abs,取绝对值函数
#all,计算布尔值,空值,0,none记为False
print(all[1,2,3,0,’fre’,’the’, ,none])
#any,只要有一个为真,则是真
#bin
#bool
#chr,字节类型
#dir
#divmod(10,3) ---代表有多少台记录,3表示放多少记录
#dic
#hash(),哈希,可哈希的数据类型,结果为布尔值空。
总结:
map():处理序列中每个元素,得到的结果是一个列表,该列表元素的位置和个数与原来对应
filter():遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来,得到的结果是一个列表。
reduce():处理一个序列,然后把序列进行合并操作
from functools import reduce
print(reduce(lamdba x,y:x+y,range(100),100))
print(reduce(lamdba x,y:x+y,range(1,100)))
以上是关于函数式编程和内置函数:python学习之路第7天的主要内容,如果未能解决你的问题,请参考以下文章