菁英科技(卓目鸟学苑)- 专注软件测试菁英教育
标题: python_武浩杰 [打印本页]
作者: 海底月是天上月 时间: 2021-1-21 19:43
标题: python_武浩杰
'''生成器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))
# 如果生成器中的元素已经取完了,则抛出stopiteration异常
print(next(t))
g = (x*x for x in range(10))
for i in g:
print(i)
'''
利用函数实现生成器
'''
6. 使用生成器构造一个自然数序列 1,2,3,4,5.....
import time
def nature():
n = 1
while True:
yield n # 1.返回n的值; 2.立即暂停函数的执行
n += 1
time.sleep(1)
g = nature()
for e in g:
print(e)
time.sleep(1)
print(next(g))
'''
高阶函数
函数名本质上就是一个指向该函数的变量
# '''
# print(abs(-5))
# print(abs)
# f = abs
# print(f(-5))
# abs = 7
# print(abs)
# print(abs(-5)) 错的
'''
函数作为参数传入
一个函数A可以接受另一个函数B作为参数, 我们把这个函数称为高阶函数
'''
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))
def l(m):
return m**3
print(add(3,4,l))
# 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))
print(s(1,3,5,7))
'''
lazy_s()函数定义了函数s(),而是()函数中又引用外部函数lazy_s()的参数 arge
当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())
'''
匿名函数
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
n = lambda n: n%2 == 1
print(n(4))
'''
装饰器Decorator
在代码运行期间动态增加功能的方式,就称为装饰器
'''
# 创建一个装饰器
def log(func):
'''
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()
# 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):
# wrapper.__name__ = func.__name__
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'))
now:2()
欢迎光临 菁英科技(卓目鸟学苑)- 专注软件测试菁英教育 (http://www.zmnxy.com/) |
Powered by Discuz! X3.4 |