Python 学习笔记——10.基本类型常用操作
记录一下涉及到字符串,列表,元组和字典这几个基本类型的常用操作吧。 字符串 字符串的本质是就是一些字符组成的不可变序列,Python把单个字符视作长度为1的字符串进行统一处理。使用字符串字面量来定义一个字符串对象 1s = 'abcd' 索引 可以使用索引获取指定位置的字符: 正向索引从第一个字符开始,依次为s[0],s[1]... 反向索引从最后一个字符开始,依次为s[-1],s[-2]... 1234s = "abcd"s[1] # "b"s[-1] # "d" 超出实际范围的索引会报错。 字符串是不可变的,因此通过索引获得的只是可读的,不能进行修改 123s = "abcd"s[0]='a' # 报错 切片 可以使用切片获取字符串片段来创建新的字符串,切片的基础语法为str[lower:upper:step],lower代表切片的起点,upper代表终点(不含),step代表步长(省略时默认为1) 切片的具体语法非常灵活,这里只给出几个例子...
Python 学习笔记——9.变量
变量作为Python中最基础的概念,但是我却很难捋清楚它的概念,因此放在了笔记的后面。 Python的变量使用非常灵活方便,但是这也导致了Python变量的底层原理不易理解,这一点与C/C++的变量完全不同。 在这篇笔记中,重点区分几个概念: 字面量:字面值是内置数据类型常量值的表示法 对象:对象具有类型,类型实例化得到对象 变量:可以指向一个任何类型对象的指针 关于字面量和字面量集的表示语法在前面已经介绍过,这里不再重复。 对象 在 Python 中,一切皆为对象,函数也是对象。 每一个对象都具有类型,对象是类型的实例,这些是面向对象的通用概念,在Python中也一样成立。 我们不需要像 C++一样手动管理内存中对象的创建与销毁,而是由 Python 虚拟机的负责(本质还是通过 C 的 malloc 之类的函数以及系统调用),内存回收机制...
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...