Python学习之函数式编程
1 函数式编程
站在用户的角度思考问题,与客户深入沟通,找到青县网站设计与青县网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广、域名注册、雅安服务器托管、企业邮箱。业务覆盖青县地区。
1.1 匿名函数
关键字lambda表示匿名函数,冒号前面的 x 表示参数。冒号后面只能有一个表达式,不写return,返回值就是该表达式的结果。可以不必定义函数名,直接创建一个函数对象。返回函数的时候,也可以返回匿名函数。下面的代码是一个例子:
myabs = lambda x : -x if x < 0 else x
myabs(-2)
输出如下:
2
1.2 返回函数
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!
比如,定义一个函数 f(),我们让它返回一个函数g,可以这样写:
def f():
print('call f()...')
def g(): # 定义函数g
print('call g()...')
return g # 返回函数g()
上述代码中在函数f()内部又定义了一个函数g()。由于函数g() 也是一个对象,函数名g()就是指向函数g()的变量,所以,最外层函数f()可以返回变量g(),也就是函数g()本身.调用函数f(),我们会得到f()返回的一个函数:
x = f() # 调用f()
输出如下:
call f()...
1.3 闭包
在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问:
def g(): # 定义函数g
print('call g()...')
def f():
print('call f()...')
return g # 返回函数g()
将g()的定义移入函数f()内部,防止其他代码调用g():
def f():
print('call f()...')
def g(): # 定义函数g
print('call g()...')
return g # 返回函数g()
像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包Closure。闭包的特点是返回的函数还引用了外层函数的局部变量。所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
1.4 偏函数
int()函数可以把字符串转换为整数。当仅传入字符串时,int()函数默认按十进制转换:
int('98')
输出如下:
98
函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做 N 进制的转换:
int('100', base = 8)
输出如下:
64
functools.partial就是创建一个偏函数的,可使用下面的代码创建一个新的函数:
import functools
int2 = functools.partial(int, base = 2)
int2('1000')
输出如下:
8无锡看妇科的医院 http://www.ytsgfk120.com/
functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,函数调用的难度就降低了。
1.5 reduce函数
使用reduce(),需要导入functools包下的reduce:
from functools import reduce
reduce()函数接收的参数是一个函数f和一个list,f必须接收两个参数。reduce()对list的每个元素反复调用函数f,并返回最终结果值。
下面是一个函数f:
def f(x, y):
return x + y
调用reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:reduce(f, [1, 3, 5, 7, 9], 100),结果将变为125,因为第一轮计算是:计算初始值和第一个元素:f(100, 1),结果为101。
1.6 filter函数
filter()函数接收一个函数f和一个list。函数f的作用是对每个元素进行判断,返回 True或 False。filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
要从一个list[1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 == 1
然后利用filter()函数过滤掉偶数:
list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))
输出如下:
[1, 7, 9, 17]
利用filter(),可以完成很多有用的功能。例如,删除None或者空字符串。下面的代码是一个判断字符串是否为空的函数:
def is_not_empty(s):
return s and len(s.strip()) > 0
然后输入:
list(filter(is_not_empty, ['test', None, '', ' ', 'END']))
输出为:
['test', 'END']
2 Python学习需要注意的点
1、空值为None而不是NULL;
2、True或者False首字母要大写;
3、print()会依次打印每个字符串,遇到逗号,的话,会输出一个空格。下面的代码是一个例子:
print('A', 'B')
输出如下:
A B
4、Python把0、空字符串’'和None看成 False,其他数值和非空字符串都看成True。
当前文章:Python学习之函数式编程
本文链接:http://scyanting.com/article/ihjeij.html