linux 函数式编程,函数式编程和内置函数: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)))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值