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使用MD5加密字符串示例
Aug 22 Python
Python判断操作系统类型代码分享
Nov 22 Python
Python3实现从文件中读取指定行的方法
May 22 Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
老生常谈Python基础之字符编码
Jun 14 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
python中正则表达式与模式匹配
May 07 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Python关于反射的实例代码分享
Feb 20 Python
如何理解Python中的变量
Jun 01 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
第十四节--命名空间
2006/11/16 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
jquery maxlength使用说明
2011/09/09 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
Python简单日志处理类分享
2015/02/14 Python
python梯度下降法的简单示例
2018/08/31 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
python入门教程之基本算术运算符
2020/11/13 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
聚美优品广告词改编
2014/03/14 职场文书
服务质量承诺书
2014/03/27 职场文书
元旦晚会活动总结
2014/07/09 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
居住证明范文
2015/06/17 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS