![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python编程
呆坐的熊
这个作者很懒,什么都没留下…
展开
-
Python中字典的几个问题
为什么可变对象不可hash可hash对象有哪些为什么hash和eq必须等价dic[key]的背后逻辑和运行规律是啥missing, contain, get, setdefault,原创 2020-03-30 17:16:12 · 805 阅读 · 0 评论 -
实例属性和实例方法的存储
实例属性和实例方法的存储方式从两个问题出发:1、为什么super.func(), 可以得到同名的父类方法,但是缺super.val获得同名实例属性这种东西?2、父类调用子类属性这种奇怪的东西为什么是可行的?从obj = ClassA()开始,调用new返回一个实例,这相当于开辟了空间,接着init方法初始化各个变量,附属到obj中,如果init中调用了父类init,那么通常要让父类init...原创 2020-03-30 17:08:17 · 484 阅读 · 0 评论 -
Python的super部分解读
一直以为读懂了Fluent Python中关于super的部分,事实证明还是太天真了。书中关于pingpong的例子没有突出重点,导致一直没有意识到理解错误了。super并不一定指向父类class Base: def __init__(self): super(Base, self).__init__() print("this is A") ...原创 2020-03-30 16:42:21 · 206 阅读 · 0 评论 -
二叉树的几种遍历方式
前序、中序、后序、层序前序二叉树的前序遍历# 递归版本class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: res = [] if not root: return res res.append(root.val) ...原创 2020-03-26 13:55:41 · 257 阅读 · 0 评论 -
python中的property特性
property特性解决什么问题: 属性的存取检查 (封装)Fluent Python中的经典例子就是商品价格设置,商品价格不能为负数,所以设置价格属性的时候必须进行检查。方法一、如果没有特性,可以怎么做禁止 ‘.’ 运算符直接访问属性。这个通过私有属性来完成。设置存取方法。这也是C++的做法。由于python中没有访问控制符,可以使用双下划线隐藏属性。class GoodItem...原创 2020-03-21 23:29:43 · 225 阅读 · 0 评论 -
对序列进行+,*, +=,*=运算
python的序列类型支持 *,+,*=, +=*, + 的操作逻辑都是创建新变量然后重新赋值,所以变量id将会改变。这毫无疑问,尤其是对于不可变类型。需要注意的是,*运算对各个元素执行的是复制操作,某些时候可能导致错误x =[[]]*3 #导致三个元素指向同一列表x[0].append(1) # [[1], [1], [1]]如果存储的元素是不可变类型,这个问题几乎可以不用担心,因...原创 2019-12-04 16:36:31 · 277 阅读 · 0 评论 -
为什么区间个切片要忽略最后一个元素
这个问题在fluent python提到,同时引了计算机Edsger W. Dijkstra的解释。简要记录如下当我们想取出2,3,…12这个区间时,共有四种表达式可选:a) 2 ≤ i < 13b) 1 < i ≤ 12c) 2 ≤ i ≤ 12d) 1 < i < 13其中a)、b)表达式可以从两端相减区间长度,这时其中一个优点。但是并不是决定...原创 2019-12-04 15:58:38 · 672 阅读 · 1 评论 -
可迭代对象、迭代器及可迭代元素解包(元组解包)
# 平行赋值a, *b, c = [1, 2, 3, 4] # a =1, b=[2, 3] , c=4# a, *b, c = *[1, 2, 3, 4] #错误的用法,右侧不能使用*def f0(*a): print(a)f0(1, 2, 3)# (1, 2, 3)def f1(a, b, c): print(a, b, c)f1(*(1, 2, 3))# 1, 2...原创 2019-12-03 11:01:36 · 378 阅读 · 0 评论 -
两个有意思的bug(pytorch, numpy)
pytorch索引加一出错为了加速运算,写了一行对应索引加一的代码,大概长这个样子:#注意data是pytorch里的tensordata[index] += data[index]少量数据的测试中,上面的代码运行正常,结果也正确。当index长度大于data的长度时候,运行也正常,但是加和总数对不上。后来发现,在pytorch中上述的索引加一操作在一次调用中只会对单个索引执行一次...原创 2019-11-20 16:18:36 · 185 阅读 · 0 评论 -
python中变量的存储与拷贝
python的所有变量都是引用类型,也就是说每个变量至少包括两个部分:存放变量引用的内存块和存放变量内容的内存块以字符串为例由于字符串是不可变类型,如果改变已经创建字符串的内容,将执行替换操作,将变量指向一块新的内存。s = 'abcd'print(s,':',id(s))s = 'ijmn'print(s,':',id(s))abcd : 1390779247728ijm...原创 2019-03-03 14:54:50 · 860 阅读 · 0 评论 -
理解python中的可变类型、不可变类型及如何改变函数中的参数
可以将python中常见数据类型按照可变与不可变大致分为两类可变类型不可变类型列表、字典、类数值型、字符串、元组理解可变与不可变 熟悉python的都知道,像字符串和元组创建之后是无法更改的,如果更改那么就只能替换掉,也就是说丢弃原来的存储空间,将变量名链接到新的空间中。而像list和dict是支持增删改的。以list和tuple增加元素的操作为例(用内置函数 ...原创 2019-02-21 00:24:01 · 842 阅读 · 0 评论 -
Fluent Python chapter1--Python 数据模型
1、python一致性python的优雅之处就在于他的一致性。一致性是指他的背后的设计思想遵循同一种风格,当你掌握这种风格之后,就可以用一种固定的方法操作他们。举个例子,你可以把自定义的类写得像是python内置的list类型,支持list的各种操作。这种一致性通过实现python的特殊方法实现,也称魔术方法,fluent python作者更愿意称之为特殊方法,因为这是有迹可循的,只是效果ma...原创 2019-06-22 16:32:20 · 179 阅读 · 0 评论 -
Fluent Python chapter2--列表推导和生成器表达式
列表推导和生成器表达式#例子1lst = [i for i in range(5)] #列表推导# lst2 = list(i for i in range(5)) #括号内是生成器表达式s = (str(i) for i in range(5)) #产生生成器print(lst)print(s)#结果输出[0, 1, 2, 3, 4]<generator o...原创 2019-06-22 17:30:29 · 221 阅读 · 0 评论 -
python的logging基本知识
logging用于记录程序运行中一些有用信息,包括指示程序运行状态,程序运行出现的错误,警告等。日志是分等级的,从DEBUG,INFO,WARNING, ERROR,CRITICAL,共五个等级,其中事件等级依次上升。logging默认只有等级是WARNING或者高于WARNING的才在控制台显示输出。常见的处理事件的方法有输出到控制台和输出到文件。如果不指定输出的日志文件,高于阈值的日志就...原创 2019-07-23 20:12:56 · 184 阅读 · 0 评论 -
name_scope()和variable_scope(),Variable(),get_variable()
name_scope()命名空间对get_variable()创建的变量没有影响,不会附加到变量名头部。但是variable_scope()对Variable有影响,将会附加到头部。同样name_scope()也不会指向已经创建的变量空间,即使同名也会自动添加后缀,使其不同。variable_scope(name),会先寻找是否存在该空间,如果存在就指向该空间,否则创建该空间。Variab...原创 2019-07-23 20:14:48 · 83 阅读 · 0 评论 -
Argparse基础总结
Argparse是python标准库中的命令行解析模块。命令行中的调用形式,形如ls命令ls optionpython filename.py option其中参数分为两种,一种是位置参数,程序通过命令行中输入的顺序来确定如何操作。另一种是可选参数,–varname来指定,同时也可以同时支持短命名形式-v。位置参数是必须的,如果在命令行调用中没有给出相应个数的位置参数,程序就...原创 2019-07-22 16:40:48 · 167 阅读 · 0 评论 -
python的多态、协议及鸭子类型概念
多态: 可以对不同类型的对象执行相同的操作,该操作的结果将根据对象类型而异。最常见的例子之一是+运算符,数值型变量、list变量和string变量都支持 ‘+’ 加法操作,但是结果却不同,这就是一种多态。来看看自定义的类如何支持 '+'class A: def __init__(self,lst): self.var = lst def __a...原创 2019-06-23 09:54:19 · 239 阅读 · 0 评论