Python学习笔记——8.函数与类进阶
现在关注几个函数和类的进阶概念:迭代器,生成器,闭包,装饰器等。 迭代器 Python 内置的列表等可以支持 for 遍历,本质上是因为列表等提供了迭代所需要的接口,我们可以让自定义类也支持迭代遍历。 首先,for 遍历的实质,以下面的例子说明 123456789s = 'abcd'it = iter(s)print(next(it)) # aprint(next(it)) # bprint(next(it)) # cprint(next(it)) # dprint(next(it)) # 迭代终止,抛出StopIteration异常 对于一个自定义容器类 Demo,我们希望它支持迭代器遍历,那么需要实现如下的内容: 容器类(或者说可迭代对象)提供 Demo.__iter__ 方法,返回一个迭代器类 Iter,迭代器需要记录当前状态 迭代器类提供 Iter.__next__ 方法,返回容器中的元素,并且在迭代完成后抛出 StopIteration 异常,这个异常会被 for 语句自动捕获。 例如一个反向迭代器...
Python学习笔记——7.输入输出
现在关注Python的输入输出,这里并不会对各种输入输出语法进行详细的介绍,只是针对几种可能的需求,够用就行。 print 基本输出 函数原型 1234567def print( *values: object, sep: str | None = " ", end: str | None = "\n", file: SupportsWrite[str] | None = None, flush: Literal[False] = False,) -> None: ... 例子 12345print("hello,world!")# hello,world!a = 1; b = 2; print("a=",a,"b=",b)# a= 1 b= 2 这里如果连续打印多个项,会默认加上空格分隔,可以用关键字参数更改sep。 12print("hi","Alex",sep='-')#...
Python学习笔记——6.模块
Python 除了在解释器中实时执行,或者单个脚本执行,在复杂程序中也有必要对代码进行组织封装,这就是 Python 的模块文件,与模块相对的,称导入并使用模块的脚本为主文件。 模块例子 一个模块的简单例子如下,由一个 demo.py 文件组成,此时 demo 就是模块名。模块的内容包括其中定义的函数以及可执行的语句等。 12345678910111213141516171819# demo.pydef fib(n): a, b = 0, 1 while a < n: print(a, end=' ') a, b = b, a+b print()def fib2(n): result = [] a, b = 0, 1 while a < n: result.append(a) a, b = b, a+b return result# print("hi, this is module demo")s =...
Python学习笔记——5.类
主要是关于用户自定义类的知识,比较重要。 特点 Python3 中所有的类都会默认继承一个基类 object,因此会具有一些基础的属性/方法。(在 Python2 中,自定义类是否继承 object 会有一些细微的区别) 在 Python 中,一切都是对象,有函数对象,有类对象,还有类得到的实例对象,因此和 C++不同,下文不会使用对象这个词来代表实例,我们需要区分类对象和它产生的实例对象。 Python 类模型的语法太过于自由了,写起来就像搭积木一样自由,并且类和实例对象都支持支持动态修改,写法充满危险。(注:基本数据类型比如 int 不支持动态修改它的属性,只有自定义类型可以) Python 作为典型的动态类型语言,在使用过程中并不存在对函数参数类型的强制约束,传入的对象只要满足相应的接口要求,就可以完全正常使用。这种处理方式通常被称为鸭子模型:当一个东西走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么它就可以被称为鸭子。这种放弃类型检查的做法使得代码的编写更加简单,但是也遗留了更多的隐患。 Python vs C++:...
Python学习笔记——4.函数
函数格式 Python 要求使用如下格式来定义函数。 1234def 函数名([参数列表]): ["函数文档字符串"] 函数体 [return语句] 其中只有函数体是必要的(如果是空函数也需要使用pass或...占位),参数列表,文档字符串和return语句都可以省略。 函数说明文档的字符串使用连续三个单引号或双引号包裹,看起来像多行注释。 简单示例 空函数,没有任何效果 12def null(): pass HelloWorld 函数,打印字符串 12345def hello_world(): """ hello,world """ print('Hello, World!') 包含输入输出的减法函数 1234def subtract(x,y): return x-ysubtract(3,2) # 1 函数参数 参数传递机制 函数的参数传递相当于...
Python学习笔记——3.流程控制与异常
一些关于流程控制的语法,除了继续吐槽一下 Python 的缩进规则之外,也没什么好说的,各种语言都大同小异,直接给例子即可。 条件语句 if 条件 直接给例子,只需要注意一下用elif而非else if 1234567891011121314if a==1: ...if x<0: ...else: ...if x<0: ...elif x==0: ...else: ... 最简单的单行 if 也是可以的 1if True: print("hello") 还可以使用如下的单行 if 表达式,类似于 C 语言的三目运算符,它算作表达式,因此也可以用在 lambda 表达式中 123result = 1 if True else -1 # 1result = (lambda : 1 if 3>4 else -1)() # -1 注意:在 if 中的条件可以包括与或非等更复杂的逻辑判断,但是只能使用 and or not 来代表,不支持 && ||...
Python学习笔记——2.字面量与运算符
字面量 字面值是内置数据类型常量值的表示法,也就是硬编码在 Python 脚本中的数据,包括数字和字符串等的表示形式。 数值字面量 主要包括如下的数值字面量 整数,例如100 浮点数,例如3.12,10.,.001和3.14e-10 复数,例如1+2j(注意不是 i 而是 j,并且 j 前面不能有空格) 注意: 对于整数,默认十进制,可以使用 0b 开头表示二进制,使用 0x 开头表示十六进制等。 对于长整数,可以加下划线增加可读性,没有实际效果。例如 123_456_789。 根据参考文档,严格来说数值字面量不含正负号-和+,并且有纯虚数而没有复数,复数是实数和纯虚数的组合。 布尔字面量 布尔字面量包括两个:True 和 False。 在某些情况下,相当于数字中的 1 和 0: 121 == True # True0 == False # True 字符串字面量 Python 不区分字符和字符串,字符视作长度为 1 的字符串。 字符串需要用单引号或者双引号包裹,\ 被用作转义特殊字符,例如 \" 表示双引号。...
Python学习笔记——1.基础
概述 Python 是一个非常友好的高级语言,Python 的特点比如:面向对象,动态类型,交互式执行,万金油,胶水语言。 Python 类似于 Java,不允许直接操作内存,底层实现了垃圾收集机制(GC)。 Python 在轻量级的使用上无疑是非常香的,并且现在在数据科学领域也达到了称霸的地位。 虽然我同时也在使用 C++,但是 C++ 的语法复杂程度让我从来没有写完整 C++ 学习笔记的打算,只能学一点写一点,慢慢积累,Python 倒是可以尝试一下。 正所谓:人生苦短,我用 Python。 接下来的笔记并不是具有顺序性的,内容会相互交叉,因为如果非要对笔记进行先后排序,就必须将函数、类等重要内容拆成基础和进阶部分来写,但作为整理性质的笔记,并没有这个必要。 关于 Python 绘图的部分,我计划专门写一个系列关于 Python 数据可视化的笔记。 主要参考官方教程和官方文档,前者适合入门,而后者在概念理解上更加详细。 Python 常识 解释器 和 c/c++这种编译型语言不同,Python 作为解释型语言,需要 Python 解释器才能运行,Python...
Python绘图笔记——4.其他
补充几个不常用的图像绘制的示例代码。 直方图 函数原型为 12def ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs): ... 其中的主要选项包括: x,要统计的数据,array or sequence of arrays bins,决定数据 x 如何被分割 如果 bins 是整数 n,则数据 x 分割为 n 个等宽部分 如果 bins 是一个序列,则定义 bin 的边缘,包括第一个 bin 的左边缘和最后一个 bin 的右边缘,这样 bin 可能不等距 如果 bins...
Python绘图笔记——3.动画
这里记录一下 Python 的 matplotlib 的动画效果,注意我们需要分别考虑如下三种运行环境,它们对于动画的支持是不一样的: 浏览器启动 Jupyter Notebook 或 Jupyter Lab 直接运行 Python 脚本 VSCode 启动 Jupyter(目前仍然不支持动画) 例如浏览器启动 Jupyter 可能需要相关的插件(例如 ipympl 插件),并且需要魔法命令 1%matplotlib notebook 在启动内核后,至少需要执行这个魔法命令一次,否则无法播放动画,两个同时播放的动画甚至还会相互影响。 在直接运行 Python 脚本时,Jupyter 的魔法指令是语法错误,对于动画而言,直接运行 Python 脚本反而比 Jupyter 更方便。 matplotlib 绘制动画主要包括两种方法:FuncAnimation 和 ArtistAnimation,下面的代码都需要导入如下的库 123import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation...