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 20 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
python实现网站微信登录的示例代码
Sep 18 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
分享3个非常实用的 Python 模块
Mar 03 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
Yii中的cookie的发送和读取
2016/07/27 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
13个最常用的Python深度学习库介绍
2017/10/28 Python
Django中提示消息messages的设置方式
2019/11/15 Python
使用python绘制二维图形示例
2019/11/22 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
pycharm安装及如何导入numpy
2020/04/03 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
python集合的新增元素方法整理
2020/12/07 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
Servlet方面面试题
2016/09/28 面试题
美术毕业生求职信
2014/02/25 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
双语教学实施方案
2014/03/23 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
使用golang编写一个并发工作队列
2021/05/08 Golang
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技