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 相关文章推荐
详解Django中的form库的使用
Jul 18 Python
浅谈五大Python Web框架
Mar 20 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Python类的动态绑定实现原理
Mar 21 Python
Python多线程通信queue队列用法实例分析
Mar 24 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
javascript中this的四种用法
2015/05/11 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
Python读取Excel的方法实例分析
2015/07/11 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
违反学校规定检讨书
2014/01/18 职场文书
食品安全检查制度
2014/02/03 职场文书
员工考勤管理制度
2015/08/06 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
numpy数据类型dtype转换实现
2021/04/24 Python
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android