我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

python学习第四天_刘国平_2021.1.21

[复制链接]
果丹卷学员认证 发表于 2021-1-21 23:09:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、工作内容9:00-20:00
1.'''生成器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))

#如果生成器中的元素已经取完了,则抛出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
        #time.sleep(1)

g =nature()
print(g)
print(next(g))
print(next(g))
print(next(g))
print(next(g))


    for e in g:
    print(e)

    #time.sleep(1)


#练习:利用生成器生成斐波那契数列
def f(n):
    if n<3:
        return 1
    return(f(n-1)+f(n-2))
def l():
    n=1
    while True:
        yield(f(n))
        n=n+1
        time.sleep(1)

print(next(l()))
print(next(l()))
print(next(l()))
print(next(l()))
'''
def fib():
    a,b=0,1
    while True:
        yield b
        '''n=a
        a=b
        b=n+b'''
        a,b = b,a+b  #先计算赋值符号的右边,然后再赋值
f=fib()
for i in f:
    print i
2.'''
高阶函数
函数名本质上就是一个指向该函数的变量

'''
print(abs(-5))
print(abs)
f=abs
print(f(-5))
abs =7
print(abs)

'''
函数作为参数传入1

一个函数A可以接收另一个函数B作为参数,我们把这个函数A称为高阶函数
'''
def add(x,y,f):
    return f(x)+f(y)
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))

'''函数作为返回值2'''
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)
print(h)
print(h())
3.'''匿名函数(lambda函数)
'''
def g(x):
    return x*x
r =map(g,[1,2,3,4,5])
print(list(r))

r=map(lambda x:x*x*x,[1,2,3,4,5])
print(list(r))

f=lambda x,y:x+y
print(f(2,3))

#练习用匿名函数重写
def is_odd(n):
    return n%2 == 1

t=lambda n:n%2==1
print(t(6))
4.'''
装饰器decorator
在代码运行期间动态增加功能的方式,称为装饰器
'''

#创建一个装饰器,装饰函数func
def log(func):
    def wrapper(*args,**kw):
        print('调用函数:%s'%func.__name__)
        return func(*args,**kw)
    return wrapper

import time
@log   #now=log(now)
def now():
    #print('调用函数:%s'%now.__name__)
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
now()
#f=log(now)
#f()
'''
print(now)
print(now.__name__)
now.__name__='现在'
print(f.__name__)

def no():
    print(time.asctime())
no()
print(time.asctime())
'''

#可以传参的装饰器
def log2(text):
    def decorator(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('调用函数:%s'%now.__name__)
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
now2()
print(now2.__name__)

21:-23:00
做作业
# 5. 利用map函数将字符串首字母变为大写
# ['tom','MIKE','Tony'] -> ['Tom','Mike','Tony']



def h (x):
    t=''
    l=len(x)
    if  97 <= ord(x[0]) <= 122:
        s=chr(ord(x[0])-32)
        t+=s
    elif 65 <= ord(x[0]) <= 90:
        t+=x[0]
    for i in range(1,l):
        if 97 <= ord(x[i]) <= 122:
            t+=x[i]
        elif 65 <= ord(x[i]) <= 90: #大写转大写
            s=chr(ord(x[i])+32)   
            t+=s                     
    return t
s = map(h,['tOM','MIKe','TONY'])
print(list(s))


def g(x):
    return upper(x[0])+lower(x[1:])

s = map(h,['tOM','MIKe','TONY'])
print(list(s))


'''     选做题    '''
# 6. 使用生成器构造一个自然数序列 1,2,3,4,5.....
import time
def nature():
    n=1
    while True:
        yield n
        n+=1
        time.sleep(1)
g=nature()
print(next(g))
print(next(g))
print(next(g))



# for i in n:
#     print(i)
#     time.sleep(1)


# 7. 使用闭包实现 计数器函数

# 不安全
# count = 0
# count += 1
def counter():
    count=[0]
    def add():
        count[0]+=1
        return count[0]
    return add

h=counter()
print(h())
print(h())
print(h())

二、遇到的问题
使用闭包实现计数器
三、处理方式(讨论解决)
def counter():
    count=[0]
    def add():
        count[0]+=1
        return count[0]
    return add

h=counter()
print(h())
print(h())

回复

使用道具 举报

关注0

粉丝0

帖子15

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

客服电话:17792550360

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

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

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