python高级特性和高阶函数及使用详解


Posted in Python onOctober 17, 2018

python高级特性

1、集合的推导式

•列表推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。

语法:[exp for item in collection if codition]

if codition - 可选

python高级特性和高阶函数及使用详解

python高级特性和高阶函数及使用详解

python高级特性和高阶函数及使用详解

•字典推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。

语法:{key_exp:value_exp for item in collection if codition}

python高级特性和高阶函数及使用详解

•集合推导式

语法:{exp for item in collection if codition}

python高级特性和高阶函数及使用详解

•嵌套列表推导式

python高级特性和高阶函数及使用详解

2、多函数模式

函数列表,python中一切皆对象。

# 处理字符串
str_lst = ['$1.123', ' $1123.454', '$899.12312']
def remove_space(str):
  """
  remove space
  """
  str_no_space = str.replace(' ', '')
  return str_no_space
def remove_dollar(str):
  """
  remove $
  """
  if '$' in str:
    return str.replace('$', '')
  else:
    return str
def clean_str_lst(str_lst, operations):
  """
    clean string list
  """
  result = []
  for item in str_lst:
    for op in operations:
      item = op(item)
    result.append(item)
  return result
clean_operations = [remove_space, remove_dollar]
result = clean_str_lst(str_lst, clean_operations)
print result

执行结果:['1.123', '1123.454', '899.12312']

3、匿名函数lambda

•没有函数名
•单条语句组成
•语句执行的结果就是返回值
•可用作sort的key函数

python高级特性和高阶函数及使用详解

python高阶函数

1、函数式编程

•函数本身可以赋值给变量,赋值后变量为函数;

•允许将函数本身作为参数传入另一个函数;

•允许返回一个函数。

python高级特性和高阶函数及使用详解

python高级特性和高阶函数及使用详解

2、map/reduce函数

•map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回

python高级特性和高阶函数及使用详解

python高级特性和高阶函数及使用详解

•reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。 

lst = [a1, a2 ,a3, ......, an]
reduce(func(x,y), lst) = func(func(func(a1, a2), a3), ......, an)

python高级特性和高阶函数及使用详解

3、filter函数

•筛选序列

•filter(func, lst),将func作用于lst的每个元素,然后根据返回值是True或False判断是保留还是丢弃该元素。

python高级特性和高阶函数及使用详解

下面看下Python高级函数使用

map的使用:map(function, iterable, ...)

  map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

>>> def f(x):
...   return x + x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

reduce的使用:reduce(function, iterable[, initializer])

  reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

>>> from functools import reduce
>>> def add(x, y):
...   return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15
from functools import reduce
def add(x,y):
  return x + y
print (reduce(add, range(1, 101)))

filter的使用:filter(function, iterable)

  filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

def is_odd(n):
  return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
def not_empty(s):
  return s and s.strip()
list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))
# 结果: ['A', 'B', 'C']

filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

sorted的使用:sorted(iterable[, cmp[, key[, reverse]]])

Python内置的sorted()函数就可以对list进行排序:

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a)    # 保留原列表
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
#key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过key=abs处理过的list:
#list = [36, 5, -12, 9, -21]
#keys = [36, 5, 12, 9, 21]
[5, 9, -12, -21, 36]
#字符串排序
>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

raw_input的使用:raw_input([prompt])

prompt: 可选,字符串,可作为一个提示语。

raw_input() 将所有输入作为字符串看待

>>>a = raw_input("input:")
input:123
>>> type(a)
<type 'str'>       # 字符串
>>> a = raw_input("input:")
input:runoob
>>> type(a)
<type 'str'>       # 字符串
>>>
input() 需要输入 python 表达式
>>>a = input("input:")
input:123         # 输入整数
>>> type(a)
<type 'int'>        # 整型
>>> a = input("input:")  
input:"runoob"      # 正确,字符串表达式
>>> type(a)
<type 'str'>       # 字符串
>>> a = input("input:")
input:runoob        # 报错,不是表达式
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<string>", line 1, in <module>
NameError: name 'runoob' is not defined
<type 'str'>

总结

以上所述是小编给大家介绍的python高级特性和高阶函数及使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
在Python的Django框架中包装视图函数
Jul 20 Python
浅谈五大Python Web框架
Mar 20 Python
python自定义异常实例详解
Jul 11 Python
Python pandas常用函数详解
Feb 07 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
python Shapely使用指南详解
Feb 18 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 Python
Python上下文管理器Content Manager
Jun 26 Python
基于python实现学生管理系统
Oct 17 #Python
python3.4控制用户输入与输出的方法
Oct 17 #Python
python学生信息管理系统(完整版)
Apr 05 #Python
python3的输入方式及多组输入方法
Oct 17 #Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 #Python
python学生信息管理系统(初级版)
Oct 17 #Python
学生信息管理系统python版
Oct 17 #Python
You might like
php生成带logo二维码方法小结
2016/04/08 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
如何更优雅地写python代码
2019/07/02 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
周鸿祎:教你写创业计划书
2013/12/30 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
招标授权委托书样本
2014/09/23 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript