Python常考面试题汇总(附答案)_少儿编程python面试题-程序员宅基地

技术标签: 面试  职场和发展  

写在前面
本文面向中高级Python开发,太基本的题目不收录。
本文只涉及Python相关的面试题,关于网络、MySQL、算法等其他面试必考题会另外开专题整理。
不是单纯的提供答案,抵制八股文!! 更希望通过代码演示,原理探究等来深入讲解某一知识点,做到融会贯通。
部分演示代码也放在了我的github的该目录下。
语言基础篇
Python的基本数据类型
Python3 中有六个标准的数据类型:

Number(数字)(包括整型、浮点型、复数、布尔型等)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
Python是静态还是动态类型?是强类型还是弱类型?
动态强类型语言(不少人误以为是弱类型)
动态还是静态指的是编译器还是运行期确定类型
强类型指的是不会发生隐式类型转换
js就是典型的弱类型语言,例如在console下面模拟一下数字和字符串相加,会发现发生了类型转换。

而Python会报TypeError

什么是鸭子类型
“当一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

鸭子类型关注的是对象的行为,而不是类型。比如file,StringIO,socket对象都支持read/write方法,再比如定义了__iter__魔术方法的对象可以用for迭代。

下面用一个例子来模拟鸭子类型:

class Duck:
    def say(self):
        print("嘎嘎")
 
 
class Dog:
    def say(self):
        print("汪汪")
 
 
def speak(duck):
    duck.say()
 
 
duck = Duck()
dog = Dog()
speak(duck) # 嘎嘎
speak(dog) # 汪汪

什么是自省
自省是运行时判断一个对象类型的能力。

python一切皆对象,用type, id, isinstance获取对象类型信息。

自省,也可以说是反射,自省在计算机编程中通常指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。

与其相关的主要方法:

hasattr(object, name)检查对象是否具体 name 属性。返回 bool.
getattr(object, name, default)获取对象的name属性。
setattr(object, name, default)给对象设置name属性
delattr(object, name)给对象删除name属性
dir([object])获取对象大部分的属性
isinstance(name, object)检查name是不是object对象
type(object)查看对象的类型
callable(object)判断对象是否是可调用对象

python3和python2的对比
print成为函数
编码问题。python3不再有unicode对象,默认str就是unicode
除法变化。python3除号返回浮点数,如果要返回整数,应使用//
类型注解。帮助IDE实现类型检查
优化的super()方便直接调用父类函数。Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
高级解包操作。a, b, *rest = range(10)
keyword only arguments。限定关键字参数
chained exceptions。python3重新抛出异常不会丢失栈信息
一切返回迭代器。range, zip, map, dict.values, etc. are all iterators
性能优化等。。。
python如何传递参数
python官方文档上的话:

“Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects, there’s no alias between an argument name in the caller and callee, and so no call-by-reference per Se.”

准确地说,Python 的参数传递是赋值传递 (pass by assignment),或者叫作对象的引用传递(pass by object reference)。Python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已,并不存在值传递或是引用传递一说。

根据对象的引用来传递,根据对象是可变对象还是不可变对象,得到两种不同的结果。如果是可变对象,则直接修改。如果是不可变对象,则生产新对象,让形参指向新对象

可以具体结合下面的代码实例来模拟:

def flist(l):
    l.append(0)
    print(id(l))    # 每次打印的id相同
    print(l)
 
 
ll = []
print(id(ll))
flist(ll)   # [0]
flist(ll)   # [0,0]
 
print("=" * 10)
 
 
def fstr(s):
    print(id(s)) # 和入参ss的id相同
    s += "a"
    print(id(s))  # 和入参ss的id不同,每次打印结果不相同
    print(s)
 
 
ss = "sun"
print(id(ss))
fstr(ss)    # a
fstr(ss)    # a
 

python的可变/不可变对象
不可变对象: bool/int/float/tuple/str/frozenset 可变对象:list/set/dict

这里继续看两个代码例子,看下输出是什么

def clear_list(l):
    l = []
 
ll = [1,2,3]
clear_list(ll)
print(ll)
 
def fl(l=[1]):
    l.append(1)
    print(l)
fl()
fl()
答案是

[1,2,3]
[1]
[1,1]
对于第一题,l = []这一步,创建了一个新的对象,并将l贴上去(注意函数里面的l和外面的l是形参和实参的区别,不要以为是同一个),所以原来的 l 并没有改变

对于第二题,默认参数只计算一次。

有兴趣的小伙伴可以再试一下这个例子:

a = 1
def fun(a):
    print("func_in",id(a))
    a = 2
    print("re-point",id(a), id(2))
