2020-10-11

我的博客第10篇

1.高阶函数
。接收函数作为参数
。或者将函数作为返回值返回的函数就是高阶函数
对比练习:

#需求:将一个指定列表中的偶数,保存到一个新的列表中返回
list1 = [1,2,3,4,5,6,7,8,9,10]
def fn(list1):
    new_list = []
    for i in list1:
        if i % 2 == 0:
            new_list.append(i)
    return new_list
r = fn(list1)
print(r)
#结果
[2, 4, 6, 8, 10]

高阶函数练习

list1 = [1,2,3,4,5,6,7,8,9,10]
def fn1(i):
    if i % 2 == 0:
        return True

def fn(fun,list1):
    new_list = []
    for i in list1:
        if fun(i):
            new_list.append(i)
    return new_list

r = fn(fn1,list1)
print(r)
#结果
[2, 4, 6, 8, 10]

2.匿名函数
。lambda函数 (无名函数)
。语法:lambda 参数列表:表达式

def fn (a,b):
    return a + b
r = fn(1,2)
print(r)
#结果
3
print((lambda a, b: a + b)(1,2))

fn1 = lambda a, b: a + b
print(fn(1,2))

fn2 = lambda a, b: a + b
r = fn2(1,2)
print(r)
#结果全部为:
3

filter()过滤列表的
。第一个参数:函数
。第二个参数:序列

#filter()  
#1.传递一个函数进去
#2.需要被过滤的序列(列表)
list1 = [1,2,3,4,5,6,7,8,9,10]
def fn1(i):
    if i % 2 == 0:
        return True
print(list(filter(fn1,list1)))
#结果
[2, 4, 6, 8, 10]

3.闭包函数
。形成闭包的条件:
。函数嵌套
。将内部函数作为返回值返回
。内部函数必须要使用到外部函数的变量

#闭包的作用:
#闭包可以保存外部函数的变量,不会随着外部函数调用完而销毁

#注意点:
#由于闭包引用了外部函数的变量(参数),则外部函数的变量没有及时释放,消耗内存

def fun_out(num1):
    def fun_inner(num2):
        r = num1 + num2   #闭包的特性,num1并没有被销毁 “num1”是外层函数的临时变量,而在内层函数使用到了 “num1 + num2”
        print(r)
    return fun_inner         #将内部函数作为返回值返回
r = fun_out(1)
r(2)
r(3)
#结果
3
4

4.装饰器
。我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
。如果修改的函数多,修改起来会比较麻烦
。不方便后期的维护
。这样做会违反开闭原则(ocp)
**.**程序的设计要求开发对程序的扩展,要关闭对程序的修改
。装饰器是一个另类的闭包

#无参数的装饰,起到一个装饰的作用:严格来说不是真正的装饰器
def add(a,b):
    return a + b
def fn1():
    print('我是fn1')
def fn():       #装饰器
    print('函数开始执行')
    fn1()							#装饰fn1  给它添加一些功能
    print('函数执行结束')
fn()
#有参数的装饰
def add(a,b):
    return a + b
def fn1():
    print('我是fn1')
def fn(a,b):           #这段代码 用来装饰 函数add
    print('函数开始执行')
    r = add(a,b)
    print('函数执行结束')
    return r
r = fn(1,2)
print(r)
#结果
函数开始执行
函数执行结束
3

5.装饰器的使用
。通用装饰器
。装饰器的语法糖写法
@fn

def fn(fun):
    def new_fun(*args,**kwargs):
        print('函数开始执行')
        r = fun(*args,**kwargs)
        print('函数执行结束')
        return r
    return new_fun
#通用装饰器
def fn(fun):
    def new_fun(*args,**kwargs):
        print('函数开始执行')
        r = fun(*args,**kwargs)
        print('函数执行结束')
        return r
    return new_fun

def fn1():
    print('我是fn1')

def add(a,b):
    return a + b

@fn
def speak():
    print('同学们好好学习啊!!')
speak()             #调用
#结果
函数开始执行
同学们好好学习啊!!
函数执行结束
#装饰器的语法糖写法
#@fn 等价于 speak = fn(speak)

#r = fn(fn1)
#r()

6.推导式
列表推导式:
。语法:[表达式 for 变量 in 旧列表 if 条件]

#列表推导式
#旧的列表 ------>新的列表
#语法:[表达式 for 变量 in 旧列表 if 条件]
#找到长度大于3的名字
list1 = ['cheney','jerry','amy','anny','tony','james','wolf','居然','豆腐']

r = [name for name in list1 if len(name) > 3 ]
print(r)
#结果
['cheney', 'jerry', 'anny', 'tony', 'james', 'wolf']

7.生成器
。第一种方式:推导式得到
。gen = (表达式 for 变量 in 旧列表 if 条件)
。第二种方式: 函数方式得到 通过yield关键字

def fn():
    print('fn执行了')
    i = 1
    while True:
        yield i
        i += 1

r = fn()

print(next(r))
print(next(r))
print(next(r))

作业

1.请使用装饰器实现已存在的函数的执行所花费的时间。
方式1:

import functools
import time

def fn(fun):
    @functools.wraps(fun)
    def new_fun(*args, **kwargs):
        start = time.time()
        r = fun(*args, **kwargs)
        print('%s 运行了 %f 秒' % (fun.__name__, time.time() - start))
        return r

    return new_fun
   

#测试
@fn
def test(n):
    time.sleep(n)
    print("运行结束")

test(5)

在这里插入图片描述
方式2

import time
def get_time(fn):
    def get_inner():   #内部
        begin = time.time()
        fn()
        end = time.time()
        print('函数执行时间为%s' % (end - begin))
    return get_inner         

@get_time
def fn1():
    for i in range(10000):
        print(i)
fn1()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个 SQL 语句,用于向借阅表中插入数据。该表包含以下字段:借阅编号、读者编号、书籍编号、借阅日期、归还日期、借阅状态。每条数据表示一次借阅记录。其中借阅编号、读者编号、书籍编号、借阅日期和借阅状态是必填项,归还日期为可选项,如果借阅状态为“已还”则必须填写归还日期。 具体插入的数据如下: - 借阅编号:100001,读者编号:123413,书籍编号:0001,借阅日期:2020-11-05,归还日期:NULL,借阅状态:借阅 - 借阅编号:100002,读者编号:223411,书籍编号:0002,借阅日期:2020-9-28,归还日期:2020-10-13,借阅状态:已还 - 借阅编号:100003,读者编号:321123,书籍编号:1001,借阅日期:2020-7-01,归还日期:NULL,借阅状态:过期 - 借阅编号:100004,读者编号:321124,书籍编号:2001,借阅日期:2020-10-09,归还日期:2020-10-14,借阅状态:已还 - 借阅编号:100005,读者编号:321124,书籍编号:0001,借阅日期:2020-10-15,归还日期:NULL,借阅状态:借阅 - 借阅编号:100006,读者编号:223411,书籍编号:2001,借阅日期:2020-10-16,归还日期:NULL,借阅状态:借阅 - 借阅编号:100007,读者编号:411111,书籍编号:1002,借阅日期:2020-9-01,归还日期:2020-9-24,借阅状态:已还 - 借阅编号:100008,读者编号:411111,书籍编号:0001,借阅日期:2020-9-25,归还日期:NULL,借阅状态:借阅 - 借阅编号:100009,读者编号:411111,书籍编号:1001,借阅日期:2020-10-08,归还日期:NULL,借阅状态:借阅

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值