python面试题汇总--函数部分

函数:

2019/8/05-每日10道题!

  1. 通过代码实现如下转换:

    二进制转换成十进制:v = “0b1111011” 十进制转换成二进制:v = 18 八进制转换成十进制:v = “011” 十进制转换成八进制:v = 30 十六进制转换成十进制:v = “0x12” 十进制转换成十六进制:v = 87

    1. 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=“01113.      
      14.    print(int('011',8))  
      15.    结果: 9  
      16.      
      17.    十进制转换成八进制:v=30  
      18.      
      19.    print(oct(30))  
      20.    结果: 0o36  
      21.      
      22.    十六进制转换成十进制:V=“0x1223.    print(int('0x12',16))  
      24.    结果:  18  
      25.      
      26.    十进制转换成十六进制:v=87  
      27.    print(hex(87))  
      28.    结果:  
      29.    0x57  

       

  2. Python 递归的最大层数?

    1.   
      默认是1000
      
      目前计算机达到最高的是 997/998

       

  3. 列举常见的内置函数?

    1. lambda
      fillter
      zip
      map
      sorted

      --------所有

       

       

       

  4. filter、map、reduce 的作用?

    1. filter---过滤条件用的
    2. map--将内容里的元素 逐个处理
    3. reduce--用于做累计算的
  5. 一行代码实现 9*9 乘法表

    1. 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)]))
  6. 什么是闭包?

    1. 在一个嵌套函数内,内层函数可以使用外层函数(非全局变量)的变量,叫闭包
  7. 简述 生成器、迭代器、装饰器以及应用场景?

    1. 生成器和迭代器应用场景相似----都是在对较大数据循环遍历,我们用的了他就会给我们,不用会保持静态样子----很大节省内存本身空间资源
      
      装饰器---我们在给一个函数添加一份功能,但又想保留函数原始样子

       

  8. 使用生成器编写 fib 函数, 函数声明为 fib(max), 输入一个参数 max 值, 使得 该函数可以这样调用。

    1. for i in range(0,100):

    2. print fib(1000)

    并产生如下结果(斐波那契数列),1,1,2,3,5,8,13,21...

    1. def fib(num):
          a,b=0,1
          while b<num:
              yield b
              a,b=b,a+b
      
      for i in fib(1000)
          print(i)

       

  9. 一行代码, 通过 filter 和 lambda 函数输出以下列表索引为基数对应的元

    素。

        list_a=[12,213,22,2,2,2,22,2,2,32]
    1. 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))])

       

  10. 写一个base62encode函数,62进制。

    即:0123456789AB..Zab..z(10 个数字+26 个大写字母+26 个小写字母)。 base62encode(1)=1
    base62encode(61) = z
    base62encode(62)=10

    1. 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道题!

  1. 请实现一个装饰器,限制该函数被调用的频率,如10秒一次

    1. import  time
      def wrapper(func):
          def inner(*args,**kwargs):
              time.sleep(10)
              func(*args,**kwargs)
          return inner
      @wrapper
      def func():
          print('a')
      
      func()

       

  2. 请实现一个装饰器,通过一次调用使函数重复执行5次。

    1. 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()

       

  3. python 一行 print 出 1~100 偶数的列表, (列表推导式, filter 均可)

    1.  
      print(list(filter(lambda x:x%2==0,range(101))))

       

  4. 解释生成器与函数的不同,并实现和简单使用generator.

    1. 生成器与函数不同在于 返回--return 代表终止符,而生成器中yield 代表挂起--标记意思,以便下次再执行从标记位置继续执行
    2. # 简单实现生成器
      def dec():
          n=0
          for i in range(10):
              yield n
              n+=i
              
      for i in dec():
          print(i)

       

  1. 列表推导式和生成器表达式 [i % 2 for i in range(10)] 和 (i % 2 for i in

    range(10)) 输出结果分别是什么?

     

    ,生成器地址

  2. map(str,[1,2,3,4,5,6,7,8,9]) 输出是什么?

    1. 生成器地址
  3. python 中定义函数时如何书写可变参数和关键字参数?  

    1. def func(*args,**kwargs):
      
          print(args,kwargs)#('1', '2') {'a': 1, 'b': 2}
      func('1','2',a=1,b=2)
      
      
      
      

       

  4. Python3.5 中 enumerate 的意思是什么?枚举 默认打印可迭代函数的索引和对应元素--默认值默认从0

  5. 说说Python中的装饰器,迭代器的用法:􏰀述下dict的item方法与 iteritems 方法的不同

    1. 装饰器是在不修改原函数的基础上添加一个功能
        迭代器是读取大文件时使用的
        python3中没有iteritems
         items和iteritems大致相同,只是items返回的是一个列表,iteritems返回的是一个迭代器

       

  6. 是否使用过functools中的函数?其作用是什么?

    1. 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道题!

  1. 如何判断一个值是函数还是方法?

    1. 使用type()来判断,如果是method为方法,如果是function则是函数。
      
      括号中写入变量名,,不要有括号什么别的符号之类的

       

  2. 请编写一个函数实现将IP地址转换成一个整数。

    如 10.3.9.12 转换规则为:

    1. 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 = ?

  1. lambda 表达式格式以及应用场景?

    1.   
      省去函数命令的困扰
      
      #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)))

       

  2. pass 的作用?

    1. 通过,暂时搁浅,标记回来完成未完成代码
  3. *arg 和**kwarg 作用?

    1. 聚合--把多余位置参数聚合成一个元祖,把关键字参数变成字典
  4. 如何在函数中设置一个全局变量?

    1. def func()
      global a
      a=10
      func()
      print(a)
        

       

  5. 请写出打印结果:

    1.   

      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)

调用上下文如下  

  1. collapse = True

  2. processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)

  3. print processFunc("i\tam\ntest\tobject !")

  4.

  1. collapse = False

  2. processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)

  3. print processFunc("i\tam\ntest\tobject !") 

以上代码会在控制台输出什么? 

2019/8/08-每日10道题!

31. 请给出下面代码的输出结果

  1. a = 1

  2. def fun(a):

  3. a=2

4.

  1. fun(a)

  2. print a---1

7.

8. a = []
9. def fun(a):
10. a.append(1) 11.
12. fun(a)
13. print a  【1 】

 

  1. 全局变量和局部变量的区别,如何给function里面的一个全局变量赋值

    1. 局部变量外就是全局变量
    2. 函数内部叫局部变量
    3. global a--a=10
  2. 什么是lambda函数,下面这段代码的输出是什么?---Python3 因为filter外没套List 所以打印是该函数的地址

    1. 1. nums = range(2,20)
      2. for i in nums:
      3. nums = filter(lambda x:x==i or x % i, nums) 4. nums 

  3. 指出下面程序存在的问题

    1. 1. def Lastllindextem(src, index):

      1. '''''请返回传入 src 使用空格或者"\"切分后的倒数第 index 个子串'''

      2. return src.split("\\")[-index] 

      3. Lastllindextem(src, index):

       

  4. 有一个数组[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

  1. arr = [1,2,3]

  2. def bar():

  3. arr+=[5]

  4.

  1. bar()

  2. print arr

A.  error
B.  [5]
C. [1,2,3]
D. [1,2,3,5]

37. 请写一个函数,计算出如下几个字母代表的数字 AB-CD=EF

EF+GH = PPP

 

 

38. 请给出下面代码片段的输出 

--解析---装饰器;;就近所装饰函数位置 --say_yo--执行它返回wrapper,由于还有个装饰器 ,所以执行wrapper时 执行的是say_hi
先打印的是HI ---然后再执行下面的func(由于已经被染成wrapper 所以执行下面的yo ) ---再执行Func 打印 rock roll---最后自然就是第一个装饰器拿到返回值 后接着打印 bye
  1. 请简述标准库中functools.wraps的作用

    1. 如果不写wraps 会让原始函数__name__ ,doc值丢失的
      1. 标准
        Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring

         

  2. 请给出下面代码片段的输出 

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. 函数 

  1. def add_end(l=[]):

  2. l.append("end")

  3. return l

       4.

  1. add_end() # 输出什么【end】

  2. 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 

  1. 什么是lambda表达式? 

    1. 匿名函数 ---解决对函数命名困扰
      一般与内置函数搭配使用---使代码变得简洁清晰

       

  1. 以下代码输出是什么,请给出答案并解释 

  1. 有 0 < x <= 10, 10 < x <= 20, 20 < x <= 30, .,190 < x〈= 200,200 < x 这样的 21 个区间分别对应 1-21 二十一个级别,请编写一个函数 level (x)根据输 入数值返回对应级别。

  2. 写函数 有一个数据结构如下所示,请编写一个函数从该结构数据中返画由指定的

      字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。
    

 

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,},
  1. "fld6":11,

  2. "fld7": 7,

  3. "fld46":8

9. }
10.
11. fields:由"|"连接的以 fld 开头的字符串, 如 fld2|fld7|fld29 12.
13. def select(data,fields):
14. return result

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()

 

2019/8/11-每日10道题!

posted @ 2019-08-05 00:01  self哥  阅读(913)  评论(0编辑  收藏  举报