print("func_out&#

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_73720982/article/details/126896906

智能推荐

古堡算式ABCDE * ? = EDCBA-程序员宅基地

文章浏览阅读1.7k次。/*福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是,两人沉默了好久,还是没有算出合适的结果来。 请你利用计算机的优势,找到破解的答案。 把 ABCDE 所代表的数字写出来。*/ #includ_abcde * ?

tensorflow中常用的变量初始化方法_tensorflow 创建一个初始为均匀分布的变量-程序员宅基地

文章浏览阅读3.6k次。1. 初始化为常量tf.constant_initializer__init__( value=0, #指定的常量 dtype=tf.float32, #数据类型 verify_shape=False #是否可以调整tensor的形状,默认可以调整)#常量初始化#tf.constant_initializerva..._tensorflow 创建一个初始为均匀分布的变量

g2o学习记录(3)源码下的example例子运行_g2o example-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏5次。g2o(3)源码下的example例子运行  由于我使用的是Cmake3.5.1版本,高版本必须加上cmake_minimum_required(VERSION 3.5)  第一次运行cmake命令的时候会出现:/usr/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /home/tanqiwei/D..._g2o example

十四届蓝桥杯EDA科目客观题汇总_蓝桥杯eda真题-程序员宅基地

文章浏览阅读2.7w次,点赞156次,收藏895次。这是我自己搜集的部分十四届之前的蓝桥杯eda科目的真题和模拟题,有部分答案解释是我自己写的,所以经供参考。_蓝桥杯eda真题

textFormat失效问题的解决。-程序员宅基地

文章浏览阅读147次。import flash.text.TextField;import flash.text.TextFormat;var label:TextField = new TextField();var labelCss:TextFormat = new TextFormat();labelCss.color = "0xff0000";labelCss.leading = 5;labelCss...._format text as code点了没反应

FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言-程序员宅基地

文章浏览阅读2.4k次,点赞10次,收藏30次。FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言2014年08月08日 14:08 看门狗关键词: FPGA作者:friends  从大学时代第一次接触FPGA至今已有10多年的时间。至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用..._fpga开发经验是什么

随便推点

【04多媒体基础参数】_1分钟的视频信息,要求每秒播放30帧 每帧分辨率为1024*1024,视频的采样率为4比-程序员宅基地

文章浏览阅读246次。04多媒体基础参数参数定义比特率:音视频、图像都可以采用这个指标,它指的是规定时间内传输的比特数,单位是 bps(bit per second),比特率越高,数据传输的速度就越快,流媒体的播放质量就越好(音视频越清晰),所需带宽也越大,比特率有时候也和码率混为一谈,但码率的单位一般是 kbps(千位每秒)采样率:专用于音频多媒体,也称为采样速度或者采样频率,它定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(Hz)。采样率的意义在于将模拟信号转换成数字信号时的采样频率,也就是单_1分钟的视频信息,要求每秒播放30帧 每帧分辨率为1024*1024,视频的采样率为4比

python的string模块(字符)和random模块的使用_import string在python中的用法-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏18次。一、模块string的简单使用import string #导入string模块,获取大小写字母、特殊字符、数字等#获取大小写字母abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZprint(string.ascii_letters)#获取大写字母ABCDEFGHIJKLMNOPQRSTUVWXYZprint(string.ascii_uppercase)#获取小写字母abcdefghijklmnopqrstuvwxyzprint(s_import string在python中的用法

IntelliJ IDEA导入 Eclipse 项目【山东大学 现代软件开发技术】2023.2.2 Ulitimate Edition_idea导入eclipse-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏8次。本文记录了将 Eclipse 项目 导入 IDEA 2023.2.2 的过程,同时也适用于山东大学现代软件开发技术这门课的开发环境迁移。_idea导入eclipse

Chrome浏览器调试教程_chrome 浏览器调试协议-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。Chrome浏览器及调试教程引言在web开发过程中,我们在写JavaScript脚本时难免会遇到各种bug,这时,我们就需要去调试我们的JavaScript脚本,然后去修改代码。最简单的调试方法就是使用alert方法,将可信息通过alert方法的弹窗显示出来。但是,alert方法有几个弊端:1)alert方法在弹..._chrome 浏览器调试协议

【小程序开发必备】微信小程序常用API全介绍,附示例代码和使用场景_微信小程序代码大全-程序员宅基地

文章浏览阅读1.1w次,点赞64次,收藏180次。本篇博文介绍了微信小程序常用API,包括网络请求、数据缓存、交互反馈、设备、媒体、界面、开放接口等方面。每个API都附有详细的介绍和示例代码,以及使用场景。这些API可以帮助小程序开发者快速实现各种功能和交互效果,是小程序开发的必备工具。无论是初学者还是有一定经验的开发者,都能从本篇博文中学到很多实用的技巧和知识。_微信小程序代码大全

Lc.exe已退出 代码为-1 解决方法-程序员宅基地

文章浏览阅读92次。打开一个别人曾经做的项目,里面用来三方控件,本机没有安装此控件,只是添加的相应的dll,结果导致了LC.exe错误:"Lc.exe已退出 代码为-1 "解决方法:1、把项目文件夹下Properties文件夹下的licenses.licx文件删除,重新编译即可;2、文本方式打开*.csproj文件,在文件中查找licenses.licx字样,删除对应节点。注意:还有..._错误64“lc.exe”已退出,代码为 -1。printlab

推荐文章

热门文章

相关标签