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 pdb调试方法分享
Jan 21 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python和ruby,我选谁?
Sep 13 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
Python实现屏幕录制功能的代码
Mar 02 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
Python中zipfile压缩包模块的使用
May 14 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中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php浏览历史记录的方法
2015/03/10 PHP
php基本函数汇总
2015/07/09 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP类的特性实例分析
2016/09/28 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python脚本替换指定行实现步骤
2017/07/11 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
滴水洞导游词
2015/02/10 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL