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里使用正则表达式的全匹配功能
Oct 19 Python
python 字典中取值的两种方法小结
Aug 02 Python
用Python shell简化开发
Aug 08 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
python for和else语句趣谈
Jul 02 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
python在linux环境下安装skimage的示例代码
Oct 14 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+mysql事务rollback&amp;commit示例
2010/02/08 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
javascript 写类方式之六
2009/07/05 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Django的性能优化实现解析
2019/07/30 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
为什么要做架构设计
2015/07/08 面试题
工商管理系学生的自我评价分享
2013/11/29 职场文书
保险专业自荐信范文
2014/02/20 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL