Python高级特性与几种函数的讲解


Posted in Python onMarch 08, 2019

切片

从list或tuple中取部分元素。

list = [1, 2, 3, 4]
list[0 : 3] # [1, 2, 3]
list[-2 : -1] # -1表示最后一个,[3, 4]
list[1 :: 2] # index = 1开始,每两个取一个[2, 4]
list[:] # 复制list,[1, 2, 3, 4]
# 针对tuple,切片同样适用

iterable、iterator

可迭代,迭代器,集合类型数据可迭代但不是迭代器,可通过iter()转变为迭代器。

可迭代对象可使用for-in语句遍历,判断x是否可迭代:isinstance(x, Iterable)。

列表生产式

高效创建列表,见代码示例:

# range转list
list(range(1, 5)) # [1, 2, 3, 4]
[x * x for x in range(1, 5)] # [1, 4, 9, 16]
[x * x for x in range(1, 5) if x % 2 == 0] # [4, 16]
[m + n for m in 'ABC' for n in 'XYZ'] # ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
[s.lower() for s in ['Hello', 'World', 'IBM', 'Apple']] # like map

generator

isinstance(generator, Iterable) = True,可使用for-in语句,或者使用next方法。

g = (x * x for x in range(10))
next(g) # 0
next(g) # 1
next(g) # 4
for item in g:
  print(item) # 9 16 ... 81

generator函数

generator函数本质是一个有状态的函数,遇到yield语句时会暂时返回。

# 有yield语句,表明时generator函数
def gen_fn():
  init = 0
  while init < 10:
    yield init
    init += 1
  return 'done'
call = gen_fn() # 获得可迭代对象call
next(call) # 0
next(call) # 1
# 每次调用generator函数,得到的是一个新的generator
# for-in无法获得generator的返回值'done'
for item in gen_fn():
  print(item) # 0 1 ... 9

高阶函数

参数是函数的函数即是高阶函数,可对比数学概念:g(x) = f(x) + 1,g(x)即高阶函数。

  • map
# map(func, *iterables, ...)
i = map(lambda x : x * x, [1, 2, 3]) # 返回Iterator
list(i) # [1, 4, 9]
  • reduce
from functools import reduce
reduce(lambda previous, x : previous + x, [1, 2, 3, 4]) # 10
  • filter
i = filter(lambda x : x % 2 == True, [1, 2, 3, 4])
list(i) # [1, 3]
  • sorted 默认升序,通过key参数决定排序规则。
sorted([1,3,2], key = lambda x : -x) # [3, 2, 1]

返回函数做回函数返回值

闭包概念:包含环境成分(自由变量)和控制成分的实体(lambda表达式,函数)。

def lazy_sum(*args):
  ax = 0
  def sum():
    nonlocal ax
    for n in args:
      ax = ax + n
    return ax
  return sum
fn = lazy_sum(1, 2, 3)  # ax + sum构成了闭包
fn() # 6
fn() # 12

匿名函数

即lambda表达式。

装饰器

函数包函数的语法糖?

def log(fn):
  def call(*args, **kw):
    print('call %s():' % fn.__name__)
    return fn(*args, **kw)
  return call
# @log的作用等同now = log(now)
@log
def now():
  print('2018-03-18')
now() # call now(): 2018-03-18

偏函数

把一个函数的某些参数给固定住,返回一个新的函数。类似柯里化,但更强大?

from functools import partial
binary_int = partial(int, base = 2)
binary_int('1000000') # 64

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python sys.path详细介绍
Oct 17 Python
python Flask实现restful api service
Dec 04 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
Python I/O与进程的详细讲解
Mar 08 #Python
举例讲解Python常用模块
Mar 08 #Python
python re库的正则表达式入门学习教程
Mar 08 #Python
opencv与numpy的图像基本操作
Mar 08 #Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 #Python
python实现整数的二进制循环移位
Mar 08 #Python
Python3实现的反转单链表算法示例
Mar 08 #Python
You might like
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
javascript运动详解
2015/07/06 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
python 日志增量抓取实现方法
2018/04/28 Python
python队列Queue的详解
2019/05/10 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
英国计算机商店:Technextday
2019/12/28 全球购物
公司财务自我评价分享
2013/12/17 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
班干部演讲稿
2014/04/24 职场文书
体育教师求职信
2014/06/30 职场文书
旅游项目合作意向书
2015/05/08 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
决心书格式及范文
2019/06/24 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js