首页 > 编程语言 > 详细

python进阶

时间:2021-06-23 21:51:28      阅读:23      评论:0      收藏:0      [点我收藏+]

函数式编程

  高阶函数:一个函数可以接收另一个函数作为参数

    map() : map(function, Iterrable)  :将传入的函数一次作用于序列的每个元素上,并将结果作为新的Iterator返回

# 实现,f(x) = x2, 作用于l = [1,2,3,4]
def func(x):
    return x*x
L = reduce(func, [1,2,3,4])
print(L)

 

    reduce() :reduce把一个函数作用在一个序列上,该函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

# 实现[1,2,3,4,5]Z转换为12345
def func(x,y):
    return x×10 + y

L = reduce(func, [1,2,3,4,5,6])
print(L)

    

    filter() : filte把传入的函数作用于每个元素,根据返回值true/false 过滤元素

# 将序列中的空字符串删除

def not_empty(s):
    return s and s.strip()

# print(list(filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘  ‘])))

 

# 使用filter筛选出回数
def is_palindrome(n):
     return str(n) == str(n)[::-1]

output = filter(is_palindrome, range(1, 1000))
print(1~1000:, list(output))

 

    sorted():可接收一个key函数实现自定义的排序,将函数作用于每一个元素,按key函数返回的结果进行排序

print(sorted([36, -25, -68, 79], key=abs))
print(sorted([bob, about,Zoo]))
print(sorted([bob, about,Zoo], key=str.lower))

>>>
[-25, 36, -68, 79]
[Zoo, about, bob]
[about, bob, Zoo]
L = [(Bob, 75), (Adam, 92), (Bart, 66), (Lisa, 88)]

def by_name(t):
    return t[0].lower()

def by_score(t):
    return t[1]

print(sorted(L, key=by_score, reverse=True))
print(sorted(L, key =by_name ))

 

  返回函数:闭包,将函数作为结果值返回(返回函数名)

# 计数器,每次调用counterA()时,+1
def createCounter():
    f = [0]
    def counter():

        f[0] = f[0] + 1
        return f[0]
    return counter

counterA = createCounter()
print(counterA(),counterA())

  

  匿名函数:lambda  x:(x为函数参数)不需要显示定义函数,使用表达式的结果作为返回值

L = list(filter(lambda x: x %2 ==1 , range(1,20)))
print(L)

 

  装饰器:调用函数时,不修改函数定义,但调用时动态增加功能的方式

 

# 装饰器函数
def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print(func.__name__)
        return func(*args, **kw)
    return wrapper

@log  #将装饰器装饰在now函数上
def now():
    print(2015-3-25)

now()
print(now.__name__)

    当装饰函数需要传入参数时

#  当装饰器函数需要传入参数时:
def log(text):
    def derectorA(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print(func.__name__)
            return func(*args, **kw)

        return wrapper
    return derectorA

@log(execute)
def now():
    print(2021-6-23)

now()
print(now.__name__)

  

    例:设计一个装饰器,打开多装饰函数的执行时间

# 设计decoratoe,打印函数的执行时间
import time
def metric(fn):
    @functools.wraps(fn)  # 作用是让所装饰的函数名称等属性复制到wrapper上,(保证依赖函数签名的代码执行正常)
    def wrapper(*args, **kw):
        t1 = time.time()
        print(t1)
        fn(*args, **kw)
        t2 = time.time()
        print(t2)
        print(%s executed in %s ms % (fn.__name__, t2-t1))
        return fn(*args, **kw)

    return wrapper

# 测试
@metric
def fast(x, y):
    time.sleep(0.0012)
    return x + y

@metric
def slow(x, y, z):
    time.sleep(0.1234)
    return x * y * z

f = fast(11, 22)
s = slow(11, 22, 33)

 

  偏函数:将函数的某些参数固定,返回一个新的函数(与默认参数的作用一致,降低函数调用的难度)

# 实现转换二进制字符串,int(x, base =2)[应用于批量转换二进制字符串]

int2 = functools.partial(int, base = 2)  #偏函数
print(int2(100011))
print(map(int2, [110, 100, 001]))

 

python进阶

原文:https://www.cnblogs.com/byy521/p/14919602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!