- Python采用严格的缩进来表名程序的格式框架,代码编写中,缩进可以用TAb键实现,也可以用多个空格(一般来说是四个空格)实现。
-
注释是程序员在代码中加入一行或者多行信息,用来对语句、函数、数据结构或方法等进行说明,提升代码的可读性。注释是辅助性文字,会被编译器忽略,不被计算及执行。
-
Python语言有两种注释方法:单行注释和多行注释。单行注释以 # 开头,多行注释以 '''(3个单引号)开头和结尾。
-
注释主要有3个用途。第一,标明作者和版权信息。第二,解释代码原理或者用途。第三,辅助程序调试。
-
Python语言允许采用大写字母、小写字母、数字、下划线_和汉字等字符及其组合给变量命名,但名字的首字符不能是数字,中间不能出现空格,长度没有限制。注意:标识符对大小写敏感。
-
保留字:也成为关键字,指被编程语言内部定义并保留使用放入标识符。在书写时不能定义与关键字相同的标识符。以下是Python的33个关键字列表:
表1
False | def | if | raise | None | del | import | return | True | elif | in |
---|---|---|---|---|---|---|---|---|---|---|
try | and | else | is | while | as | except | lambda | with | assert | finally |
nonlocal | yield | break | for | not | class | from | or | continue | global | pass |
-
Python语言中,字符串是用两个双引号 " " 或者单引号 ' ' 括起来的零个或多个字符。
-
字符串是字符的序列,可以按照单个字符或者字符片段进行索引。字符串包括两种序号体系:正向递增序号和反向递减序号。如果字符串长度为L,正向递增以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1;反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。这两种索引字符的方法可以同时使用。
-
Python字符串也提供区间访问方式,采用[N:M]格式,表示字符串中从N到M(不包含M)的子字符串,其中,N和M为字符串的索引符号,可以混合使用正向递增序号和反向递减序号。
- Python语言中,“=”表示“赋值”,即将等号右侧的计算结果赋给左边变量,包含等号(=)的语句称为赋值语句。此外,还有一种同步赋值语句,可以同时给多个变量赋值,基本格式如下:
<变量1>,<变量2>...<变量N> = <表达式1>,<表达式2>...<表达式N>
- input函数从控制台获得用户输入,无论用户在控制台输入深内容,input()函数都以字符串类型返回结果。
- 分支语句是控制程序运行的一类重要语句,它的作用是根据判断条件选择程序执行路径,使用方式如下:
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
......
else:
<语句块3>
- eval(字符串)函数是Python语言中一个十分重要的函数,它能够以Python表达式的方式解析并执行字符串,并将返回结果输出。简单说,eval(字符串)的作用是将输入的字符串转变成Python语句,并执行该语句。
- 循环语句是控制程序运行的一类重要语句,与分支语句控制程序类似,它的作用是根据条件确定一段程序是否再次执行一次或者多次。
- 函数可以理解为对一组表达特定功能表达式的封装,它与数学函数类似,能够接受变量并输出结果。input()、print()、eval()都是python解释器的内置函数。
使用import引用函数有两种方式,但对函数的使用方式略有不同。
- 第一种引用函数库的方法如下:
import 库名
此时,程序可以调用库名中的所有函数,使用库中函数的格式如下:
<库名>.<函数名>(函数参数)
- 第二种引用函数库的方法如下:
from <库名> import <函数名,函数名...函数名>
from <库名> import *
其中,*是通配符,表示所有函数,此时,调用该库的函数时不再需要使用库名,直接使用如下格式:
<函数名><函数参数>
表2
函数名称 | 函数说明 |
---|---|
abs(x) | x的绝对值。如果X是复数,返回负数的模 |
all(x) | 组合类型变量x中所有元素都为真时返回True,否则返回else;若x为空,返回True |
any(x) | 组合类型变量x中任一元素都为真时返回True,否则返回else;若x为空,返回False |
bin(x) | 将整数x转换为等值的二进制字符串,如bin(1010)的结果是'0b1111110010' |
bool(x) | 将x转换为Boolean类型,即True或False。如bool('')的结果是False |
chr(i) | 返回Unicode为i的字符。如chr(9966)的结果是'✌'。 |
complex(i,j) | 创建一个复数r+i*1j,其中i可以省略。如complex(10,10)的结果是10+10j |
dict() | 创建字典类型。如dict()的结果是一个空字典 |
divmod(a,b) | 返回a和b的商及余数 |
eval(s) | 计算字符串s作为Python表达式的值,如eval("1+99")的结果是100 |
exec() | 计算字符串s作为Python语句的值。如exec('a=1+999')运行后,变量a的值为1000 |
float(x) | 将X转换成浮点数。如float(1010)的结果是1010.0 |
hex(x) | 将整数转换为16进制字符串。如hex(1010)的结果是'0x3f2' |
input(x) | 获取用户输入,其中s是字符串,作为提示信息。s可选 |
int(x) | 将x转换成整数。如int(9.9)的结果是9 |
len(x) | 计算变量x的长度。如len(range(10))的结果是10 |
list(x) | 创建或将变量x转换成一个列表类型。如list({10,9,8})的结果是[8,9,10] |
max(a1,a2,...) | 返回参数的最大值。如max(1,2,3,4,5)的结果是5 |
min(a1,a2,...) | 返回参数的最小值。如min(1,2,3,4,5)的结果是1 |
oct(x) | 将整数x转换为8进制字符串。如oct(1010)的结果是'0o1762' |
open(fname,m) | 打开文件,包括文本方式和二进制方式等。其中,m部分可以省略,默认是以文本可读形式打开 |
ord(c) | 返回一个字符的Unicode编码值。如ord("字")的结果是23383 |
pow(x,y[,z]) | 返回x的y次幂。如果z存在,则再对进行取模。如pow(2,pow(2,2))的结果是16 |
print(x) | 打印变量或字符串x。print()的end参数用来表示输出的结尾字符 |
range(a,b,s) | 从a到b(不含)以s为步长产生一个序列。如list(range(1,10,3))的结果是[1,4,7] |
reversed(r) | 返回组合类型r的逆序迭达形式。如for i in reversed([1,2,3])将逆序遍历列表 |
round(n) | 四舍五入方式计算n。如 round(10.6)的结果是11 |
set(x) | 将组合数据类型x 转换成集合类型。如set([1,1,1,1])的结果是{1} |
sorted(x) | 对组合数据类型x进行排序,默认从小到大 。如sorted([1,3,5,2,4])的结果是[1,2,3,4,5] |
str(x) | 将x转换成等值的字符串类型。如str(0x1010)的结果是'4112' |
sum(x) | 对组合数据类型x计算求和结果。如 sum([1,2,3,4,5])的结果是15 |
type(x) | 返回变量x的数据类型。如type({1:2})的结果是<class 'dict'> |
tuple() | 将可迭达对象转换成 元组 |
next() | 返回迭达器的下一个元素 |
enumerate() | 将可遍历的数据对象组合成一带有数据和数据下标的索引序列 |
filter() | 通过指定条件过滤序列并返回符合要求的过滤值 |
iter() | 根据指定的可迭达集合对象或可调用对象来生成一个迭代器 |
map () | 通过自定义函数实现对序列的元素映射操作并返回操作后的结果 |
zip() | 将可迭达的对象打包成元组并返回由元组组成的对象 |
format() | 格式化数据 |
slice() | 通过指定的切片位置和间隔构造一个切片对象 |
组合数据类型为多个同类型或者不同类型数据提供单一表示。组合数据类型分为3类:序列类型、集合类型和映射类型。
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。Python语言中有很多数据类型都是序列类型,其中比较重要的是str(字符串)、tuple(元组)和list(列表)。序列类型有12个通用的操作符和函数,如表所示:
表3
操作符 | 描述 |
---|---|
x in s | 如果x是s是元素,返回Ture,否则返回False |
x not in s | 如果x不是s是元素,返回Ture,否则返回False |
s + t | 连接s和t |
s * n 或 n * s | 将序列s复制n次 |
s[i] | 索引,返回序列的第i个元素 |
s[i:j] | 分片,返回包含序列s第i到第j个元素的子序列(不包含第j个元素) |
s[i:j:k] | 步骤分片,返回包含序列s第i到第j个元素以k为步数的子序列 |
len(s) | 序列s的元素个数 |
min(s) | 序列s中的最小元素 |
max(s) | 序列s中的最大元素 |
s.index(x[,i[,j]]) | 序列s中从i开始到j位置中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
tips:元组是序列中比较特殊的类型,因为它一旦创建就不能被修改。生成元组只需要将元素隔离开即可,也可以增加圆括号,但圆括号在不混淆语义的情况下不是必须的。
example:
creature = 'cat','dog','tiger','human'
集合类型与数学中的概念一致,即包含0个或多个数据项的无序组合。集合中的元素不可重复,元素类型只能是固定数据类型,例如整数、浮点数、字符串、元组等,列表、字典和集合数据类型本身都是可变数据类型,不能作为集合的元素出现。由于集合是无序组合,它没有索引和位置的概念,不能分片,集合中元素可以动态增加和删除。集合用{}表示,可以用复制语句生成一个集合,例如:
s = {425,"BIT",(10,"cs"),"424"}
集合类型有10个操作符,如表所示:
表 4
操作符 | 描述 |
---|---|
S - T或S.difference(T) | 返回一个新集合,包括在集合S中 但不在集合T中的元素 |
S-=T或S.difference_updat(T) | 更新集合S,包括在集合S但不集合T中的元素 |
S&T或S.intersection(T) | 返回一个新集合,包括同时在集合S和T中的元素 |
S&=T或 S.intersection_update(T) | 更新集合 S,包括同时在集合S和 T中元素 |
S^T或s.symmetricc_difference(T) | 返回一个新集合 ,包括集合S和T中的元素,但不包括同时在其中的元素 |
S^=T或s.symmetricc_difference_update(T) | 更新集合S,包括集合S和T中的元素,但不包括同时在其中的元素 |
S |T或S.union(T) | 返回一个新集合,包括集合S和T 中的所有元素 |
S|=T或S.update(T) | 更新集合S,包括集合S和T 中的所有元素 |
S<=T或S.issubset(T) | 如果S与T相同或者S是T的 子集,返回True,否则返回False,可以用S<T判断S是否是T的真子集 |
S>=T或S.issuperset(T) | 如果S与T相同或者S是T的 超集,返回True,否则返回False,可以用S<T判断S是否是T的真子集 |
集合类型有10个操作函数或方法,如表所示:
表5
操作函数或方法 | 描述 |
---|---|
S.add(x) | 如果数据项x不在集合S中,将x增加到s |
S.clear() | 移除S中的所有数据项 |
S.copy() | 返回集合S的一个副本 |
S.pop() | 随机返回集合S中的一个元素,如果S异常,则产生KeyError异常 |
S.discrad(x) | 如果x在集合S中,移除该元素;如果x不在集合S中,不报错 |
S.remove(x) | 如果x在集合S中,移除该元素;不在则产生KeyError异常 |
S.isdisjoint(T) | 如果集合S 与T 没有相同元素,返回True |
len(S) | 返回集合S的个数 |
x in S | 如果x是S的元素,返回True,否则返回False |
x not in S | 如果x不是S的元素,返回True,否则返回False |
集合类型主要用于3个场景:成员关系测试,元素去重和删除数据项。
映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对是一种二元关系,源于属性和值得映射关系。键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
要点:列表是包含0个或多个对象引用的有序序列,没有长度限制,可自由增删元素,使用灵活。
列表(list)是包含0个或多个对象引用的有序序列,属于序列类型。列表的长度和内容都是可变的,可自由对列表中的数据项进行增加、删除或替换。列表没有长度限制,元素类型可以不同,使用非常灵活。
列表用中括号([])表示,也可以通过list()函数将元组或字符串化成列表。直接使用list()返回一个空列表。
与整数和字符串不同,列表要处理一组数据,因此,列表必须显示的数据赋值才能生成,简单的将一个列表赋值给另一个列表不会生成新的列表对象。
列表是序列类型,因此,表3中12个序列类型的操作符和函数都可以应用于列表类型。表6给出了列表类额外的14个常用函数或方法:
表6
函数或方法 | 描述 |
---|---|
ls[i]=x | 替换列表ls第i数据项为x |
ls[i:j]=lt | 用列表lt替换列表ls中第i到第j项数据(不含第j项,下同) |
ls[i:j:k]=lt | 用列表lt替换列表ls中第i到第j项以k为步数的数据 |
del ls[i:j] | 删除列表ls中第i到 第j 项数据,等价于ls[i:j]=[] |
del ls[i:j:k] | 删除列表ls中第i到第j项以k为步数的数据 |
ls+=lt或ls.extend(lt) | 将列表lt元素增加到列表ls中 |
ls *=n | 更新列表ls,其元素重复n 次 |
ls.append(x) | 在列表ls最后增加一个元素x |
ls.clear() | 删除ls中的所有元素 |
ls.copy() | 生成一个新列表,复制ls中的所有元素 |
ls.insert(i,x) | 在列表ls的第i位置增加元素x |
ls.pop(i) | 将列表ls中的第i项元素取出并删除该元素 |
ls.remove(x) | 将列表中出现的第一个元素x删除 |
ls.reverse() | 列表ls中的元素反转 |
要点:字典是包含0个或者多个键值对的集合,没有长度限制,可以根据键索引值得内容。
Python语言中的字典可以通过大括号{}建立,建立模式如下:
{<键1>:<值1>,<键2>:<值2>,...,<键n>:<值n>}
其中,键和值通过冒号连接,不同键值对通过逗号隔开。简单说,可以把字典看成元素是键值对的集合。字典最主要的用法是查找与特定键相对应的值,这通过索引符号来实现。一般来说,字典中键值对的访问模式如下,采用中括号形式:
<值> = <字典变量>[<键>]
字典中对某个键值的修改可以通过中括号的访问和赋值实现。
- 使用大括号可以创建字典,并制定初始值,通过中括号可以增加新的元素。例如:
>>>Dcountrys = {"**":"北京","美国":"华盛顿","法国":"巴黎"}
>>>Dcountrys['英国'] = '伦敦'
>>>print(Dcountrys)
{"**":"北京","美国":"华盛顿","法国":"巴黎",'英国':"伦敦"}
直接使用大括号可以创建一个空的字典,并通过中括号向其增加元素。
表7
函数和方法 | 描述 |
---|---|
< d >.keys() | 返回所有键信息 |
< d >.values() | 返回所有的值信息 |
< d >.items() | 返回所有的键值对 |
< d >.get(< key >,< default>) | 键存在则返回相应的值,否则返回默认值 |
< d >.pop(< key>,< default > ) | 键存在返回相应值,同时删除键值对,否则返回默认值 |
< d >.popitem() | 随机从字典中取出一个键值对,以元组(key,value)形式返回 |
< d>.clear() | 删除所有的键值对 |
del < d>[< key>] | 删除字典中某一个键值对 |
< key> in d | 如果键在字典中则返回True,否则返回False |
上述方法的一些例子如下,如果希望keys()、values()和items()方法返回列表类型,可以用list()函数将返回值转换成列表
>>>Dcountrys = {"**":"北京","美国":"华盛顿","法国":"巴黎"}
>>>Dcountrys.keys()
dict_keys(['**', '美国', '法国'])
>>>list(Dcountrys.keys())
['**', '美国', '法国']
>>>list(Dcountrys.values())
['北京', '华盛顿', '巴黎']
>>> Dcountrys.items()
dict_items([('**', '北京'), ('美国', '华盛顿'), ('法国', '巴黎')])
>>> '**' in Dcountrys
True
与其他组合类型一样,字典可以通过for-in语句对其元素进行遍历,基本语法结构如下:
for <变量名> in <字典名>:
<语句块>
由于键值对中的键相当于索引,因此,for循返回的变量名是字典的索引值。字典是实现键值对映射的数据结构,它采用固定数据类型的键数据作为索引,十分灵活,请理解如下一些基本原则:
- 字典是一个键值对的集合,该集合以键作为索引,一个键信息只对应一个值信息。
- 字典中元素以键信息为索引访问。
- 字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。
——未完待续