发布于2019-08-03 07:53 阅读(6169) 评论(0) 点赞(14) 收藏(6)
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[1])
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)三次
作者:嘴巴嘟嘟
链接:https://www.pythonheidong.com/blog/article/3729/47fdfae307ac7b3a3b03/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!