求职Python开发,面试官最喜欢问的9个问题【附答案】

0. 概述

Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了一些Python面试官经常问的问题,供大家参考学习。

相信大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

走进:python技术分享交流

1. 类继承

有如下的一段代码:

class A:
  def show(self):
      print ‘base show‘

class B(A):
  def show(self):
      print ‘derived show‘

obj = B()
obj.show()

如何调用类A的show方法了,方法如下:

obj.__class__ = A
obj.show()

__class__?方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。

2. 方法对象

问题:为了让下面这段代码运行,需要增加哪些代码?

class A(object):
  def __init__(self, a, b):
      self.__a = a
      self.__b = b

  def myprint(self):
      print(‘a=‘, self.__a, ‘b=‘, self.__b)

a1 = A(10,20)
a1.myprint()

a1(80)

答案:为了能让对象实例能被直接调用,需要实现?__call__?方法

class A:
  def __init__(self, a, b):
      self.__a = a
      self.__b = b

  def myprint(self):
      print(‘a=‘, self.__a, ‘b=‘, self.__b)

  def __call__(self, num):
      print(‘call:‘, num + self.__a)

3. new和init

下面这段代码输出什么?

class B:
  def fn(self):
      print(‘B fn‘)

  def __init__(self):
      print("B INIT")

class A(object):
  def fn(self):
      print(‘A fn‘)

  def __new__(cls,a):
          print("NEW", a)
          if a>10:
              return super(A, cls).__new__(cls)
          return B()

  def __init__(self,a):
      print("INIT", a)

a1 = A(5)
a1.fn()
a2=A(20)
a2.fn()

答案:

NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn

使用?__new__?方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。__init__是创建对象是调用的。

4. Python list和dict生成

下面这段代码输出什么?

ls = [1,2,3,4]
list1 = [i for i in ls if i>2]
print(list1)

list2 = [i*2 for i in ls if i>2]
print(list2)

dic1 = {x: x**2 for x in (2, 4, 6)}
print(dic1)

dic2 = {x: ‘item‘ + str(x**2) for x in (2, 4, 6)}
print(dic2)

set1 = {x for x in ‘hello world‘ if x not in ‘low level‘}
print(set1)

答案:

[3, 4]
[6, 8]
{2: 4, 4: 16, 6: 36}
{2: ‘item4‘, 4: ‘item16‘, 6: ‘item36‘}
set([‘h‘, ‘r‘, ‘d‘])

5. 全局和局部变量

下面这段代码输出什么?

num = 9

def f1():
  num = 20

def f2():
  print(num)

f2()
f1()
f2()

答案:

9
9

num?不是个全局变量,所以每个函数都得到了自己的?num?拷贝,如果你想修改?num,则必须用?global?关键字声明。比如下面这样:

num = 9

def f1():
  global num
  num = 20

def f2():
 print(num)

f2()
f1()
f2()

6. 交换两个变量的值

一行代码交换两个变量值

a = 8
b = 9

答案:

a, b = b, a

7. 默认方法

如下的代码:

class A(object):
  def __init__(self,a,b):
      self.a1 = a
      self.b1 = b
      print(‘init‘)

  def mydefault(self):
      print(‘default‘)

a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

方法?fn1?/?fn2?/?fn3?都没有定义,添加代码,是没有定义的方法都调用?mydefault?函数,上面的代码应该输出

default
default
default

答案:

class A(object):
  def __init__(self,a,b):
      self.a1 = a
      self.b1 = b
      print(‘init‘)

  def mydefault(self):
      print(‘default‘)

  def __getattr__(self,name):
      return self.mydefault

a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

方法?__getattr__?只有当没有定义的方法调用时,才是调用他。当fn1?方法传入参数时,我们可以给?mydefault?方法增加一个?*args?不定参数来兼容。

class A:
  def __init__(self,a,b):
      self.a1 = a
      self.b1 = b
      print(‘init‘)

  def mydefault(self,*args):
      print(‘default:‘ + str(args[0]))

  def __getattr__(self,name):
      print("other fn:", name)
      return self.mydefault

a1 = A(10,20)
a1.fn1(33)
a1.fn2(‘hello‘)
a1.fn3(10)

8. 包管理

一个包里有三个模块,mod1.py,?mod2.py,?mod3.py,但使用?from demopack import *?导入模块时,如何保证只有mod1mod3?被导入了。

