题目41:说一下你对Python中模块和包的理解。

每个Python文件就是一个模块,而保存这些文件的文件夹就是一个包,但是这个作为Python包的文件夹必须要有一个名为__init__.py的文件,否则无法导入这个包。通常一个文件夹下还可以有子文件夹,这也就意味着一个包下还可以有子包,子包中的__init__.py并不是必须的。模块和包解决了Python中命名冲突的问题,不同的包下可以有同名的模块,不同的模块下可以有同名的变量、函数或类。在Python中可以使用import或from ... import ...来导入包和模块,在导入的时候还可以使用as关键字对包、模块、类、函数、变量等进行别名,从而彻底解决编程中尤其是多人协作团队开发时的命名冲突问题。

题目42:说一下你知道的Python编码规范。点评:企业的Python编码规范基本上是参照PEP-8或谷歌开源项目风格指南来制定的,后者还提到了可以使用Lint工具来检查代码的规范程度,面试的时候遇到这类问题,可以先说下这两个参照标准,然后挑重点说一下Python编码的注意事项。

空格的使用使用空格来表示缩进而不要用制表符(Tab)。

和语法相关的每一层缩进都用4个空格来表示。

每行的字符数不要超过79个字符,如果表达式因太长而占据了多行,除了首行之外的其余各行都应该在正常的缩进宽度上再加上4个空格。

函数和类的定义,代码前后都要用两个空行进行分隔。

在同一个类中,各个方法之间应该用一个空行进行分隔。

二元运算符的左右两侧应该保留一个空格,而且只要一个空格就好。

标识符命名变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。

类中受保护的实例属性,应该以一个下划线开头。

类中私有的实例属性,应该以两个下划线开头。

类和异常的命名,应该每个单词首字母大写。

模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。

类的实例方法,应该把第一个参数命名为self以表示对象自身。

类的类方法,应该把第一个参数命名为cls以表示该类自身。

表达式和语句采用内联形式的否定词,而不要把否定词放在整个表达式的前面。例如:if a is not b就比if not a is b更容易让人理解。

不要用检查长度的方式来判断字符串、列表等是否为None或者没有元素,应该用if not x这样的写法来检查它。

就算if分支、for循环、except异常捕获等中只有一行代码,也不要将代码和if、for、except等写在一起,分开写才会让代码更清晰。

import语句总是放在文件开头的地方。

引入模块的时候,from math import sqrt比import math更好。

如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。

题目43:运行下面的代码是否会报错,如果报错请说明哪里有什么样的错,如果不报错请说出代码的执行结果。

class A:

def __init__(self, value):

self.__value = value

@property

def value(self):

return self.__value

obj = A(1)

obj.__value = 2

print(obj.value)

print(obj.__value)点评:这道题有两个考察点,一个考察点是对_和__开头的对象属性访问权限以及@property装饰器的了解,另外一个考察的点是对动态语言的理解,不需要过多的解释。

1

2扩展:如果不希望代码运行时动态的给对象添加新属性,可以在定义类时使用__slots__魔法。例如,我们可以在上面的A中添加一行__slots__ = ('__value', ),再次运行上面的代码,将会在原来的第10行处产生AttributeError错误。

题目44:对下面给出的字典按值从大到小对键进行排序。

prices = {

'AAPL': 191.88,

'GOOG': 1186.96,

'IBM': 149.24,

'ORCL': 48.44,

'ACN': 166.89,

'FB': 208.09,

'SYMC': 21.29

}点评:sorted函数的高阶用法在面试的时候经常出现,key参数可以传入一个函数名或一个Lambda函数,该函数的返回值代表了在排序时比较元素的依据。

sorted(prices, key=lambda x: prices[x], reverse=True)

题目45:说一下namedtuple的用法和作用。点评:Python标准库的collections模块提供了很多有用的数据结构,这些内容并不是每个开发者都清楚,就比如题目问到的namedtuple,在我参加过的面试中,90%的面试者都不能准确的说出它的作用和应用场景。此外,deque也是一个非常有用但又经常被忽视的类,还有Counter、OrderedDict 、defaultdict 、UserDict等类,大家清楚它们的用法吗?

在使用面向对象编程语言的时候,定义类是最常见的一件事情,有的时候,我们会用到只有属性没有方法的类,这种类的对象通常只用于组织数据,并不能接收消息,所以我们把这种类称为数据类或者退化的类,就像C语言中的结构体那样。我们并不建议使用这种退化的类,在Python中可以用namedtuple(命名元组)来替代这种类。

from collections import namedtuple

Card = namedtuple('Card', ('suite', 'face'))

card1 = Card('红桃', 13)

card2 = Card('草花', 5)

print(f'{card1.suite}{card1.face}')

print(f'{card2.suite}{card2.face}')

命名元组与普通元组一样是不可变容器,一旦将数据存储在namedtuple的顶层属性中,数据就不能再修改了,也就意味着对象上的所有属性都遵循“一次写入,多次读取”的原则。和普通元组不同的是,命名元组中的数据有访问名称,可以通过名称而不是索引来获取保存的数据,不仅在操作上更加简单,代码的可读性也会更好。

