Python 学习笔记——5.类
主要是关于用户自定义类的知识,比较重要,由于 Python 的语法太自由了,这部分写起来反而很麻烦,需要想方设法加上限制。 特点 Python3 中所有的类都会默认继承一个基类 object,因此会具有一些基础的属性/方法。(在 Python2 中,自定义类是否继承 object 会有一些细微的区别) 在 Python 中,一切都是对象,有函数对象,有类对象,还有类得到的实例对象,因此和 C++不同,下文不会使用对象这个词来代表实例,我们需要区分类对象和它产生的实例对象。 Python 类模型的语法太过于自由了,写起来就像搭积木一样自由,并且类和实例对象都支持支持动态修改,写法充满危险。(注:基本数据类型比如 int...
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...
Python 绘图笔记——2.曲线图
现在关注最常见的绘制曲线图需求。 绘制曲线 使用 Axes 的 plot 方法绘制曲线图,假设 x,y,x2,y2 都是一维的数组,那么可以使用下面几种方式绘制曲线 12345ax.plot(y) # 一条散点连成的曲线,横坐标取从0开始的整数,纵坐标取自yax.plot(x,y) # 一条散点连成的曲线,横坐标取自x,纵坐标取自yax.plot(x,y,x2,y2) # 两条曲线,第一条横坐标取自x,纵坐标取自y,第二条横坐标取自x2,纵坐标取自y2 还可以附加一些细节参数,例如颜色,曲线样式,图例等,下面依次介绍。 颜色 几个常用的颜色及其缩写如下: 蓝色 blue-b 绿色 green-g 红色 red-r 白色 white-w 黑色 black-k(因为b已经被blue占用) 金黄色 yellow-y 蓝绿色(青色)cyan-c 品红色 magenta-m 可以使用关键字参数设置固定的颜色 color='red' 或者使用十六进制的颜色编码如 color='#32CD32'。支持如下的简写: 将常用颜色使用简写,例如 color='r' 将关键字 color...
Python 绘图笔记——1.基础
matplotlib 介绍 matplotlib 大致是类似 matlab 风格的 2D 绘图库(3D 的功能比较弱,还是基于 2D 引擎勉强实现的),同时提供了两套 api: 一个是面向过程的,主要调用 matplotlib.pyplot 的函数; 一个是面向对象的,主要调用 matplotlib 的两个子类:matplotlib.figure.Figure 和 matplotlib.axes.Axes ,使用它们的方法进行细节操作。 面向过程的 api 适合简易使用的场景,但是不容易弄清原理;为了更复杂的绘图要求,这里主要采用面向对象的 api。关于绘图的呈现方式,在 Jupyter 中很可能会自动绘图而不需要 plt.show(),这与魔法指令 %matplotlib inline 有关。 在这一系列笔记中,需要使用如下模块: 123import numpy as npimport matplotlib as mplimport matplotlib.pyplot as plt 由于...
编码学习笔记
编码是最繁琐的问题之一了,尤其对于 C++ 这种 string 还只是char *简易封装的底层语言来说,对于非 ASCII 的字符串的处理需要考虑各个环节的编码,只要错了一项最终就是乱码。 对于一些更高级的语言比如 Python3,全部使用 utf8 就少了很多乱七八糟的乱码问题。 ASCII 码 首先从 ASCII 码开始,在早期的计算机中,使用一个字节(8 比特,实际上是 7 比特)来表示所有英文字母和常见的标点符号,以及回车,制表符等控制字符,如下表。 这里 4 比特用一个十六进制数来表示,实际上没有用完\(2^8=256\)个,只用了一半 128 个,具体而言就是只用了 7 比特,最高位始终为 0。 一些控制字符比如著名的换行符:CR/LF,制表符 HT(tab),剩下的 128 个字符,其实对于绝大多数欧美的拼音文字都是足够的,因此基于 ASCII 码也产生了很多表示西欧文字的编码方案。但是对于成千上万的汉字编码,一个字节显然是不可能完成的任务,典型的中日韩三国的编码问题,通常这被称为 CJK 编码,针对这些语言必须设计多字节编码方案。 多字节编码 仅仅使用...