defot_sort(num):return num % 2 == 0
print([i for i in filter(ot_sort, range(1,101))])
print([i for i in range(2,101,2)]) ##列表生成式更简单
3.输出1-100之间的素数(合数)
defprime(I):if I <= 0:
returnFalseelif I == 1or I == 2:
returnTrueelse:
for item in range(2, I):
if I % item == 0:
returnFalseelse:
returnTrue
print([i for i in filter(prime, range(1,101))])
defreverce(num):##将数字转化为0、1if num == 0:
return0else:
return1
n = int(input('length:')) ##字符长度,即列表长度
l = [int(input('num:')) for i in range(n)] ##生成列表
print(sorted(l, key=reverce))
##下面结果为:7 2 0 0 而不是:2 7 0 0,说明sort只识别0、1,不识别转化前的数字
print(sorted(l, key=reverce,reverse=True))
五、装饰器
1.计算test函数的运行时间
import time ##导入time模块defcompute_time(fun):##闭包,函数里嵌套函数defwrapper():
start = time.time() ##调用函数前的时间戳
fun()
end = time.time() ##调用函数后的时间戳
print('%s Time is %ss' % (fun.__name__, end - start))
return wrapper
##注意:使用语法糖的函数必须在test函数前定义,脚本按前后顺序执行@compute_time ##语法糖,相当于test = compute_time(test)deftest():
print('gun,fastly')
time.sleep(1)
# test = compute_time(test)
test()
2.要求显示日志:时间 函数名 执行时间 执行结果
import time
deflog(fun):defwrapper():
start = time.time()
result = fun()
end = time.time()
print(time.ctime(), fun.__name__, end - start, result)
##time.ctime()显示当前时间,fun.__name__显示函数名return wrapper
@logdeftest():
time.sleep(2) ##休眠时间return'it is a test'@logdefphone():
time.sleep(0.2)
return'New iPhone is 803/804'
test() #3调用函数
phone()
3.解包
*args : 解包元组
**kwargs : 解包字典
注意:python2:解包在函数中可以执行,print则不行;python3:函数、print均可
In [20]: l=[1,2,3]
In [21]: print(*l) ##直接打印会报错
File "<ipython-input-21-2ef6412e828d>", line 1
print(*l)
^
SyntaxError: invalid syntax
In [22]: deftest(*args):
....: print(args)
....:
In [23]: test(l) ##但是函数可以
([1, 2, 3],)
4.要求:函数具备可变参数、关键字参数
import time
import random
deflog(fun):##装饰器加入可变参数、关键字参数,防止调用不同函数报错defwrapper(*args, **kwargs):##形参
start = time.time()
result = fun(*args, **kwargs) ##实参,函数传入的参数
end = time.time() ##time.ctime()当前时间
print(time.ctime(), fun.__name__, end - start, result)
return wrapper
@logdefSum(x, y):
time.sleep(random.random()) ##0-1之间的随机数return x * y
@logdeftest():
time.sleep(2)
return'it is a test'
Sum(2,3) ##装饰器修改后,可调用不同参数的函数
test()
5.函数说明
import functools ##函数工具deflog(fun):@functools.wraps(fun) ##函数log的说明不改变Sum函数原有属性defwrapper(*args, **kwargs):##形参"""
this is a wrapper
"""passreturn wrapper
defSum(x, y):""" ##Sum函数属性
add function ##函数的参数说明
:param x: num1 ---> int or float
:param y: num ---> int or float
:return: num1 + num 2 ##返回值说明
"""pass