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实现批量转换文件编码的方法
Jul 28 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
Python生成短uuid的方法实例详解
May 29 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
解决python3输入的坑——input()
Dec 05 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
python安装Scrapy图文教程
2017/08/14 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python语言元素知识点详解
2019/05/15 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
基于python实现从尾到头打印链表
2019/11/02 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
工厂车间标语
2014/06/19 职场文书
敬老月活动总结
2014/08/28 职场文书
九一八事变演讲稿
2014/09/05 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年教研室工作总结
2014/12/06 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
入党积极分子群众意见
2015/06/01 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
vue 自定义组件添加原生事件
2022/04/21 Vue.js
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers