10个python面试常问的问题(代码片段)

lalalagq lalalagq     2023-01-14     481

关键词:

概述

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

类继承

有如下的一段代码:


class A(object):
    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,但是用完了记得修改回来。

方法对象

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


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

new和init

下面这段代码输入什么?


class B(object):
    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__是创建对象是调用的。

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'])

全局和局部变量

下面这段代码输出什么?


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

# prints:
#      9
#      20

交换两个变量的值

一行代码交换两个变量值


a=8
b=9

答案:


(a,b) = (b,a)

默认方法

如下的代码


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

包管理

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

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


__all__ = ['mod1','mod3']

闭包

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

答案:


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

    return gn


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

性能

解析下面的代码慢在哪


def strtest1(num):
    str='first'
    for i in range(num):
        str+="X"
    return str

答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。

原文地址:http://www.bugcode.cn/PythonQuestions.html

最常问的mysql面试题集合(代码片段)

问题1:char、varchar的区别是什么?varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。 问题2:TRUNCATE和DELETE的区别是什么?DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表... 查看详情

面试常问的c/c++问题,你能答上来几个?(代码片段)

...f01;最近不少小伙伴在找工作,这里我给大家分享一下面试中经常会遇到的一些嵌入式C语言问题,你看看能答上来几个呢?1用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define... 查看详情

面试官常问的十大算法排序,你学会了吗?(代码片段)

...题。代码本身不重要,算法思想才是重中之重我们在面试的时候总会被问到一下算法,虽然算法是一些基础知识,但是难起来也会让人非常头疼。排序算法应该算是一些简单且基础的算法,但是我们可以从简单的... 查看详情

面试官常问的十大算法排序,你学会了吗?(代码片段)

...题。代码本身不重要,算法思想才是重中之重我们在面试的时候总会被问到一下算法,虽然算法是一些基础知识,但是难起来也会让人非常头疼。排序算法应该算是一些简单且基础的算法,但是我们可以从简单的... 查看详情

大厂面试常问的前端工程师面试手册,面试必备!(代码片段)

前言相对于传统的软件工程师面试而言,前端工程师面试对算法以及计算机底层考察程度较低。面试的时候一般会着重考察错综复杂的前端基础知识,比如HTML,CSS,JS等。同时会根据各个面试公司的技术栈去侧重... 查看详情

面试官常问的垃圾回收器,这次全搞懂(代码片段)

...的垃圾回收器有哪些以及每个垃圾回收器的特点,这也是面试的时候经常被问的内容JVM堆内存概览在聊垃圾回收器之前,我们先来看看JVM堆内存的区域划 查看详情

面试常问的16个c语言问题,你能答上来几个?(代码片段)

...。最近不少小伙伴在找工作,这里我给大家分享一下面试中经常会遇到的一些嵌入式C语言问题,你看看能答上来几个呢?1用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define... 查看详情

面试常问的16个c语言问题,你能答上来几个?(代码片段)

...。最近不少小伙伴在找工作,这里我给大家分享一下面试中经常会遇到的一些嵌入式C语言问题,你看看能答上来几个呢?1用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define... 查看详情

面试常问的action_cancel到底何时触发,滑出子view范围会发生什么?(代码片段)

看完本文你将了解:ACTION_CANCEL的触发时机滑出子View区域会发生什么?为什么不响应onClick()事件首先看一下官方的解释:/***Constantfor@link#getActionMasked:Thecurrentgesturehasbeenaborted.*Youwillnotreceiveanymorepointsini 查看详情

iphone开发常问的十个问题

iPhone开发常问的十个问题前言今天去stackoverflow.com上看了一下iPhone标签下排名最高的10个问题,将它们整理出来,希望这些常见问题能帮到一些iPhone开发的初学者。本来想把答案也翻译过来的,后来发现答案资料通常都比较复杂... 查看详情

面试官常问的十大算法排序,你学会了吗?(代码片段)

...排序锻炼我们的算法思维。这里我就介绍经典十大算法用python是怎么实现的。十大经典算法可以分为两大类:比较排序:通过对数组中的元素进行比较来实现排序。非比较排序:不通过比较来决定元素间的相对次序。... 查看详情

java岗大厂面试官常问的那些问题,面试突击版!

并发编程共享模型篇并发编程概览进程与线程Java线程共享模型之管程共享模型之内存共享模型之无锁共享模型之不可变共享模型之工具共享模型之管程原理之Monitor(锁)原理之伪共享模式篇—正确姿势同步模式之保护性智停同步... 查看详情

最近常问的99道java多线程面试题!(代码片段)

前言今天给大家更新的是一篇关于多线程面试的文章,也是霸哥根据时下热门的面试内容给大家进行总结的,本篇文章属于干货内容!请各位读者朋友一定要坚持读到最后,完整阅读本文后相信你对多线程会有不一样感悟,下次... 查看详情

面试软件测试常问的4个问题,你get了吗?

一般在面试开始时,面试官会让我们先自我介绍一下,自我介绍主要介绍自己的教育经历、项目经历、主要工作内容、优缺点等等。自我介绍完之后,面试官会根据我们的自我介绍及简历上的信息进行提问,那么... 查看详情

面试常问的21条linux命令

本文章总结了21条最频繁使用的Linux命令,也是面试官考察你对Linux系统熟不熟常问的面试题,可以收藏本文章,作为一个Linux命令速查手册。文章目录一、文件和目录二、查看文件内容四、文件的权限使用"+"... 查看详情

大厂面试官最常问的@configuration+@bean(jdkconfig编程方式)

大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)案例分享现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration替换标签的做法。一行简单的注解就可以解决很多事情。但是,其实每一个注解背后都有很多... 查看详情

大厂面试官最常问的@configuration+@bean(jdkconfig编程方式)

大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式) 现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration替换标签的做法。一行简单的注解就可以解决很多事情。但是,其实每一个注解背后都有很多值得... 查看详情

保姆级别vue2组件通信(面试常问)(代码片段)

在面试过程中,经常会被面试官问的鸦雀无言,但是如果我们日常积累些知识点,等到被面试的时候,就可以和面试官来交流技术。父子组件通信绝大部分vue本身提供的通信方式,都是父子组件通信prop最常见... 查看详情