我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

python-贺威栋-2021.01.21

[复制链接]
I5029学员认证 发表于 2021-1-21 20:51:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
'''生成器 generator'''
# 实现生成器
t = (x*x for x in range(10))
# 使用next()方法可以获取生成器中的下一个元素
print(next(t))
# 如果生成器中的元素已取完,则抛出StopIteration异常
g = (x*x for x in range(10))
for i in g:
    print(i)
'''
利用函数实现生成器
'''
# import time
# def nature():
#     n = 1
#     while True:
#         '''
#         return n  1.返回n的值 2.立即结束函数
#         yield n   1.返回n的值 2.立即暂停函数的执行
#         '''
#         yield n   # 收获  return
#         n += 1
# g = nature()
# for i in g:
#     print(i)
#     time.sleep(1)
# 练习:用生成器生成斐波那契序列
'''
1 1 2 3 5 8 13
a = 0 b = 1 a+b=1; a = b b = a+b
a = 1 b = 1 a+b=2; a = b b = a+b
a = 1 b = 2 a+b=3; a = b b = a+b
a = 3 b = 3 a+b=5; a = b b = a+b
a = 3 b = 5 a+b=8; a = b b = a+b
'''
import time
def fib():
    a,b = 0,1
    while True:
        yield b
        # 先计算赋值符号的右边,然后再赋值
        a,b = b,a+b
        time.sleep(1)
f = fib()
# for i in f:
#     print(i)
#     time.sleep(0.5)
from collections.abc import Iterable
print(isinstance(f,Iterable))
'''
高阶函数
函数名本质上就是一个指向该函数的变量
'''
print(abs)  # <built-in function abs>
f = abs
print(f(-5))
'''
函数作为参数传入
一个函数A可以接受另一个函数B作为参数,这个函数A称为高阶函数
'''
f = abs
def add(x,y,f):
    return f(x)+f(y)
print(add(3,5,f))
def g(x):
    return x*x
print(add(3,4,g))
# map() 函数
r = map(g,[1,2,3,4,5])
print(list(r))
'''
函数作为返回值
'''
def s(*args):
    ss = 0
    for arg in args:
        ss += arg
    return ss
print(s(1,2,3,4))
'''
lazy_s()函数中定义了内部函数s(),s()函数中又引用了外部函数lazy_s()的参数args
lazy_s()函数返回函数s(),相关的参数和变量都已经保存在返回的函数中
这种程序结构称为 闭包Closure
'''
def lazy_s(*args):
    def s():
        ss = 0
        for arg in args:
            ss += arg
        return ss
    return s
h = lazy_s(1,2,3,4)
print(h())
'''
匿名函数
lambda 表达式
匿名函数一般只用于处理简单的情况
'''
def g(x):
    return x*x
r = map(g,[1,2,3,4])
print(list(r))
r = map(lambda x: x*x*x,[1,2,3,4])
print(list(r)
f = lambda x,y: x+y
print(f(2,3))
# 匿名写奇数
h = lambda x: x%2 == 1
print(h(3))
'''
装饰器Decorator
在代码运行期间动态增加功能的方式称为装饰器
'''
# 创建一个装饰器
def log(func):
    def wrapper(*args,**kw):
        # func:将要被装饰的函数
        print('调用函数:%s'%func.__name__)
        return func(*args,**kw)
    return wrapper
import time
@log    # now = log(now)
# @log就相当于限下面的 f = log(now)  f()
def now():
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
now()
# f = now
# f()
# f = log(now)
# f()
# print(now)
# print(now.__name__)
# now.__name__ = '现在'
# print(f.__name__)
import functools
# 可传参的装饰器
def log2(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args,**kw):
            print('%s:%s'%(text,func.__name__))
            return func(*args,**kw)
        return wrapper
    return decorator
@log2('马上执行函数')    # now2 = log2('马上执行函数')(now2)
def now2():
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
now2()
print(now2.__name__)

回复

使用道具 举报

关注0

粉丝0

帖子27

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注软件测试菁英教育

客服电话:17792550360

客服时间:9:00-21:00

卓目鸟学苑 - 专注软件测试菁英教育!( 陕ICP备2025058934号-2 )

版权所有 © 西安菁英教育科技有限公司 2023-2026