答案:增加?__init__.py?文件,并在文件中增加:

__all__ = [‘mod1‘,?‘mod3‘]

9. 闭包

写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

答案:

def mulby(num):
  def gn(val):
      return num * val
  return gn

zw = mulby(7)
print(zw(9));

原文地址:https://blog.51cto.com/14318113/2392009

时间: 2024-10-07 23:18:41

求职Python开发,面试官最喜欢问的9个问题【附答案】的相关文章

求职Python开发,面试官最喜欢问的几个问题

关注公众号「Python专栏」,后台回复:简历模板,获取给大家准备的价值99元的程序员简历模版11份. ![Python专栏二维码](https://img-blog.csdnimg.cn/20190228220401806.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNjU4Mjg=,size_4,color_FFFF

一线大厂面试官最喜欢问的15道Java多线程面试题

前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.现在引用Java5并发包关于并发工具和并发集合的问题正在增多.那些问题中ThreadLocal.Blocking Queue.Counting Semaphore和ConcurrentHashMap比较流行. Java多线程面试题及

2019年面试官最喜欢问的28道ZooKeeper面试题

前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的系统提供给用户. ZooKeeper 面试题 1. ZooKeeper 是什么? 2. ZooKeeper 提供了什么? 3. Zookeeper 文件系统 4. ZAB 协议? 5. 四种类型的数据节点 Znode 6. Z

面试官最喜欢问的CAS还不会?怎么和他吹牛?!一文带你搞懂CAS

后端开发中大家肯定遇到过实现一个线程安全的计数器这种需求,根据经验你应该知道我们要在多线程中实现?共享变量?的原子性和可见性问题,于是锁成为一个不可避免的话题,今天我们讨论的是与之对应的无锁 CAS.本文会从怎么来的.是什么.怎么用.原理分析.遇到的问题等不同的角度带你真正搞懂 CAS. 为什么要无锁 我们一想到在多线程下保证安全的方式头一个要拎出来的肯定是锁,不管从硬件.操作系统层面都或多或少在使用锁.锁有什么缺点吗?当然有了,不然 JDK 里为什么出现那么多各式各样的锁,就是因为每一种锁都有

20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)

1. 内存模型以及分区,需要详细到每个区放什么.JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class 类信息常量池(static 常量和 static 变量)等放在方法区new:方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字节码)等数据堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,方法

python web为什么要学数据结构与算法面试官为什么总问那几个算法和线性表二叉树

算法是什么? 举个简单的例子 当年刘景生病危刘琦被卷入继位之事 无奈求助于诸葛亮 以上古兵书为由 邀孔明阁楼相谈.... 诸葛亮曾说 那部阵书开篇就是阵法源自于心法 所以古代军师进步也是看兵法 算法也是同理 虽然我们作为web后端开发人员 但是每天所见所闻日子久也就适应了. 但是想要再进一步 两种方法 一 多看高质量代码 二 看算法 我们作为web开发可能算法运用的不是很多 每天也就是写接口调接口和产品经理撕 但是算法最重要的地方是会帮你扩充你的逻辑思维 可能刚看算法的人认为太难了我真学不来 举

走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

原文:走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串 对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率.大家面试初级.中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了解索引吗?你知道索引的分类吗?你知道这些索引的区别吗?你如何去创建有效的索引.本章让大家学会反问面试官 hold住全场. --_____-- 友情客串 最近面试的文章比较火 客串一下 我只

Java面试官最爱问的volatile关键字

在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?为什么爱问volatile关键字 爱问volatile关键字的面试官,大多数情况下都是有一定功底的,因为volatile作为切入点,往底层走可以切入Java内存模型(JMM),往并发方向走又可接切入Java并发编程,当然,再深入追究,JVM的底层操作.字节码的操作

web前端入门到实战:用css3实现惊艳面试官的背景即背景动画(高级附源码)

我们传统的前端更多的是用javascript实现各种复杂动画,自从有了Css3 transition和animation以来,前端开发在动画这一块有了更高的自由度和格局,对动画的开发也越来越容易.这篇文章就让我们汇总一下使用Css3实现的各种特效. 1.实现内部虚线边框知识点:outline 核心代码 .dash-border{ width: 200px; height: 100px; line-height: 100px; outline: 1px dashed #fff; outline-o