Python学习之 函数式编程
admin
2023-07-05 16:04:13
0次

  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。


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...