请实现一个装饰器,通过一次调用使函数重复执行5次。
# 答案
def again_func(func):
def inner(*args, **kwargs):
for line in range(5):
func(*args, **kwargs)
return inner
@again_func
def func1():
print('from func1...')
func1()
python 一行 print 出 1~100 偶数的列表, (列表推导式, filter 均可)
# 答案
print([i for i in range(1, 101) if i % 2 == 0])
print(list(filter(lambda x: x % 2 == 0, range(1, 101))))
解释生成器与函数的不同,并实现和简单使用generator
# 答案
'''
生成器和函数的主要区别在于函数return avalue,生成器yield a value,同事标记或记忆point of the yield 以便在下次调用时从标记点恢复执行,yield使用函数转换成生成器,而生成器反过来有返回迭代器。
'''
请写出打印结果:
# 例 1
def func(a,b=[]):
b.append(a)
print(b)
func(1)
func(1)
func(1)
func(1)
# 例 2
def func(a,b={}):
b[a] = 'v'
print(b)
func(1)
func(2)
# 答案:
'''
例1:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
例2:
{1: 'v'}
{1: 'v', 2: 'v'}
'''
简述yield和yieldfrom关键字。
# 答案:
'''
yield:
当一个函数中出现yield关键字的时候,那么这个函数就是一个生成器。可以用for循环或者next()函数来迭代。
yield from:
简单地说,yield from generator 。实际上就是返回另外一个生成器
'''
以下代码输出结果为:
# 调用上下文如下
collapse = True
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
print(processFunc("i\tam\ntest\tobject !"))
collapse = False
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
print(processFunc("i\tam\ntest\tobject !"))
# 以上代码会在控制台输出什么?
# 答案:
'''
i am test object !
i am
test object !
'''
请给出下面代码的输出结果
a = 1
def fun(a):
a=2
fun(a)
print(a)
a = []
def fun(a):
a.append(1)
fun(a)
print(a)
# 答案
1
[1]
什么是lambda函数,下面这段代码的输出是什么
nums = range(2,20)
for i in nums:
nums = filter(lambda x:x==i or x % i, nums)
print(list(nums))
# 答案:
'''
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
'''
指出下面程序存在的问题
def Lastllindextem(src, index):
'''请返回传入 src 使用空格或者"\"切分后的倒数第 index 个子串'''
return src.split('\')[-index]
# 答案
\会是转义符的,会有问题,需要\\
有一个列表[3,4,1,2,5,6,6,5,4,3,3]请写一个函数,找出该列表中没有重复的数的总和。
def func(l):
res = []
sum_s = 0
for i in l:
if i not in res:
res.append(i)
sum_s += i
return sum_s
list1 = [3, 4, 1, 2, 5, 6, 6, 5, 4, 3, 3]
print(func(list1)) # 21