Python面试题解答
1. 一个谜题
>>> t = (1, 2, [30, 40])
>>> t[2] += [50, 60]
到底会发生下面 4 种情况中的哪一种?
a. t变成(1, 2, [30, 40, 50, 60])。
b. 因为tuple不支持对它的元素赋值,所以会抛出TypeError异常。
c. 以上两个都不是。
d. a和b都是对的
开始我很确定的选择B,但是实际答案是d,这是为什么呢?
通过pythontutor我们可以看到


>>> dis.dis('s[a]+=b')
1 0 LOAD_NAME 0 (s)
2 LOAD_NAME 1 (a)
4 DUP_TOP_TWO ------>将s[a] 存入TOS(Top Of Stack,栈顶)
6 BINARY_SUBSCR
8 LOAD_NAME 2 (b)
10 INPLACE_ADD --------> TOS +=b 因为TOS指向的是可变对象,所以通过
12 ROT_THREE
14 STORE_SUBSCR --------->s[a] = TOS 因为s是不可变的元组,所以失败
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
>>>
这个问题一般很少遇到,不过由此我们在以后的编程中要注意:
- 不要把可变对象放在元组里面。
- 增量赋值不是一个原子操作。我们刚才也看到了,它虽然抛出了异常,但还是完成了操作。
对字典排序:
dic={'a':26,'g':20,'e':22,'c':24}
按值进行排序:
解答:
sorted(dic.items(),key= lambda x:x[])
for key in sorted(dic,key=dic.get):
print(key,dic[key])
解答2
def value_high(key):
return dic[key] for key in sorted(dic,key=value_high):
print(key,dic[key])
解答3
l=[] for k,v in dic.items():
l.append(v)
l.sort()
dic={}
for i in l:
for k,v in dic.items():
if i==v:
dic[k]=v
print(dic)
>>> v1 = Vector(2, 4)
>>> v2 = Vector(2, 1)
>>> v1 + v2
Vector(4, 5)
第二部:通过abs求模
>>> v = Vector(3, 4)
>>> abs(v)
5
第三部:实现向量乘法:
>>>v = Vector(3, 4)
>>> v * 3
Vector(9, 12)
解答:我们主要通过几个特殊方法(__repr__、__abs__、__add__和__mul__)
# encoding:utf-8
# Author:Richie
# Date:1/16/2018
from math import hypot class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y def __abs__(self):
return hypot(self.x, self.y) def __bool__(self):
return bool(self.x or self.y) def __repr__(self):
return 'Vector(%s,%s)' % (self.x, self.y) def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y) def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
对于列表
board = [['_']*3] *3
board[1][2]='0'
print(board) 的输出结果是什么?
答:
[['_', '_', '0'], ['_', '_', '0'], ['_', '_', '0']]
这个答案和你想的可能会有些出入,这是为什么呢?
其实上面的代码可以看做是这样的:
row=['_'] * 3
board = []
for i in range(3):
board.append(row)
追加同一个对象(row)到游戏板(board)三次
Python面试题解答的更多相关文章
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- 《算法设计手册》面试题解答 第五章:图的遍历 附:DFS应用之找挂接点
第五章面试题解答 5-31. DFS和BFS使用了哪些数据结构? 解析: 其实刚读完这一章,我一开始想到的是用邻接表来表示图,但其实用邻接矩阵也能实现啊?后来才发现应该回答,BFS用队列实现:DFS可 ...
- Python面试题 —— 获取列表中位数
中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...
- java面试题—精选30道Java笔试题解答(二)
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
- 【Python】【面试必看】Python笔试题
前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...
- Python面试题整理-更新中
几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...
- python 面试题4
Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...
- 算法笔记_108:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科A组)试题解答
目录 1 世纪末的星期 2 振兴中华 3 梅森素数 4 颠倒的价牌 5 三部排序 6 逆波兰表达式 7 错误票据 8 带分数 9 剪格子 10 大臣的旅费 前言:以下试题解答代码部分仅供参考,若有不 ...
- 算法笔记_109:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答
目录 1 马虎的算式 2 黄金连分数 3 有理数类 4 幸运数 5 连号区间数 前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 马虎的算式 标题: 马虎的算式 小明 ...
随机推荐
- 【转】Spring Bean单例与线程安全
一.Spring单例模式及线程安全 Spring框架中的Bean,或者说组件,获取实例的时候都是默认单例模式,这是在多线程开发的时候需要尤其注意的地方. 单例模式的意思是只有一个实例,例如在Sprin ...
- .Net Ajax跨域请求实现
下一阵子要做一个网站Web储备一下知识,AJAX 实现跨域请求,估计会用到,以前在学 WebServer 时候老师整理的一个文档,现在便于查阅和使用现在放到我的博客中. 一般平时我写web页面的时 ...
- 微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作
详情 - 页面制作 本文配套视频地址: https://v.qq.com/x/page/o0555o20xjd.html 开始前请把 ch4-1 分支中的 code/ 目录导入微信开发工具 这一章节中 ...
- 如何高效撤销Git管理的文件在各种状态下的更改
一.背景 企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤 ...
- JavaScript的setter与getter方法
作者:http://hawkzz.com 以前在写项目过程一直都没有使用过Javascript的setter与getter方法,所以对其是一种要懂不懂的概念:今天看书看到这个知识点,还是模模糊糊的,于 ...
- Anaconda多版本Python管理
Anaconda是一个集成python及包管理的软件,记得最早使用时在2014年,那时候网上还没有什么资料,需要同时使用py2和py3的时候,当时的做法是同时安装Anaconda2和Anaconda3 ...
- 统计nginx单个IP访问日志并获取IP来源
#!/usr/bin/env python #coding=utf-8 import requests from urllib2 import urlopen # import lxml.html f ...
- 7.nginx伪静态规则
网上收集的一些常用的,要用的时候就仿照一下,或直接拿来用. WordPress伪静态规则 location / { index index.html index.php; if (-f $reques ...
- Web API系列之一 Rest简介
1.REST:Representational State Transfer表征状态转移,是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格.REST设计风格有如下几点: ...
- Linux(CentOS6.5)修改默认yum源为国内的阿里云、网易yum源
官方的yum源在国内访问效果不佳. 需要改为国内比较好的阿里云或者网易的yum源 修改方式: echo 备份当前的yum源 mv /etc/yum.repos.d /etc/yum.repos.d.b ...