python面试题汇总--函数部分
函数:
2019/8/05-每日10道题!
-
通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011” 十进制转换成二进制:v = 18 八进制转换成十进制:v = “011” 十进制转换成八进制:v = 30 十六进制转换成十进制:v = “0x12” 十进制转换成十六进制:v = 87
-
1. 二进制转换成十进制:v=“0b1111011” 2. 3. v="1111011" 4. print(int(v,2)) 5. 结果:123 6. 7. 十进制转换成二进制:V=18 8. v=18 9. print(bin(v)) 10. 结果: 0b10010 11. 12. 八进制转换成十进制:v=“011” 13. 14. print(int('011',8)) 15. 结果: 9 16. 17. 十进制转换成八进制:v=30 18. 19. print(oct(30)) 20. 结果: 0o36 21. 22. 十六进制转换成十进制:V=“0x12” 23. print(int('0x12',16)) 24. 结果: 18 25. 26. 十进制转换成十六进制:v=87 27. print(hex(87)) 28. 结果: 29. 0x57
-
-
Python 递归的最大层数?
-
默认是1000 目前计算机达到最高的是 997/998
-
-
列举常见的内置函数?
-
lambda fillter zip map sorted
--------所有
-
-
filter、map、reduce 的作用?
- filter---过滤条件用的
- map--将内容里的元素 逐个处理
- reduce--用于做累计算的
-
一行代码实现 9*9 乘法表
- print(''.join(['{}*{}={}\n'.format(i,x,i*x) if i==x '{}*{}={}\t'.format(i,x,i*x) for i in range(1,10) for x in (1,i+1)]))
-
什么是闭包?
- 在一个嵌套函数内,内层函数可以使用外层函数(非全局变量)的变量,叫闭包
-
简述 生成器、迭代器、装饰器以及应用场景?
-
生成器和迭代器应用场景相似----都是在对较大数据循环遍历,我们用的了他就会给我们,不用会保持静态样子----很大节省内存本身空间资源 装饰器---我们在给一个函数添加一份功能,但又想保留函数原始样子
-
-
使用生成器编写 fib 函数, 函数声明为 fib(max), 输入一个参数 max 值, 使得 该函数可以这样调用。
1. for i in range(0,100):
2. print fib(1000)
并产生如下结果(斐波那契数列),1,1,2,3,5,8,13,21...
-
def fib(num): a,b=0,1 while b<num: yield b a,b=b,a+b for i in fib(1000) print(i)
-
-
一行代码, 通过 filter 和 lambda 函数输出以下列表索引为基数对应的元
素。
list_a=[12,213,22,2,2,2,22,2,2,32]
-
list_a=[12,213,22,2,2,2,22,2,2,32] #主要考察 enumerate 与filter&lambda联合使用 print([i[1] for i in filter(lambda x:x[0]%2==1,enumerate(list_a))])
-
-
写一个base62encode函数,62进制。
即:0123456789AB..Zab..z(10 个数字+26 个大写字母+26 个小写字母)。 base62encode(1)=1
base62encode(61) = z
base62encode(62)=10-
1 #字母和数字的获取方式一 2 s='' 3 for i in range(10): 4 s+=str(i) 5 for i in range(65,91): 6 s+=chr(i) 7 for i in range(97,123): 8 s+=chr(i) 9 #字母和数字的获取方式二 10 import string 11 lower=string.ascii_lowercase 12 upper=string.ascii_uppercase 13 digits=string.digits 14 s=digits+upper+lower 15 16 17 def base62encode(n): 18 li=[] 19 while n: 20 n,y=divmod(n,62) 21 print(n,y) 22 li.append(s[y]) 23 return ''.join(reversed(li)) 24 print(base62encode(62))
-
2019/8/06-每日10道题!
-
请实现一个装饰器,限制该函数被调用的频率,如10秒一次
-
import time def wrapper(func): def inner(*args,**kwargs): time.sleep(10) func(*args,**kwargs) return inner @wrapper def func(): print('a') func()
-
-
请实现一个装饰器,通过一次调用使函数重复执行5次。
-
import time def wrapper(func): def inner(*args,**kwargs): for i in range(5): time.sleep(0.5) func(*args,**kwargs) return inner @wrapper def func(): print('a') func()
-
-
python 一行 print 出 1~100 偶数的列表, (列表推导式, filter 均可)
-
print(list(filter(lambda x:x%2==0,range(101))))
-
-
解释生成器与函数的不同,并实现和简单使用generator.
- 生成器与函数不同在于 返回--return 代表终止符,而生成器中yield 代表挂起--标记意思,以便下次再执行从标记位置继续执行
-
# 简单实现生成器 def dec(): n=0 for i in range(10): yield n n+=i for i in dec(): print(i)
-
列表推导式和生成器表达式 [i % 2 for i in range(10)] 和 (i % 2 for i in
range(10)) 输出结果分别是什么?
,生成器地址
-
map(str,[1,2,3,4,5,6,7,8,9]) 输出是什么?
- 生成器地址
-
python 中定义函数时如何书写可变参数和关键字参数?
-
def func(*args,**kwargs): print(args,kwargs)#('1', '2') {'a': 1, 'b': 2} func('1','2',a=1,b=2)
-
-
Python3.5 中 enumerate 的意思是什么?枚举 默认打印可迭代函数的索引和对应元素--默认值默认从0
-
说说Python中的装饰器,迭代器的用法:述下dict的item方法与 iteritems 方法的不同
-
装饰器是在不修改原函数的基础上添加一个功能 迭代器是读取大文件时使用的 python3中没有iteritems items和iteritems大致相同,只是items返回的是一个列表,iteritems返回的是一个迭代器
-
-
是否使用过functools中的函数?其作用是什么?
-
functools.wraps() 在装饰器中用过,如果不能使用wraps 则原始函数的 __name__,__doc__值将会丢失 functools.reduce() 第一个参数是一个函数,第二个参数是一个可迭代对象 from functools import reduce a=reduce(lambda x,y:x+y,range(10)) print(a)
-
2019/8/07-每日10道题!
-
如何判断一个值是函数还是方法?
-
使用type()来判断,如果是method为方法,如果是function则是函数。 括号中写入变量名,,不要有括号什么别的符号之类的
-
-
请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
-
def func(a): res=a.split('.') print(int(''.join(res))) func(a='10.3.9.12')
-
10 00001010
3 00000011
9 00001001 12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 000 01100 = ?
-
lambda 表达式格式以及应用场景?
-
省去函数命令的困扰 #lambda 存在意义就是对简单函数的简洁表示 #列表生成式配合 #min/max/filter/map/sorted/reduce/ #min/max/sorted li=[] #s=min/max/sorted(li,key=lambda x:x) filter 过滤 map 映射 li=[] s=list(map/filter/(lambda x:x*x,li(,li--map)))
-
-
pass 的作用?
- 通过,暂时搁浅,标记回来完成未完成代码
-
*arg 和**kwarg 作用?
- 聚合--把多余位置参数聚合成一个元祖,把关键字参数变成字典
-
如何在函数中设置一个全局变量?
-
def func()
global a
a=10
func()
print(a)
-
-
请写出打印结果:
-
1. # 例 1
2. 3. 4. 5. 6. 7. 8. 9.
def func(a,b=[]): b.append(a)
print(b) func(1)
func(1) func(1) func(1)
10. 11. 12. 13. 14. 15.
# 例 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,1] {1:v} {1:v.2:v}
28. 求结果:lambda
1. def num():
2. return [lambda x:i*x for i in range(4)]
3. print([m(2) for m in num()])
29. 简述yield和yieldfrom关键字。
30. 有processFunc变量,初始化为processFunc=collapseand(lambdas:"
".join(s.split())) or (lambda s:s)
调用上下文如下
-
collapse = True
-
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
-
print processFunc("i\tam\ntest\tobject !")
4.
-
collapse = False
-
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
-
print processFunc("i\tam\ntest\tobject !")
以上代码会在控制台输出什么?
2019/8/08-每日10道题!
31. 请给出下面代码的输出结果
4.
7. |
8. a = [] |
-
全局变量和局部变量的区别,如何给function里面的一个全局变量赋值
- 局部变量外就是全局变量
- 函数内部叫局部变量
- global a--a=10
-
什么是lambda函数,下面这段代码的输出是什么?---Python3 因为filter外没套List 所以打印是该函数的地址
-
1. nums = range(2,20)
2. for i in nums:
3. nums = filter(lambda x:x==i or x % i, nums) 4. nums
-
-
指出下面程序存在的问题
-
1. def Lastllindextem(src, index):
-
'''''请返回传入 src 使用空格或者"\"切分后的倒数第 index 个子串'''
-
return src.split("\\")[-index]
- Lastllindextem(src, index):
-
-
-
有一个数组[3,4,1,2,5,6,6,5,4,3,3]请写一个函数,找出该数组中没有重复的数 的总和. (上面数据的么有重复的总和为 1+2=3)
lst=[3,4,1,2,5,6,6,5,4,3,3] from functools import reduce l=list(set(lst)) print(reduce(lambda x,y:x+y,l))
正确写法--collections--Counter
from collections import Counter
lis = [3,4,1,2,5,6,6,5,4,3,3]
def foo():
num = 0
for k, v in Counter(lis).items():
print(k,v)#6 2
print(Counter(lis))#Counter({3: 3, 4: 2, 5: 2, 6: 2, 1: 1, 2: 1})
if v == 1:
num += k
print(Counter(lis).get(num))
foo()
求打印结果 D
-
arr = [1,2,3]
-
def bar():
-
arr+=[5]
4.
-
bar()
-
print arr
A. error B. [5] C. [1,2,3] D. [1,2,3,5]
37. 请写一个函数,计算出如下几个字母代表的数字 AB-CD=EF
EF+GH = PPP
38. 请给出下面代码片段的输出
-
请简述标准库中functools.wraps的作用
- 如果不写wraps 会让原始函数__name__ ,doc值丢失的
-
标准 Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring
-
- 如果不写wraps 会让原始函数__name__ ,doc值丢失的
-
请给出下面代码片段的输出
def test(): try: raise ValueError("something wrong") except ValueError as e: print("Error occurred") return finally: print("Done") test()
Error occurred
Done
2019/8/09-每日10道题!
41. 下面的函数,那些会输出1,2,3三个数字 --第二个 第四个
42. 以下函数需要在其中引用一个全局变量k,请填写语句
1. def fun():
2. ___global k_______
3. k=k+1
43. 请把以下函数转化为pythonlambda匿名函数
1. def add(x,y):
2. return x+y
lst=[3,4,1,2,5,6,6,5,4,3,3] from functools import reduce l=list(set(lst)) print(reduce(lambda x,y:x+y,l))
44. 阅读以下代码,并写出程序的输出结果 {'a':0,'b':1,'c':2}
my_dict = {"a":0,"b":1} 2. |
3. 4. 5. 6. 7. 8. 9. def func(d): d["a"]=1 return d func(my_dict) my_dict["c"]=2 print my_dict |
45. 填空题
2 8 3c-1---不可以被return ERROR 10 24 -2----负数不可以被return ERROR
46. def(a, b=[])这种写法有什么陷阱? -
这种陷阱就是默认参数b=[],在调用这个函数没有传新的参数进来,用的都是b这个列表.
47. 函数
-
def add_end(l=[]):
-
l.append("end")
-
return l
4.
-
add_end() # 输出什么【end】
-
add_end() # 再次调用输出什么? 为什么 [end,end]
48. 函数参数*args,**kwargs的作用是什么
1. def func(a,b,c=0,*args,**kwargs):
2. pass
*args 是把多余的位置参数聚集并返回一个元祖,
**kwargs --是把关键字参数 返回成一个字典
49. 可变参数定义*args,**kwargs的区别是什么?并且写出下边代码的输入内
容
args,(1,2,3,4)----kwargs, args, ----kwargs, {'a':1,'b':2,'c':3} args,(1,2,3,4)----kwargs,{'a':1,'b':2,'c':3} args,('a',1,None)-----kwwags,,{'a':1,'b':'2','c':3}
50. 请写出log实现(主要功能时打印函数名)
|
2019/8/10-每日10道题!
51. Python 如何定义一个函数 C
A. class <name>(<Type> arg1, <type> arg2, ...)
B. function <name>(arg1,arg2,...)
C. def <name>(arg1, arg2,...)
D. def <name>(<type> arg1, <type> arg2...)
52. 选择代码运行结果 C
53. 选择输出结果 C
54. 下面程序的输出结果是 24
-
什么是lambda表达式?
-
匿名函数 ---解决对函数命名困扰 一般与内置函数搭配使用---使代码变得简洁清晰
-
-
以下代码输出是什么,请给出答案并解释
-
有 0 < x <= 10, 10 < x <= 20, 20 < x <= 30, .,190 < x〈= 200,200 < x 这样的 21 个区间分别对应 1-21 二十一个级别,请编写一个函数 level (x)根据输 入数值返回对应级别。
-
写函数 有一个数据结构如下所示,请编写一个函数从该结构数据中返画由指定的
字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。
1. 2. 3. 4. 5. data:{ "time":"2016-08-05T13:13:05", "some_id":"ID1234", "grp1":{"fld1":1, "fld2":2,}, "xxx2":{"fld3":0, "fld4":0.4,}, |
|
9. } |
59. 补全代码
若要将 N 个 task 分配给 N 个 worker 同时去完成, 每个 worker 分别都可以承 担这 N 个 task,但费用不同. 下面的程序用回溯法计算总费用最小的一种工作分 配方案, 在该方案中, 为每个 worker 分配 1 个 task.程序中,N 个 task 从 0 开 始顺序编号, N 个 worker 也从 0 开始顺序编号, 主要的变量说明如下:
-
- ci:将任务 i 分配给 worker j 的费用
-
- task[i]: 值为 0 表示 task i 未分配, 值为 j 表示 task,i 分配给 worker j
-
- worker[k] 值为 0 表示未分配 task, 值为 1 表示 worker k 已分配 task;
-
- mincost: 最小总费用
程序
-
写个函数接收一个文件夹名称作为参数, 显示文件夹中文件的路径, 以及 其中包含文件夹中文件的路径。
N=8 mincosr = 65535 worker = [] task = [] temp = [] c=[] def plan(k, cost): global mincosr if __(1)__ and cost<mincosr: mincosr = cost for i in xrange(N): temp[i] = task[i]
else:
for i in xrange(N)
if worker[i] ==0 and __(2)__: worker[i] = 1
task[k] = __(3)__ plan(__(4)__,
cost+c[k][i]) __(5)__
task[k] = 0
def main(): for i in xrange(N):
worker.append(0)
task.append(0)
temp.append(0)
c.append(0) for j in xrange(N): print "请输入 worker"+str(i)+"完成 task" + str(j)+"的花费"
input_value = input() c[i].append(int(input_value)) plan(0,0) print('\n 最小费用: '+str(mincosr))
for i in xrange(N): print "Task"+str(i)+"is assigned to Worker" + str(temp[i])
if __name__ == "__main__": main()