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多线程http下载实现示例
Dec 30 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
pygame学习笔记(4):声音控制
Apr 15 Python
python操作ie登陆土豆网的方法
May 09 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
keras 读取多标签图像数据方式
Jun 12 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实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
Prototype Array对象 学习
2009/07/19 Javascript
学习ExtJS form布局
2009/10/08 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
在Django的视图中使用form对象的方法
2015/07/18 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
工程力学专业自荐信范文
2014/03/17 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
在人间读书笔记
2015/06/30 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server