列表生成式练习
请修改列表生成式,通过添加if语句保证列表生成式能正确执行:L1 = ['Hello', 'World', 18, 'Apple', None]L2 = []for x in L1: if instance(x): L2.append(x) print(L2)
map/reduce练习
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。 输入:['adam',‘LISA', 'barT'], 输出:['Adam','Lisa','Bart']:def normalize(name): return "%s" % (name[:1].upper() + name[1:])L1 = ['adam', 'LISA', 'barT']L2 = list(map(normalize, L1))print(L2)
Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:
from functools import reducedef prod(L): def product(x, y): return x * y return reduce(product, L)print(prod(L))
利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456:
str2float函数实现转自from functools import reduceCHAR_TO_FLOAT = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '.': -1}def str2float(s): nums = map(lambda ch: CHAR_TO_FLOAT[ch], s) point = 0 def to_float(f, n): nonlocal point if n == -1: point = 1 return f if point == 0: return f * 10 + n else: point = point * 10 return f + n / point return reduce(to_float, nums, 0.0) print("str2float('\123.456\') = ", str2float('123.456'))
filter练习
回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数:def is_palidrome(n): I, m = n, 0 while I: m = m*10 + I%10 I = I // 10 #返I的整数部分,抛弃余数 return(n == m)output = filter(is_palindrome, range(1, 1000))print(output)
sort()函数练习
假设我们用一组tuple表示学生名字和成绩: L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 请用sorted()对上述列表分别按名字排序:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t): return t[0] #返回名字L2 = sorted(L, key=by_name)print(L2)
再按成绩从高到低排序:
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t): return t[1] #返回成绩L2 = sorted(L, key = by_name, reverse = True)print(L2)
请编写一个decorator, 能在函数调用的前后打印出'begin call'和'end call'的日志:
转自import functools def log(func): @functools.wraps(func) # wrap '__name__' def wrapper(*args, **kw): print("begin call [%s]" % (func.__name__)) func_tmp = func(*args, **kw) print("end call [%s]" % (func.__name__)) return func_tmp return wrapper @log # 借助Python的@语法,把decorator置于函数的定义处 def hello(): print("hello") hello()