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正则表达式中的括号匹配问题
Dec 14 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
Python测试人员需要掌握的知识
Feb 08 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python 实现图像快速替换某种颜色
Jun 04 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
浅析python 字典嵌套
Sep 29 Python
python 实现图片修复(可用于去水印)
Nov 19 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实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
vue路由跳转传参数的方法
2019/05/06 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python找出最小的K个数实例代码
2018/01/04 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
python随机生成库faker库api实例详解
2019/11/28 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
音乐教学案例
2014/01/30 职场文书
公司面试感谢信
2014/02/01 职场文书
实习生矿工检讨书
2014/10/13 职场文书
法律意见书范本
2015/06/04 职场文书
nginx静态资源的服务器配置方法
2022/07/07 Servers