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我们可以看到

元组赋值之谜的初始和最终状态(图表由Python Tutor网站生成)
 
我们来看看Python为表达式s[a] += b生成的字节码,这个现象背后的原因会变得清晰起来
>>> 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
>>>

  这个问题一般很少遇到,不过由此我们在以后的编程中要注意:

  1. 不要把可变对象放在元组里面。
  2.  增量赋值不是一个原子操作。我们刚才也看到了,它虽然抛出了异常,但还是完成了
    操作。

对字典排序:

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)
一个二维向量加法的例子,Vector(2,4) + Vextor(2,1) = Vector(4,5)
第一步:实现向量加法
>>> 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面试题解答的更多相关文章

  1. python公司面试题集锦 python面试题大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

  2. 《算法设计手册》面试题解答 第五章:图的遍历 附:DFS应用之找挂接点

    第五章面试题解答 5-31. DFS和BFS使用了哪些数据结构? 解析: 其实刚读完这一章,我一开始想到的是用邻接表来表示图,但其实用邻接矩阵也能实现啊?后来才发现应该回答,BFS用队列实现:DFS可 ...

  3. Python面试题 —— 获取列表中位数

    中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...

  4. java面试题—精选30道Java笔试题解答(二)

    摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...

  5. 【Python】【面试必看】Python笔试题

    前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...

  6. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  7. python 面试题4

    Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...

  8. 算法笔记_108:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科A组)试题解答

     目录 1 世纪末的星期 2 振兴中华 3 梅森素数 4 颠倒的价牌 5 三部排序 6 逆波兰表达式 7 错误票据 8 带分数 9 剪格子 10 大臣的旅费 前言:以下试题解答代码部分仅供参考,若有不 ...

  9. 算法笔记_109:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答

    目录 1 马虎的算式 2 黄金连分数 3 有理数类 4 幸运数 5 连号区间数   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 马虎的算式 标题: 马虎的算式 小明 ...

随机推荐

  1. VS2010灵活运用快捷操作功能(总结)

    转载于:http://blog.csdn.net/trassion/article/details/7667814 1.快速using(这个的快捷键是ctrl+.) 2.快速回到之前编辑的代码页面现在 ...

  2. 关于Idea中右边的maven projects窗口找不到了如何调出来

    关于Idea中右边的maven  projects窗口找不到了如何调出来? 具体的idea版本我不太清楚,我用的是2016版,其他版本应该也是一样的. 首先idea自带了maven控件,不像Eclip ...

  3. 0基础手把手教你搭建webpack运行打包项目(未完待续)

    这些天在项目之余的时间学习了webpack打包项目的东西,非常荣幸的找到一些大神的文章来学习,死劲嚼了几天,终于略知一二.在以后的工作上还需继续学习,下面我将分享我这几天学到的一点东西,希望能让我一个 ...

  4. .Net 关于 InfoPath 的基本使用

    最近几天接触微软的  InfoPath 表单工具,结合VS 使用,遇到的一些问题与解决方法,记录一下,百度上的内容很少,或许我根本不知道咋搜,所有也留一个网页帮助自己使用当然使用的时候碰到了好几个坑: ...

  5. NodeJs学习笔记(四)---单元测试

         sailsjs框架用了一段时间了,感觉如果功能复杂了,非常难以处理,想用一下单元测试,看是否能解决问题.     sailsjs的官方文档使用的是mocha,我搜索了一些资料,主要参考了朴灵 ...

  6. php trim源码分析

    本文同时发表于https://github.com/zhangyachen/zhangyachen.github.io/issues/9 核心代码如下: /* {{{ php_trim() * mod ...

  7. echarts异步数据加载(在下拉框选择事件中异步更新数据)

    接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

  8. Docker(十三):OpenStack部署Docker集群

    1.介绍 本教程使用Compose.Machine.Swarm工具把WordPress部署在OpenStack上. 本节采用Consul作为Swarm的Discovery Service模块,要利用C ...

  9. ES6 函数的扩展3

    箭头函数 基本用法 ES6允许使用"箭头"(=>)定义函数 var f = v => v; 上面的箭头函数等同于: var f = function(v) { retu ...

  10. 腾讯云主机 MySQL 远程访问配置方法

    使用腾讯云主机安装 MySQL 之后,需要通过以下步骤进行配置以实现远程访问,主要分为两大部分 一.服务器端口配置 1.如果你的云主机配置了安全组,如果没有配置安全组就可以直接跳过“步骤1”的操作,否 ...