我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

吕煜海2021/1/21

[复制链接]
亲爱的葡萄 发表于 2021-1-21 21:53:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
''''生成器generator'''

l = [x*x for x in range(10)]
print(l)
# 实现生成器
t = (x*x for x in range(10))
print(t)
# 使用next()方法,可以获取生成式中的下一个元素
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
print(next(t))
# 如果生成器中的元素已经取完了,则抛出StopIteration异常
# print(next(t))
print('---------------------------------')
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.立即暂停函数的执行
        '''
        # print(n)
        yield n
        n += 1


g = nature()
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# for e in g:
#     print(e)
#     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 = 2  b = 3  a+b=5; a = b b = a+b
a = 3  b = 5  a+b=8.。。。
'''

def fib():
    a,b = 0,1
    while True:
        yield b
        # t = a
        # a = b
        # b = t+b
        # 先计算赋值符号的右边,然后再赋值
        a,b = b,a+b


f = fib()
print(f)
print(fib)
# for i in f:
#     print(i)
#     time.sleep(0.5)

from collections.abc import Iterable

print(isinstance(f,Iterable))
'''
高阶函数

函数名本质上就是一个指向该函数的变量
'''

print(abs(-5))
print(abs)


print('-------------------------------')

# f = abs
# abs = 7
# print(abs)

# print(abs(-5))
'''
函数作为参数传入

一个函数A可以接收另一个函数B作为参数,我们把这个函数A称为高阶函数
'''
f = abs


def add(x,y,f):
    return f(x)+f(y)

print(add(3,4,f))
print(add(-3,-4,f))

def g(x):
    return x*x

print(add(3,4,g))

# map()函数 /reduce()/filter()
r = map(g,[1,2,3,4,5])
print(list(r))

'''
函数作为返回值
'''
print('-------======================')
def s(*args):
    ss = 0
    for arg in args:
        ss += arg
    return ss

print(s(1,2,3,4))
print(s(1,3,5,7))
'''
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)

'''
def s():
    ss = 0
    for arg in (1,2,3,4):
        ss += arg
    return ss

'''
print(h)
print(h())





回复

使用道具 举报

关注0

粉丝0

帖子8

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

客服电话:17792550360

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

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

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