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的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
python PyTorch预训练示例
Feb 11 Python
浅谈python标准库--functools.partial
Mar 13 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
python实现ip地址的包含关系判断
Feb 07 Python
jupyter notebook清除输出方式
Apr 10 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
区分python中的进程与线程
Aug 13 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
python实战之用emoji表情生成文字
May 08 Python
Python中time与datetime模块使用方法详解
Mar 31 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
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
Javascript学习指南
2014/12/01 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
微信小程序如何自定义table组件
2019/06/29 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python中星号变量的几种特殊用法
2016/09/07 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python 2.7.14安装图文教程
2018/04/08 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
教师开学感言
2014/02/14 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang