Python面试题函数
第二章 函数
- 通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
十进制转换成二进制:v = 18
八进制转换成十进制:v = “011”
十进制转换成八进制:v = 30
十六进制转换成十进制:v = “0x12”
十进制转换成十六进制:v = 87
答:
- Python递归的最大层数?
答:官方表明,递归的最大层数是1000,
我们本地测试是998或997
- 列举常见的内置函数?
答:
- filter、map、reduce的作用?
答: filter 的作用是过滤条件
map 的作用是将内容里的元素逐个做处理
reduce 是用于做累计算
- 什么是闭包?
答:1.一个嵌套函数
2.内部函数使用外部非全局的变量
- 简述 生成器、迭代器、装饰器以及应用场景?
答:生成器(迭代器)应用场景:
读取(获取)较大的文件和内容的时候使用,防止内存溢出
装饰器应用场景:
自定义用户认证的时候
flask框架路由系统
Django认证
- 使用生成器编写fib函数, 函数声明为fib(max), 输入一个参数max值, 使得该函数可以这样调用。
并产生如下结果(斐波那契数列),1,1,2,3,5,8,13,21...
答:
- 一行代码, 通过filter和lambda函数输出以下列表索引为基数对应的元素。
list_a=[12,213,22,2,2,2,22,2,2,32]
答:
- 写一个base62encode函数, 62进制。
即:0123456789AB..Zab..z(10个数字+26个大写字母+26个小写字母)。
base62encode(1)=1
base62encode(61) = z
base62encode(62)=10
答:
- 请实现一个装饰器, 限制该函数被调用的频率, 如10秒一次
答:
- 请实现一个装饰器, 通过一次调用使函数重复执行5次。
答:
- python一行print出1~100偶数的列表, (列表推导式, filter均可)
答:
- 解释生成器与函数的不同, 并实现和简单使用generator.
答:
- 列表推导式和生成器表达式 [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中定义函数时如何书写可变参数和关键字参数?
答:
- Python3.5中enumerate的意思是什么?
答:
- 说说Python中的装饰器,迭代器的用法:描述下dict的item方法与iteritems方法的不同
答: 装饰器是在不修改原函数的基础上添加一个功能
迭代器是读取大文件时使用的
python3中没有iteritems
items和iteritems大致相同,只是items返回的是一个列表,iteritems返回的是一个迭代器。
- 是否使用过functools中的函数?其作用是什么?
答:reduce
作用是进行累计算
wraps
作用是消除装饰带来的副作用(我们在调用被装饰的函数其实已经不是它本身,我们使用wraps就能消除这个问题)
- 如何判断一个值是函数还是方法?
- 请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010
00000011 00001001 00001100 = ?
答:
- lambda表达式格式以及应用场景?
答:
- pass的作用?
- *arg和**kwarg作用?
答:当你在编写一个程序时,执行语句部分思路还没有完成,这时你可以用pass语句来占位,也可以当做是一个标记,是要过后来完成的代码。
程序当中 ... 功能和pass功能一
答:*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现)
**kwargs:(表示的就是实参中按照关键字传值把多余的传值以字典的方式呈现)
- 如何在函数中设置一个全局变量 ?
答:
- 请写出打印结果:
- 求结果: lambda
答:[6,6,6,6]
- 简述 yield和yield from关键字。
答:yield是将内容一次性返回
yield from 是将可迭代对象中的元素逐个返回
- 有processFunc变量 ,初始化为processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
调用上下文如下
以上代码会在控制台输出什么?
答:
- 请给出下面代码的输出结果
答:1,[1]
- 全局变量和局部变量的区别, 如何给function里面的一个全局变量赋值
答:
- 什么是lambda函数, 下面这段代码的输出是什么
答:
- 指出下面程序存在的问题
答:
- 有一个数组[3,4,1,2,5,6,6,5,4,3,3] 请写一个函数, 找出该数组中没有重复的数的总和. (上面数据的么有重复的总和为1+2=3)
答:
- 求打印结果
- A. error
B. [5]
C. [1,2,3]
D. [1,2,3,5]
答:D
- 请写一个函数, 计算出如下几个字母代表的数字
AB-CD=EF
EF+GH = PPP
答:
- 请给出下面代码片段的输出
答:# 结果:
HI
Yo
ROCK&ROLL
BYE
- 请简述标准库中functools.wraps的作用
答:Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring
- 请给出下面代码片段的输出
答:# 结果
Error occurred
Don
- 下面的函数,那些会输出1,2,3三个数字
答:
- 以下函数需要在其中引用一个全局变量k, 请填写语句
答:global k
- 请把以下函数转化为python lambda匿名函数
答: lambda x,y:x+y
- 阅读以下代码, 并写出程序的输出结果
答:{'a': 0, 'b': 1, 'c': 2}
- 填空题
答:4,
8,
Error
10,
24,
Error
- def(a, b=[])这种写法有什么陷阱?
答:这种陷阱就是默认参数b=[],在调用这个函数没有传新的参数进来,用的都是b这个列表.
- 函数
答:
- 函数参数 *args,**kwargs的作用是什么
答:*args动态接收位置参数
** kwargs动态接收关键字参数
- 可变参数定义 *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)
kwargs= {'a': 1, 'b': '2', 'c': 3}
---------------
- 请写出log实现(主要功能时打印函数名)
答:
- Python如何定义一个函数
- A. class <name>(<Type> arg1, <type> arg2, ...)
B. function <name>(arg1,arg2,...)
C. def <name>(arg1, arg2,...)
D. def <name>(<type> arg1, <type> arg2...)
答:C
- 选择代码运行结果
-
A. 0
B. 1
C. 2
D. 3
E. 4
答:C
- 选择输出结果
-
A. str
B. int
C. tuple
D. list
E. dict
答:C
- 下面程序的输出结果是
答:24
- 什么是lambda表达式?
答:匿名函数,一行代码的函数
- 以下代码输出是什么,请给出答案并解释
请修改multipliers的定义来产生期望的结果
答:
- 有 0 < x <= 10, 10 < x <= 20, 20 < x <= 30, .,190 < x〈= 200,200 < x这样的21个区间分别对应1-21二十一个级别,请编写一个函数 level (x)根据输入数值返回对应级别。
答:
- 写函数
有一个数据结构如下所示,请编写一个函数从该结构数据中返画由指定的 字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。
答:
- 补全代码
若要将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: 最小总费用
程序
写个函数接收一个文件夹名称作为参数, 显示文件夹中文件的路径, 以及其中包含文件夹中文件的路径。