python的一些高阶用法

栏目: IT技术 · 发布时间: 6年前

内容简介:通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法。用法如下 map(方法,数组)先看例子

map的用法

def fn(x):
    return x*2
L1 = [1,2,3,4,5,6]
L2 = list(map(fn,L1))
L2
[2, 4, 6, 8, 10, 12]

通过上面的运行,可以知道map就是把一个数组内所有的元素都执行map加入的方法。

用法如下 map(方法,数组)

reduce的用法

先看例子

from functools import reduce
def add(x,y):
    return x + y
L1 = [1,2,3,4,5,6]

L2 = reduce(add,L1)
L2

通过上面的例子,直观的来看,我们可以发现reduce和map方法有一些不一样。

  1. map是 python 自带的函数,而reduce需要引入functools
  2. map 返回的是一个map对象,而reduce是返回的一个数字
  3. map函数需要一个参数,而reduce的参数需要两个。

map是对一个集合中的每个元素执行指定的方法。而reduce则是依次对集合的元素调用指定的方法。先把前两个参数执行reduce以后形成的返回之作为第一个参数,再和第三个参数形成返回值,依次执行。

filter函数

filter则是对集合的每个元素执行一次判断,能让filter指定的函数返回真值则返回,否则则不出现在返回集合中。

def fn(x):
    return x%2 ==0
L1 = [1,2,3,4,5,6,7,8]
F1 = filter(fn,L1)
print(F1)
print(list(F1))
<filter object at 0x7f1d38369358>
[2, 4, 6, 8]

sorted

顾名思义排序。用法如下

sorted(集合,key=排序的算法,reverse=True) #reverse=True如果添加反向排序

返回函数(闭包)

def fn(x):
    def add(y):
        return x + y
    return add
a = fn(5)
a(6)

需要注意的是闭包的代码是到最后执行a(6)的时候,才调用了函数里面的执行。举个例子

def fn():
    rs = []
    for i in range(4):
        def sub():
            return i
        rs.append(sub)
    return rs
a,b,c,d = fn()

print(a())
print(b())
print(c())
print(d())

从上面的例子中,我们如果没有理解到返回的函数是在最后加上括号的时候才调用,可能以为返回之是0,1,2,3

但是实际上def sub()里面的内容一直都没执行,但是外面的i 一直到了3.当调用a()的时候。开始执行。所以如上面的返回结果。

def efn():
    i = 1
    def sub():
        i = i + 1
        return i
    return sub

t = efn()
t()
---------------------------------------------------------------------------

UnboundLocalError                         Traceback (most recent call last)

<ipython-input-15-7574f0a729df> in <module>()
      7 
      8 t = efn()
----> 9 t()


<ipython-input-15-7574f0a729df> in sub()
      2     i = 1
      3     def sub():
----> 4         i = i + 1
      5         return i
      6     return sub


UnboundLocalError: local variable 'i' referenced before assignment

上面的报错,需要引入关键词 nonlocal 如下:

def efn():
    i = 1
    def sub():
        #关键字
        nonlocal i
        i = i + 1
        return i
    return sub

t = efn()
print(t())
print(t())

匿名函数

list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]

通过上面的式子我们简单可以看到lambda函数或者匿名函数的意义

f = lambda x,y:x + y
f(5,6)

我们大概可以看到lambda函数的:前面相当于参数,后面的是返回数值

装饰器

我的理解类似 java 中的AOP或者.net中的面向切片编程

'''比如调用一个方法的时候,我们期望另外一个方法也被调用。比如我们执行一个操作,期望不改变任何代码,就可以打印出来这个方法的日志'''
def log(func):
    def wraper(*args,**kw):
        print(func.__name__+' is call to log')
        return func(*args,**kw)
    return wraper

@log
def fn():
    print('this is fn')
    
fn()
fn is call to log
this is fn
''' 如果我们希望往log里面传递参数'''
def log(text):
    def decorator(func):
        def wraper(*args,**kw):
            print(func.__name__+' is call to log ' + text)
            return func(*args,**kw)
        return wraper
    return decorator
@log('hello')
def fn():
    print('fn')
fn()
fn.__name__
fn is call to log hello
fn





'wraper'

fn的名称发生了改变,要保持不变,需要@functools.wraps(func)

''' 如果我们希望往log里面传递参数'''
import functools
def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wraper(*args,**kw):
            print(func.__name__+' is call to log ' + text)
            return func(*args,**kw)
        return wraper
    return decorator
@log('hello')
def fn():
    print('fn')
fn()
fn.__name__
fn is call to log hello
fn





'fn'

以上的内容参考学习 廖学峰的学习网站


以上所述就是小编给大家介绍的《python的一些高阶用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Python

Head First Python

Paul Barry / O'Reilly Media / 2010-11-30 / USD 49.99

Are you keen to add Python to your programming skills? Learn quickly and have some fun at the same time with Head First Python. This book takes you beyond typical how-to manuals with engaging images, ......一起来看看 《Head First Python》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具