Python高级特性与几种函数的讲解

作者:沙沙罗曼 时间:2021-12-09 03:37:17 

切片

从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

来源:https://amsimple.com/blog/article/38.html

标签:python,高级特性,函数
0
投稿

猜你喜欢

  • php函数serialize()与unserialize()用法实例

    2023-11-19 00:53:23
  • 理解Python数据离散化手写if-elif语句与pandas中cut()方法实现

    2023-02-24 10:33:33
  • Python可视化神器pyecharts绘制饼状图

    2023-11-27 17:06:18
  • 前端开发中一些常用技巧总结

    2010-07-18 13:13:00
  • Swoole webSocket客服IM消息系统方案解析

    2023-06-14 20:17:22
  • CSS处理斜角导航条的一个例子

    2007-08-27 12:38:00
  • 详解Go 将在下个版本支持新型排序算法pdqsort

    2023-10-07 23:49:40
  • YUI学习笔记(3)

    2009-01-21 16:24:00
  • 帮助你分析MySQL的数据类型以及建库策略

    2009-02-23 17:39:00
  • 设计师挖掘用户需求浅谈

    2009-10-25 13:24:00
  • php统计数组不同元素的个数的实例方法

    2023-06-11 23:04:59
  • python 统计代码耗时的几种方法分享

    2023-11-03 19:51:06
  • XML十项特点

    2008-04-05 13:49:00
  • 网站开发防止中文乱码需要了解的codepage的重要性小结

    2011-03-03 11:24:00
  • Python脚本实现Zabbix多行日志监控过程解析

    2021-12-27 09:40:47
  • 一个asp分页源代码例子

    2007-09-19 12:25:00
  • php开启openssl的方法

    2023-11-14 06:52:51
  • 404页面设计一样可以闪光

    2007-08-19 15:09:00
  • 介绍Python中几个常用的类方法

    2023-02-10 09:17:49
  • 在django中使用post方法时,需要增加csrftoken的例子

    2023-08-12 06:44:34
  • asp之家 网络编程 m.aspxhome.com