文章目录
- 1.有一个列表[3,4,1,2,5,6,6,5,4,3,3]请写一个函数,找出该列表中没有重复的数的总和
- 2.字典根据键从小到大排序
- 3.map(str,[1,2,3,4,5,6,7,8,9]) 输出是什么
- 4.利用collections库的Counter方法统计字符串每个字符出现的次数"kjalfj;你ldsjafl;你hdsllfdhg;lahfbl;hl;ahlf;h"
- 5.请简述标准库中functools.wraps的作用
- 6.请给出下面代码片段的输出结果
- 7.filter方法求出列表所有奇数并构造新列表,a = [1,2,3,4,5,6,7,8,9,10]
- 8.请写出log实现(主要功能时打印函数名)
- 9.log 日志中,我们需要时间戳记录error,warning等发生的时间,请用datetime模块打印当前时间戳
- 10.选择代码运行结果
1.有一个列表[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
2.字典根据键从小到大排序
dict={“name”:“zs” , “age”:18, “city”:“深圳”, “tel”:“1362626627”}
3.map(str,[1,2,3,4,5,6,7,8,9]) 输出是什么
关于map函数上次面试题有讲,还不清楚的可以看看复习巩固一下。
4.利用collections库的Counter方法统计字符串每个字符出现的次数"kjalfj;你ldsjafl;你hdsllfdhg;lahfbl;hl;ahlf;h"
5.请简述标准库中functools.wraps的作用
Python装饰器(decorator)在实现的时候,有一些细节需要被注意。例如,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)。这样有时候会对程序造成一些不便,所以,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。
直接上代码看效果:
# 定义一个最简单的装饰器
def user_login_data(f):
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
# 用装饰器装饰以下两个函数
@user_login_data
def num1():
print("aaa")
@user_login_data
def num2():
print("bbbb")
if __name__ == '__main__':
print(num1.__name__)
print(num2.__name__)
#以上代码的输出结果为:
wrapper
wrapper
由此函数使用装饰器时,函数的函数名即 __name__已经被装饰器改变.
一般定义装饰器的话可以不用考虑这点,但是如果多个函数被两个装饰器装饰时就报错,因为两个函数名一样,第二个函数再去装饰的话就报错.
解决方案就是引入 functools.wraps ,以上代码的解决如下:
def user_login_data(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
增加@functools.wraps(f), 可以保持当前装饰器去装饰的函数的 name 的值不变
以上输出结果就是:
num1
num2
6.请给出下面代码片段的输出结果
def func():
try:
raise ValueError("something wrong")
except ValueError as e:
print("Error occurred")
return
finally:
print("Done")
func()
#输出结果:
# Error occurred
# Done
7.filter方法求出列表所有奇数并构造新列表,a = [1,2,3,4,5,6,7,8,9,10]
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回True 或 False,最后将返回True的元素放到新列表
a = [1,2,3,4,5,6,7,8,9,10]
def func(a):
return a%2==1
a = list(filter(func,a))
print(a) # [1, 3, 5, 7, 9]
8.请写出log实现(主要功能时打印函数名)
@log
def now():
print("2020-12-14")
now()
# 输出
'''
call now()
2020-12-14
'''
参考代码:
def log(f):
def inner(*args,**kwargs):
print('call now()')
return f(*args,**kwargs)
return inner
@log
def now():
print("2020-12-14")
now()
9.log 日志中,我们需要时间戳记录error,warning等发生的时间,请用datetime模块打印当前时间戳
import datetime
print(datetime.datetime.now())
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #当前时间戳
a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' 星期' + str(datetime.datetime.now().isoweekday())
print(a)
'''
输出结果:
2020-12-14 14:39:06.758521
2020-12-14 14:39:06
2020-12-14 14:39:06 星期1
'''
10.选择代码运行结果
country_counter = {}
def addone(country):
if country in country_counter:
country_counter[country] += 1
else:
country_counter[country] = 1
addone("Japan")
addone('china')
addone("china")
print(len(country_counter))
'''
A. 0
B. 1
C. 2
D. 3
E. 4
'''
# 答案 C