Python
Python学习笔记。
「已注销」
这个作者很懒,什么都没留下…
展开
-
流畅的Python——符合Python风格的对象
符合Python风格的对象原创 2022-09-12 13:35:58 · 205 阅读 · 0 评论 -
流畅的Python——比较对对象的潜复制和深复制
在类定义中,如果passengers不为None,则通过创建一个list副本。如果不这样做,若passengers传进来的也是一个可变对象(如,一个列表),那么会将这个列表的引用赋值给self.passengers,导致对self.passengers进行修改时,原来的外部可变对象也被修改,这显然是不合理的。原创 2022-09-11 10:46:00 · 184 阅读 · 0 评论 -
流畅的Python——使用装饰器改进Order类设计模式
上文提到了使用一等函数来为Order类实现不同的策略,并且使用内置的globals方法,将策略统统加入到promos列表中,在选择策略时,通过遍历function类列表promos来寻找最优的优惠策略。但是这样做的问题在于,如果有新的策略被添加进来,promos不能及时感知到新的策略的存在(反复执行globals确实可行,但会提升运行成本)。此时,装饰器便派上了大用场。现在,不需要通过globals和函数名来寻找策略函数,策略函数可以是任何名字,并且它们在被定义之后就会加入到promos中。原创 2022-09-11 09:29:46 · 203 阅读 · 0 评论 -
流畅的Python——使用一等函数实现设计模式
👆显然这是一个“策略”模式,根据不同的情况选择不同的策略即可。作者在书中给出了两种实现,一种是基于ABC(抽象基类派生)的实现,一种是基于一等函数作为参数的实现,本文仅介绍后者。客户在商场中购物,根据客户当前的积分、选购商品的种类及数量,可以拿到的优惠不同,现在需要根据这些信息来判断用户能拿到的最大优惠是多少。④👇使用内置的global函数将全局的策略存放在promos中,选择best_promos。②👇定义优惠策略模式类。原创 2022-09-09 10:13:36 · 102 阅读 · 0 评论 -
流畅的Python——一等函数与用户定义的可调用类型
在类定义中实现双下方法__call__(),即可以函数调用的方式调用类对象。原创 2022-09-09 09:15:21 · 85 阅读 · 0 评论 -
流畅的python——用户自定义的字典类型与不可变映射类型
我们希望定义一个字典类型,它只能接收字符串类型作为键来查找值,但是我们同时希望它可以输入数字来作为键,此时可以重新自定义一个字典类,继承自collections中的UserDict。👇继承自UserDict的好处是,UserDict并不是dict的子类,但是UserDict中有一个叫做data的属性(has-a),是dict实例。因此,有很多需要重写的操作,我们可以委托self.data来代办。原创 2022-09-06 09:43:50 · 323 阅读 · 0 评论 -
流畅的Python——使用列表推导和字典推导建立列表和字典
👇一个列表是colors,一个列表是sizes,求二者的笛卡尔积,结果存在tshirts中。原创 2022-09-06 09:26:43 · 226 阅读 · 0 评论 -
流畅的Python——序幕
①👇首先构建一个卡牌堆类,使用collections模块中的namedtuple可以直接构建一个简单的卡牌类,但FrenchDeck给出的类定义中重写了该类的魔术方法,通过实现了__len__使FrenchDeck类对象可以直接通过len()方法查看纸牌堆中纸牌的数量。通过实现使FrenchDeck类对象可以通过索引和切片对列表进行操作。②👇尝试不同的方法。Ⅰ首先用Card构建纸牌。输出为52,因为不同花色的卡牌共有52张。Ⅲ尝试用不同的方法取牌。原创 2022-09-05 10:16:22 · 222 阅读 · 0 评论 -
目前所遇到的numpy方法整理〇——持续更新
np.dot()x.dot(y),相当于np.dot(x,y),实现的是矩阵乘法,要求x是nm的矩阵,y是mn的矩阵。np.shape()使用np.shape(X),则返回矩阵X的长和宽,存储在一个一维元组里,即,倘若X为3*3的矩阵,则返回(3,3),如果X为四维行向量,则返回(4,)np.zeros()该方法的原型是:numpy.zeros(shape,dtype = float,order = 'C'),使用np.zero(2,5),则返回一个二行五列的矩阵。输出一个五行二列的0矩阵:.原创 2021-03-29 19:14:19 · 68 阅读 · 0 评论 -
2020.11.24~Python实现Hanoi~递归
第一次用Python写递归函数。def move(a,b): print(a,'--->',b)def hanoi(n,x,y,z): if(n == 1): move(x,z)#倘若只有一个盘子,将这个盘子从X轴移到Z轴 else: hanoi(n-1,x,z,y)#将n-1个盘子从x轴借助z轴移到y轴 move(x,z) #将第n个(最底下的盘子)从x轴移到z轴 hanoi(n-1,y,z,x)原创 2020-11-24 10:16:57 · 162 阅读 · 0 评论 -
2020.11.23~Python的format()与print()搭配的入门
#由于题目叫做计算分段函数,很容易让人联想到使用函数求解。一开始笔者使用的是函数进行解题,代码如下,但最后一个测试点WA了,因此上网搜索解题的良方,找到了更优解。#AC代码如下:a = float(input())if(a == 0): print("f(0.0) = 0.0")else: print("f({:.1f}) = {:.1f}".format(a,1/a))使用print("f({:.1f}) = {:.1f}".format(a,1/a)),即对print..原创 2020-11-23 21:52:14 · 732 阅读 · 0 评论 -
2020.11.23~Python中的循环
#样例输入90#样例输出sum = 4040#注意=前后分别只有一个空格#题目本身无太大难度,难度仍然是在格式输出控制问题上。AC代码如下:a = int(input())#输入转为整形sum = 0#和为0for i in range(11,a+1):#注意此处的range是到91 sum += iprint("sum =",sum)#print函数中用,隔开时,输出的对象是用空格隔开的,因此sum = #之后的空格是不必要的,否则会造成格式错误。@加菜.原创 2020-11-23 21:27:00 · 87 阅读 · 0 评论 -
2020.11.22~从键盘输入三个数到a,b,c中,按公式值输出
近日自学Python,偶遇此题,被如何同行输入数据难住,上网查阅后发表在博客上,以资日后查阅。#在同一行依次输入三个值a,b,c,用空格分开,输出 bb-4a*c的值#输入3 4 5#输出-44#AC代码:a,b,c = map(int,input().split(' '))print(b*b-4*a*c)其中,input().split(' ')实现了将输入以空格作为分割,而map建立了从字符串到整形的映射。(因为使用input输入的值默认为字符串类型。)...原创 2020-11-22 21:09:18 · 1399 阅读 · 0 评论