写在最初,终端中,输入 import this 了解Python之禅的魅力
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
1、终端写python程序,直接键入python(python3版本,一般需要键入python3),退出时,可以使用代码段:exit(), 也可以使用快捷键Crtl + D
(打开终端的快捷键:Ctrl + Alt + T 目前仅测试Ubuntu)
2、定义变量不需要考虑类型,其会自动匹配对应类型
3、变量命名规则:
①. 变量名只能包含字母、数字和下划线。变量名可以字母或者下划线打头,但不能以数字打头
②. 变量明不能包含空格,但可使用下划线来分割其中的单词
③. 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词。
④变量名应既简短又具有描述性
⑤慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0
ps:就目前而言,应使用消息网的Python变量名
4、字符串
Python中,无论用单引号还是双引号括起来的,都是字符串,虽然更加人性化但也应该注意 避免混淆
①. Function: title() 作用是将所有单词的首字母都大写
②. Function: upper() 作用是将所有字母都改成大写
③. Function: lower() 作用是将所有字母都改成小写
④. 合并(拼接)字符串: 用 “+”
⑤. 换行符用\n, 添加制表符用\t
⑥. 删除空白行
空白很重要,特别是在做字符串比对的时候,尤为明显。但是在一些简单的情形下,额外的空白也可能令人迷惑
ⅰ、Function:rstrip() 作用是删除字符串末尾的空白
ⅱ、 Function:lstrip() 作用是删除字符串开头的空白
ⅲ、 Function: strip() 作用是删除字符串两端的空白
ps:特别注意,引号不能混用
pps:编写程序时,编辑器的语法突出功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。
5、Python2 与 Python3 的区别
①. Python2 中的 print 语句,可以用括号,可以不用。而 Python3 中,由于 print 变为了 Function,因此必须用括号。
②. Python2 中整数除法的结果只包含整数部分,使用去尾法。而 Python3 中,会自动输出浮点数
6、数字类型
ps:python 部分代码在编译器和终端,输入输出有些许差异
①. 整数 基本不需要太注意什么,
ps:Python使用两个乘号(**) 表示乘方。其还可以使用括号来改变运算次序
②. 浮点数 基本无需考虑 其行为
ps:结果包含的小数位可能不是很确定,Python 会尽力找到一种方式,以尽可能精确地表示结果,暂时忽略多余的小数位即可,后续慢慢研究
③. Function:str() 作用将非字符串值表示为字符串 避免类型错误
ps:大多数情况下,Python中使用数字非常简单。若结果出乎意料,就检查一下,是否出现Python无法理解的类型错误!
7、列表
①. 列表和C语言中的数组基本相同,索引 (下标) 同样从一开始。特别的,Python的列表可以从后往前用下标,最后一个元素的下标为 -1,以此类推
②. 修改列表元素,直接给列表中对应元素进行赋值即可
③. 添加列表元素:
Function:append() 作用直接向列表末尾添加元素
Function:insert(下标,‘元素’) 作用向列表对应下标插入对应元素
④. 删除列表元素:
ⅰ、使用 del 语句删除元素,必须知道该元素所对应的下标,该语句直接将该元素彻底删除,无法继续访问
ⅱ、Function: pop() 作用将元素从列表中删除,并将其存储到某一变量。pop(下标),删除对应下标的元素,并将其存储到某一变量
ⅲ、Function:remove() 作用 只知道要删除元素的值,使用该方法。亦可将其存储到某一变量,为我所用
ps:remove()只删除第一个指定的值。如果删除的值可能多次存在,须使用循环判断
8、组织列表
①. Function:sort() 作用对列表进行永久性排序,不能再改回原排序方式。其中sort(reverse = True),列表元素反向排列。
②. Function:sorted() 作用对列表进行临时排序,反向排列用法同上
③. Function:reverse() 作用将列表元素反向排列,也为永久性排序,但是可随时恢复到原排列。再调用一次 reverse() 即可
④. Function:len() 作用快速获悉列表的长度
ps:列表元素下标从0开始,不要犯越界错误,下标-1元素一直输出最后一个,仅当列表为空时,这种访问方式才会错误
9、循环遍历
①. 语法 for A in B: 把B中的每一个数值单独提出来,赋值给A
②. 在 for 循环中,想包含多山行代码都可以,每个缩进的代码行 都是循环的一部分
③. 代码没有缩进便自动跳出循环,和之前的{}循环体不太一样, 请注意
④. 由于 python 以缩进来区分代码块,因此,一定要保持一个良好的缩进风格
⑤. 千万不能忘记 for 循环语句后面的 “ : “
10、创建数字列表
①. Function:range(a, b) 作用打印从 a 开始到 b 结束,之间的数字
②. Function:list(range(a, b)) 作用 将range() 打印出来的一系列数字转换为一个列表
③. Function:range(a, b, c) 作用 打印从 a 到 b 的数字, 每次打印在前一次的基础上 + c ,即 指定步长
PS:在编写代码时,首先应该编写清晰易懂且能完成所需功能的代码;等待审核代码时,再考虑采用更高效的方法
PS:处理数字列表时有几个特殊函数,能帮助找出数字列表的最大值、最小值和总和:max() min() sum()
11、处理部分元素 – python 称之为切片
①. Function:List(a : b) 作用 处理列表 List 从 a 开始终于 b 的列表元素
②. 若没有指明 a,则从头开始执行。若没有指明 b, 则执行到末尾
③. 若 a 为负数,则执行最后几个
PS:列表可以直接赋值,但是一定要用切片,a 和 b 都为空。否则的话,连个列表会指向同一片内存,而不是赋值类似对比指针
12、元组
①. Python将不能修改的值称为不可变的,而不可变的列表被称为元组。定义元组用 “( )”
②. 遍历元组中的所有值和遍历列表一样
③. 虽然不能修改元组的元素,但是可以直接对其进行重新赋值
13、if 相关
①. Function:lower() 作用在判断两变量是否相等时,忽略大小写的影响。且不改变原变量的值
②. 编写的大多数条件表达式都检查两个值是否相等,但有时检查两个值是否不等的效率更高
③. 在 python 中,同时判断多个条件,直接使用 and 或者 or 即可
④. Function:A in (not) B 作用是判断A是否(不)在B中
PS:else if 在 python 中简写为 elif
14、字典基础
①. 字典与c语言中的结构体相似,可对应理解相关概念
②. 获取字典中的值:aaa[‘…’] ,其中 aaa 对应的是字典名称, … 对应的是想要访问的字典对应的键值
③. 由于字典是一种动态结构,故对其添加新的键-值对,只需依次指定字典名和键及相关联的值:aaa[‘…’] = bbb
④. 打印整个字典,只需要 print(aaa)
⑤. 修改字典中的键值,只需要给对应的键值重新赋值即可
⑥. Function: del aaa[‘…’] 作用是删除某键值对
PS:… 可以为变量,不过此时不需要加 ‘ ’
15、遍历字典
PS:遍历字典时,键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。
①. 遍历字典的所有键-值对: (for …, … in aaa.items() )
②. 遍历字典的所有键: ( for … in aaa.keys() )
③. 方法 keys() 并非只能用于遍历,实际上,还可以判断某键是否存在于字典中
④. Function:sorted() 作用获得按特定顺序排列的键列表副本
⑤. 遍历字典的所有值: ( for … in aaa.values())
⑥. 可使用集合(set)对遍历字典的所有值进行去重
16、嵌套
①. 在列表中嵌套字典:a_1 = {…} a_2 = {…} … a = [a_1, a_2, ……]
②. Function:range(n) 作用自动创建 n 个对象
③. 在字典中嵌套列表:a = {… , ‘b’: [‘…’, ‘…’, ‘…’]}
④. 字典中嵌套字典: a = {‘b’: {…}, ‘c’: {…}}
PS:列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单的解决问题的方案
PS:字典之间的嵌套,最好保持嵌套内字典结构相同,这样能使得字典处理起来更容易
PS:每当使用 input () 输入函数时,都应当指定清晰且易于明白的提示
PS:有时候,提示信息可能超过一行,可将提示存储在一个变量中,再将其传递给函数 input()
PS:python 默认输入格式为字符串,若要使用数字,需用强制转换,as:int()
PS:python中数字类型是不可变数据。也就是数字类型数据在内存中是不会发生改变的,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址
PS:由于部分整数使用频繁,为了提升性能避免浪费,python提供了一个整数池,默认 [-5, 256]的数字都属于这个整数池,每次赋值都是取得池中的对象。
17、循环
①. break 可以用于 python 的各种循环之中,作用就是结束循环
②. continue 结束本次循环,直接跳到下一次循环
PS:确认每个循环都有有一个属于自己的ending,若程序陷入无限循环,可按 Ctrl + C,或直接关闭终端窗口来终结该bug。
18、无返回值函数
①. python 中定义函数,用关键字 def
②. 定义需传参的函数 def aaa (bbb) :
③. 形参 实参 注意区分。若实在很难记,统称参数
④. 向形参传递实参的方法有两种,位置传参,关键字传参。对标C
⑤. 编写函数时,可以预先指定形参的默认值,若调用函数,没有给定实参,则使用形参的默认值
PS:使用哪种调用函数并不重要,使用自己顺手的调用方式才重要!
PS:使用关键字传参时,务必准确地指定函数定义中的形参名
PS:python 中亦可用 “”” … “”” 对代码进行注释
19、有返回值函数
①. 同样用 def 来定义函数,这有别于 C 等,对逻辑要求严格的语法。
②. 有些形参不是必须的,可以在定义时,为该形参赋值为空字符串,只有在需要的时候,才会启用该形参,并为其赋值
PS:在定义函数时,对于给定默认值的形参,一定要放在未给定默认值的形参的后面
③. 函数返回值不只是变量,还可以是字典等
④. 实参不只是变量,定量,还可以是列表等
⑤. 在函数中对列表所做的任何修改都是永久性的
⑥. 若不想让函数修改列表,可使用切片法[ :],创建列表副本,供函数使用,且并不改变函数原列表
20、传递任意数量的实参
①. 使用形参名 *aaa (类比 c 语言中的指针),创建一个空元组。Python 将实参封装到这个元组中
②. 使用形参名 **aaa,创建一个空字典。 Python 将从实参接收到的键-值对封装在这个元组中
21、函数模块化
①. 导入模块:import qqqqqq
②. 导入特定的函数:from aaa import f_1, f_2, … 只导入某模块中自己想用的函数
③. 给导入的函数起别名:from aaa import f_1 as f
④. 给导入的模块七别名:import dddd as d
⑤. (慎用) 导入模块中的所有函数: from ffff import *,不需要在使用 . 调用,可直接使用模块中的所有函数
PS:最好不要采用导入模块中的所有函数,因为 Python 在遇到多个同名的函数或变量时,并不是分别调用,而是暴力覆盖
PS:(特别注意)给形参指定默认值时,等号两边不要有空格。
22、类
①. Python 要求, 类名首字母需要大写,使用驼峰规则命名
②. 类中的函数叫做方法,__init__ 是一个特殊的方法(init前后各两个下划线),Python 类中,会自动运行它
③. 方法__init__ 中,第一形参必须是 self
④. 在方法中定义的每一个属性,都应该赋初值,且形参自动为空。
⑤. 在类中定义的其它方法,调用 __init__方法总的属性,必须用 self.***
⑥. 在类外调用属性或者方法,只需要用 aaa(表示实例化对象).bbb(表示方法或者属性)即可
PS:在 Python2.7 中创建类时,应在括号内加object,as:class ClassName (object):
23、继承
①. class Ass(Bvv) 子类 Ass 继承父类Bvv,继承之后需初始化,对应代码:
def __init__ (self, ..., ..., ...):
super().__init__ (..., ..., ...)
②. 在 Python2.7 版本中,代码有所区别:
def __init__ (self, ..., ..., ...):
super(Ass, self).__init__ (..., ..., ...)
③. 重写父类方法,将该父类方法在子类中重新定义,并给出子类对该方法的使用即可
PS:重写父类,可以使继承做到:取其精华去其糟粕
④. 当一个大类过于繁杂时,我们可以把它拆分成若干个协同工作的小类,此小类不需做继承,在大类中,若用到该小类只需:self.××× = xxx() 声明一下即可,实例化对象调用该小类的某个方法时,只需要:obj.xxx.fun () 即可。(obj: 实例化对象)
PS:这样做,使得模块化越来越细化,后期维护较方便
PS:注意导入整个模块和导入模块函数的区别
PS:若某条语句未按照自己的想法执行,且没有报错,请检查自己调用函数的语句是否忘加括号
PS:在类中,可使用一个空行来分隔方法,而在模块中,可用两个空行来分隔类
24、读取文件
①. Function:open(‘xxx’) 作用是打开文件,并返回一个表示文件的对象
②. 关键字 with 在不再需要访问文件后将其关闭。改关键字特别重要,可以让你省去很多烦恼
PS:使用 with 时,open() 返回的文件对象只在 with 代码块内可用
③. 读取整个文件:xxx = file_object.read()
④. 逐行读取文件:for line in file_object:
⑤. Function:readlines() 从文件中读取每一行,并存储到列表中
PS:读取文本文件时,Python 默认将其中的所有文本都解读为字符串。如果你读取的是数字,且想要将其作为数值使用,就必须使用函数 int() / float() 将其转化为整数或浮点数去使用
25、写入文件
保存文件最简单的方式之一就是将其写入到文件中
①. 深入理解Function:open(xxx, ‘…’),上面已经提到,xxx为文件名变量,…为指定打开方式,
其中:指定读取模式 ‘r’
指定写入模式 ‘w’
指定附加模式 ‘a’
指定读取和写入模式 ‘r+’
PS:如果省略了模式实参,Python将以默认的只读模式打开文件
PS:若作为写模式打开,而该文件夹下并没有该文件,则自动创建它。然而,若已存在,Attention please!Python 将在返回文件对象前清空该文件
PS:Python 只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用 Function:str() 将其转换为字符串格式
②. 若写入的为多行时,一定要加入换行符,因为 Function:write() 不会在你写入的文本末尾添加换行符
PS:除换行符外,还可以使用空格,制表符,空行等,来设置这些输出格式
③. 附加模式 ‘a’, 不会清空之前的内容,而是在原文件的末尾继续添加
26、异常
有效的采用异常机制,可以避免系统崩溃
处理异常代码块:
try:
......
except xxx:
......
else:
......
对某块代码执行异常处理,其中“xxx”为处理那种异常,若出现该异常,则执行 except xxx: 后的代码块,若未出现该异常,则执行 else
PS:通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意攻击
①. ZeroDivisionError,处理被除数为 0 的异常
②. FileNotFoundError,处理文件不存在异常
③. Function:split() 作用是以空格为分隔符将字符串分拆成多个部分。(文本处理常用 Function)
④. 若你不想让异常显示给用户,可以用 pass 语句,让 Python 遇到异常后,什么都不做
27、存储数据
需要导入 json包,即: import json
PS:JSON 格式最初是为 JavaScript 开发的,但随后成了一种常见格式,被包括 Python 在内的众多语言采用。
①. Function:json.dump(aaa, bbb) 作用是将 aaa 的数据存储到 bbb 中
②. Function:json.load(xxx) 作用是将 xxx 这个文件读取到内存
28、重构
对正确的代码进一步的改进,将代码划分为一系列完成具体工作的函数