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中的zip函数使用示例
Jan 29 Python
详解Python的Django框架中的templates设置
May 11 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python中动态创建类实例的方法
Mar 24 Python
python 上下文管理器使用方法小结
Oct 10 Python
详解python中的装饰器
Jul 10 Python
python实现ID3决策树算法
Aug 29 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
python利用Excel读取和存储测试数据完成接口自动化教程
Apr 30 Python
python制作微博图片爬取工具
Jan 16 Python
手把手教你实现PyTorch的MNIST数据集
Jun 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
phpfans留言版用到的install.php
2007/01/04 PHP
php执行sql语句的写法
2009/03/10 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
python重试装饰器示例
2014/02/11 Python
python修改字典内key对应值的方法
2015/07/11 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
电台实习生求职信
2014/02/25 职场文书
房地产推广策划方案
2014/05/19 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
同意报考公务员证明
2015/06/17 职场文书
学校体育节班级口号
2015/12/25 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers