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根据给定文件返回文件名和扩展名的方法
Mar 27 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python绘制多个子图的实例
Jul 07 Python
python__name__原理及用法详解
Nov 02 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 连连看连接算法
2008/11/22 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
数学专业推荐信范文
2013/11/21 职场文书
心理健康课教学反思
2014/02/13 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
安全生产感想
2015/08/07 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
Python中的程序流程控制语句
2022/02/24 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
PYTHON InceptionV3模型的复现详解
2022/05/06 Python