命名元组的本质就是一个类,所以它还可以作为父类创建子类。除此之外,命名元组内置了一系列的方法,例如,可以通过_asdict方法将命名元组处理成字典,也可以通过_replace方法创建命名元组对象的浅拷贝。

class MyCard(Card):

def show(self):

faces = ['', 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

return f'{self.suite}{faces[self.face]}'

print(Card) #

card3 = MyCard('方块', 12)

print(card3.show()) # 方块Q

print(dict(card1._asdict())) # {'suite': '红桃', 'face': 13}

print(card2._replace(suite='方块')) # Card(suite='方块', face=5)

总而言之,命名元组能更好的组织数据结构,让代码更加清晰和可读,在很多场景下是元组、字典和数据类的替代品。在需要创建占用空间更少的不可变类时,命名元组就是很好的选择。温馨提示:Python面试宝典会持续更新,从基础到项目实战的内容都会慢慢覆盖到。虽然每天只更新5个题目,但是每道题扩散出的信息量还是比较大的,希望对找工作的小伙伴所有帮助。你的点赞、收藏和评论都是我继续创建的动力,请不要吝惜你的赞美。

python面试笔试宝典pdf_Python面试宝典之基础篇-09相关推荐

  1. [Python从零到壹] 四十一.图像处理基础篇之图像采样处理

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. [Python从零到壹] 四十.图像处理基础篇之图像量化处理

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. python程序员面试算法宝典 pdf_Python面试宝典之基础篇3

    Python面试宝典之基础篇-03 题目011:Python中为什么没有函数重载? 点评:C++.Java.C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有 ...

  6. 高频面试真题答案 -java后端 -java基础篇

    原贴 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 整理答案: 类加载机制 47 双亲委派机制 24 new一个对象的过程 4 java程序是如何运行起来的? 1 jvm ...

  7. python面试笔试宝典pdf_Python面试宝典之基础篇-06

    题目26:什么是鸭子类型(duck typing)? 鸭子类型是动态类型语言判断一个对象是不是某种类型时使用的方法,也叫做鸭子判定法.简单的说,鸭子类型是指判断一只鸟是不是鸭子,我们只关心它游泳像不像 ...

  8. python面试笔试宝典pdf_Python面试宝典之基础篇-02

    题目006:说说Python中的浅拷贝和深拷贝.点评:这个题目本身出现的频率非常高,但是就题论题而言没有什么技术含量.对于这种面试题,在回答的时候一定要让你的答案能够超出面试官的预期,这样才能获得更好 ...

  9. 个人总结面试笔试C语言、嵌入式相关基础知识点

    char *const *(*next)(); 1. (*next)  next 是一个指针 2.(*next)() next是一个函数指针 3.char *const 是一个指针 常量指针 4. n ...

最新文章

  1. Swift3的playground中对UI直接测试支持的改变
  2. ruby on rails Mac 安装
  3. python——json数据
  4. jzoj4742-单峰【数学,数论】
  5. mapbox 修改初始位置_一行代码教你如何随心所欲初始化Bert参数(附Pytorch代码详细解读)...
  6. .net3.5下的Socket通信框架
  7. 微信小程序本地存储存储_如何利用本地存储构建快速的应用程序
  8. oracle增加文件组,Oracle 文件和文件组
  9. LA 2957 最大流,最短时间,输出路径
  10. 金蝶移动bos开发教程_求助临沂金蝶k3,kis,eas软件各版本优势
  11. android wifi 问题是什么意思,Android应用开发之wifi连接问题:密码正确但连接时supplicant state返回的是ERROR_AUTHENTICATING...
  12. 手把手带你入坑H5与小程序直播开发
  13. 把Spring boot jar作为Windows服务运行
  14. python清理微信好友_Python清理微信僵尸粉,基于itchat模块
  15. 开源python爬虫软件下载_33款可用来抓数据的开源爬虫软件工具
  16. mybatis-plus关联查询,一对一、一对多。
  17. 外文论文阅读生词积累
  18. Merkle tree for non-membership proof
  19. Frp内网穿透保姆级教程 windows内网穿透
  20. Android Studio实现一个记账本项目

热门文章

  1. 济南信息工程学校97级计算机3班,校园|做有温度的职业教育:济南信息工程学校那些美丽的“老班”...
  2. oracle添加创建视图权限不足,Oracle Scott创建视图权限不足解决办法
  3. 远离纸上谈兵!尼尔森可用性原则的实际运用!
  4. Java/509. Fibonacci Number 斐波那契数
  5. RocketMQ系列:rocketmq运维控制台使用详解(全网独家)
  6. Python编程简单的10个入门案例
  7. 小学5年级计算机考试作文,五年级期中考试的作文
  8. 写一段excel vba筛查重复项
  9. Java基于Socket实现聊天、群聊、敏感词汇过滤功能
  10. 如何避免电子设备测量中的接地回路?