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框架中的中间件
Jul 24 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python探索之ModelForm代码详解
Oct 26 Python
django 修改server端口号的方法
May 14 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
Python的iOS自动化打包实例代码
Nov 22 Python
在python中用url_for构造URL的方法
Jul 25 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
深入了解Django中间件及其方法
Jul 26 Python
tensorflow如何批量读取图片
Aug 29 Python
pymysql模块的操作实例
Dec 17 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 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 基础教程(一)
2006/10/09 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
javascript每日必学之多态
2016/02/23 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python中max函数用法实例分析
2015/07/17 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
django_orm查询性能优化方法
2018/08/20 Python
详解python with 上下文管理器
2020/09/02 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
信息管理员岗位职责
2013/12/01 职场文书
房屋租赁协议书
2014/04/10 职场文书
学生操行评语大全
2014/04/24 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
初中团支书竞选稿
2015/11/21 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL