一、发展历程
Python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中单词Python(意为大蟒蛇)作为该编程语言的名字,是因为英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python's Flying Circus)。后因吉多·范罗苏姆(Guido van Rossum)中的Guido(吉多),与拼音(Gui) 谐音,所以被中国程序员称为“龟叔”。
二、语言特点
1.易学习:Python有相对较少的关键字,结构简单,语法明确,学习起来更加的简单。
2.易阅读:Python代码定义的更清晰。
3.易维护:Python的成功在于它的源代码是相当容易维护的。
4.丰富库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等。
5.可移植:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
6.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
7.数据库:Python提供所有主要的商业数据库的接口。
8.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
9.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
三、基本知识
1.变量命名
1)变量名可以使用字母命名(x、y),也可使用名称命名(age、name、car_name);
2)变量名必须以字母或下划线字符开头;
3)变量名称不能以数字开头;
4)变量名只能包含字母数字字符和下划线(A-z、0-9 和 _);
5)变量名称区分大小写(age、Age 和 AGE 是三个不同的变量);
6)变量名不可使用保留关键字命名。
2.关键字段
Python中保留关键字
序号 | 关键字 | 字段使用方法 |
1 |
and |
逻辑判断语句,and左右两边都为真,则判断结果为真,否则都是假。 |
2 |
as |
with…as… 和with结合使用,主要用于文件的读写操作,省去了关闭文件的麻烦。 import...as ... 和impor结合使用,用于对导入模块或函数进行重命名。 except 和except组合使用,将捕获到的异常对象赋值给except。 |
3 |
assert |
用来在运行中检查程序的正确性,和其他语言一样的作用。assert函数是属于python下的一个函数,也叫作断言函数,它可以用于判断某个表达式的值,若是该值为真,那么程序就能够继续往下执行;反之,Python解释器就会报出AssertionError错误。 |
4 |
async |
async 用来声明一个函数为异步函数,异步函数的特点是能在函数执行过程中挂起,去执行其他异步函数,等到挂起条件(假设挂起条件是sleep(5))消失后,也就是5秒到了再回来执行。 |
5 |
awit |
await 用来用来声明程序挂起,比如异步程序执行到某一步时需要等待的时间很长,就将此挂起,去执行其他的异步程序。await 后面只能跟异步程序或有__await__属性的对象,因为异步程序与一般程序不同。假设有两个异步函数async a,async b,a中的某一步有await,当程序碰到关键字await b()后,异步程序挂起后去执行另一个异步b程序,就是从函数内部跳出去执行其他函数,当挂起条件消失后,不管b是否执行完,要马上从b程序中跳出来,回到原程序执行原来的操作。如果await后面跟的b函数不是异步函数,那么操作就只能等b执行完再返回,无法在b执行的过程中返回。如果要在b执行完才返回,也就不需要用await关键字了,直接调用b函数就行。所以这就需要await后面跟的是异步函数了。在一个异步函数中,可以不止一次挂起,也就是可以用多个await。 |
6 |
break |
break语句是用来终止循环语句的,即使哪怕循环条件没有称为false或者序列还没有被完全递归,也会停止循环语句。提示,如果break的是for或while循环,任何对应的循环else块将不执行。 |
7 |
class |
定义类的关键字,用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。 |
8 |
continue |
continue语句用来跳过当前循环块中剩余语句,然后继续进行下一轮循环。 |
9 |
def |
用于定义函数或方法。 |
10 |
del |
删除变量或者序列的值。 |
11 |
elif |
条件语句 与if else 结合使用。 |
12 |
else |
条件语句 条件语句,与if,elif结合使用。也可以用于异常和循环使用。 |
13 |
except |
包括捕获异常后的操作代码,与try,finally结合使用。 |
14 |
finally |
异常处理关键字,用它可以指定始终执行代码,指定代码在finally里面。 |
15 |
for |
for循环可以遍历任何序列的项目,如一个列表或者一个字符串。 |
16 |
from |
在python用import或者from…import来导入相应的模块。 |
17 |
False |
布尔类型的值,表示假,与true对应。 |
18 |
global |
定义全局标量。 |
19 |
if |
if语句用来检验一个条件,如果条件为真,我们运行一块语句(称为if…块),否则我们处理另外一块语句(称为else…块)。else从句是可选的。 |
20 |
import |
在Python用import或者from…import来导入相应的模块。 |
21 |
in |
判断变量是否存在序列中,for…in是另外一个循环语句,它在一序列的对象上递归即逐一使用队列中的每个项目。 |
22 |
is |
Python中的对象包含三个要素:id,type,value 其中: id:用来唯一标示一个对象; type:标识对象的类型; value:是对象的值; is:就是用来判断a对象是否就是b对象,是通过id来判断的; ==:判断的是a对象的值是否和b对象的值相等,是通过value来判断的 |
23 |
lambda |
定义匿名函数,提升代码的简洁程度。 |
24 |
nonlocal |
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。 |
25 |
not |
逻辑判断,取反的意思。 |
26 |
None |
None是一个特殊常量,None和False不同,None不是0。None不是空字符串。None和任何其他数据类型比较永远返回False。None有自己数据类型NoneType。可将None复制给任何变量,但不能创建其他NoneType对象。 |
27 |
or |
逻辑判断,or两边有一个为真,判断结果就是真 |
28 |
pass |
pass的意思是什么都不要做,作用是为了弥补语法和空定义上的冲突,它的好处体现在代码的编写过程之中,比如你可以先写好软件的整个框架,然后再填好框架内具体函数和class的内容,如果没有pass编译器会报一堆的错误,让整个开发很不流畅。 |
29 |
raise |
raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。 raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。 raise 异常类名称(描述信息):在引发指定类型异常同时附带异常描述信息。 |
30 |
return |
python 函数返回值 return,函数中一定要有return返回值才是完整函数。如果你没有python定义函数返回值,会得到一个结果是None对象。 |
31 |
try |
程序员可以使用try…except语句来处理异常。把通常的语句块放在try块中,而把错误处理的语句放在except块中。 |
32 |
True |
布尔类型的值,表示真,与false相反。 |
33 |
while |
while是循环语句一种,while语句有一个可选else从句。 |
34 |
with |
with它实质是一个控制流语句,with可以用来简化try…finally语句,它的主要用法是实现类_enter_()和_exit_()方法。 |
35 |
yield |
yield用起来像return,return是用来返回具体的某个值,yield一般与循环一起用,相当于生成了一个容器(常见的就是字典),然后在这个容器里面存放了每次循环以后的值,并且就在那放着,不输出,不返回,等你下次需要他的时候直接取出来用(调用)就行。 |
3.数据类型
Numbers(数字):int(整数)—123、 float(浮点)—12.3、complex(复数)—2+3j
Bool(布尔):True、False
String(字符串):'123'
List(列表):[1,2,3]
Tuple(元组):(1,2,3)
Dictionary(字典):{1:23}
Set(集合):{1,2,3}
不变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
4.数据运算
算数运算 |
||
A = 3 B = 2 |
||
加法 |
+ |
A + B = 5 |
减法 |
- |
A - B = 1 |
乘法 |
* |
A * B = 6 |
除法 |
/ |
A / B = 1.5 |
余数 |
% |
A % B = 1 |
次幂 |
** |
A ** B = 9 |
取整 |
// |
A // B = 1 |
比较运算 |
||
等于 |
== |
a == b |
不等于 |
!= |
a != b |
大于 |
> |
a > b |
小于 |
< |
a < b |
大于等于 |
>= |
a >= b |
小于等于 |
<= |
a <= b |
赋值运算 |
等于赋值 |
c = a + c |
|
加法赋值 |
c += a c = c + a |
|
减法赋值 |
c -= a c = c - a |
|
乘法赋值 |
c *= a c = c * a |
除法赋值 |
c /= a c = c / a |
|
取模赋值 |
c %= a c = c % a |
|
次幂赋值 |
c **= a c = c ** a |
|
取整赋值 |
c //= a c = c // a |
逻辑运算 |
||
A = 15 B = 20 |
||
多个条件判断 |
and |
a > 10 and b > 10 返回true |
任意条件判断 |
or |
a > 10 or b > 20 返回true |
取反条件判断 |
not |
not a > b 返回true |
成员运算 |
||
in |
如果在指定的序列中找到值 返回 True,否则返回 False。 如果 x 在 y 序列中返回 True。 |
not in |
如果在指定的序列中没有找到值 返回 True,否则返回 False。 如果 x 不在 y 序列中返回 True。 |
身份运算 |
||
is |
is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象 则返回 True,否则返回 False |
is not |
is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。 如果引用不是同一个对象 则返回 True,否则返回 False。 |
优先运算(以下表格列出从最高到最低优先级的所有运算符) |
||
** |
指数 (最高优先级) |
|
~ + - |
按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
|
* / % // |
乘,除,取模和取整除 |
+ - |
加法减法 |
|
>> << |
右移,左移运算符 |
|
& |
位 'AND' |
^ | |
位运算符 |
|
< = < > >= |
比较运算符 |
|
== != |
等于运算符 |
= %= /= //= -= += *= **= |
赋值运算符 |
|
is is not |
身份运算符 |
in not in |
成员运算符 |
|
not and or |
逻辑运算符 |
按位运算 |
||
Python中的按位运算法则如下: 变量 a = 60,b = 13,二进制格式如下: a = 0011 1100 b = 0000 1101 |
& |
按位与运算符:参与运算的两个值, 如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 , 二进制解释: 0000 1100 |
| |
按位或运算符:只要对应的二个二进位 有一个为1时,结果位就为1。 (a | b) 输出结果 61 , 二进制解释: 0011 1101 |
^ |
按位异或运算符:当两对应的二进位 相异时,结果为1 (a ^ b) 输出结果 49 , 二进制解释: 0011 0001 |
~ |
按位取反运算符:对数据的每个二进制位取反, 即把1变为0,把0变为1 。~x 类似于-x-1 (~a ) 输出结果 -61 , 二进制解释: 1100 0011,有符号二进制数补码形式。 |
<< |
左移动运算符:运算数的各二进位全部左移若干位, 由<< 右边的数字指定了移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 , 二进制解释: 1111 0000 |
>> |
右移动运算符:运算数的各二进位全部右移若干位, 由>> 右边的数字指定了移动的位数 a >> 2 输出结果 15 , 二进制解释: 0000 1111 |
5.打印输出
1)print()函数用于执行打印输出。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
objects - 复数,表示可以一次输出多个对象。输出多个对象时需要用‘,’ (英文)分隔。
sep - 用来间隔多个对象,默认值是一个空格。
end - 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file - 要写入的文件对象。
flush - 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。
注意:
( ) 和 ' '均为英文状态输入;可以使用 ' ' 、'' ''、 ''' '''包裹字符。
print(123) #123 print('Hello World') #Hello World a ,b = 1 ,2 print(a,b) #1 2 print('www','baidu','com',sep= '.') #www.baidu.com for i in '123': print(i,end = '*') #1*2*3*
2)input() 函数接收一个标准输入数据,返回为 string 类型。
input([prompt])
prompt - 提示信息
a = input('请您输入一个数字:') #输入数据内容123 print(a) #123 print(type(a)) #<class 'str'>数据类型为字符串
6.类型转换
序号 |
函数 |
作用 |
1 |
int(x) |
将x转换成整数类型 int('123')→123。 |
2 |
float(x) |
将 x 转换成浮点数类型 float(123)→123.0。 |
3 |
complex(real, [,imag]) |
创建一个复数 complex(1, 2) →(1+2j)。 |
4 |
str(x) |
将 x 转换为字符串 str(123)→'123'。 |
5 |
list(x) |
将序列 x 转换为列表 list({1,2,3})→[1,2,3]。 |
6 |
tuple(x) |
将序列 x 转换为元组 tuple([1,2,3])→(1,2,3)。 |
7 |
set(x) |
将序列 x 转换为集合 set([1,2,3])→{1,2,3}。 |
8 |
dict(x) |
创建一个字典。 序列x必须是元组。 dict(((1,2),))→{1: 2}。 |
9 |
repr(x) |
将 x 转换为表达式字符串 repr('1\t2\n3')→'1\t2\n3'。 |
10 |
eval(str) |
计算在字符串有效表达式,并返回一个对象 。eval(2+3)→5。 |
11 |
chr(x) |
主要用来表示ascii码对应的序号 chr(97)→'a'。 |
12 |
ord(x) |
主要用来返回对应字符的ascii码 ord('a')→97。 |
13 |
bin(x) |
将一个整数 x 转换为一个二进制的字符串 bin(12) →0b1100。 |
14 |
oct(x) |
将一个整数 x 转换为一个八进制的字符串 oct(123)→0o173。 |
15 |
hex(x) |
将一个整数 x 转换为一个十六进制字符串 oct(123)→0x7b。 |
7.字符转义
序号 |
字符 |
用法 |
1 |
\a |
系统响铃声 。 |
2 |
\n |
换行符,将光标移到下一行开头 。 |
3 |
\r |
回车符,将光标移到当前行开头 。 |
4 |
\f |
翻页符,将光标移到下页开头 。 |
5 |
\t |
水平制表符,也即Tab键,一般相当于四个空格 。 |
6 |
\v |
纵向制表符 。 |
7 |
\b |
退格(Backspace),将光标位置前移并覆盖删除前一个字符 。 |
8 |
\\ |
代表一个反斜杠 \ 。 |
9 |
\' |
代表一个单引号 ' 。 |
10 |
\" |
代表一个双引号'' 。 |
11 |
\? |
代表一个问号 ? 。 |
12 |
\0 |
代表一个空字符 。 |
13 |
\ |
在字符串行尾,即一行未完,转到下一行继续写 。 |
8.标准异常
异常名称 |
描述 |
BaseException |
所有异常的基类 |
SystemExit |
解释器请求退出 |
KeyboardInterrupt |
用户中断执行(例如无限循环进行下去所导致) |
Exception |
常规错误的基类 |
StopIteration |
迭代器没有更多的值 |
GeneratorExit |
生成器(generator)发生异常来通知退出 |
StandardError |
所有的内建标准异常的基类 |
ArithmeticError |
所有数值计算错误的基类 |
FloatingPointError |
浮点计算错误 |
OverflowError |
数值运算超出最大限制 |
ZeroDivisionError |
除(或取模)零 (所有数据类型) |
AssertionError |
断言语句失败 |
AttributeError |
对象没有这个属性 |
EOFError |
没有内建输入,到达EOF 标记 |
EnvironmentError |
操作系统错误的基类 |
IOError |
输入/输出操作失败 |
OSError |
操作系统错误 |
WindowsError |
系统调用失败 |
ImportError |
导入模块/对象失败 |
LookupError |
无效数据查询的基类 |
IndexError |
序列中没有此索引(index) |
KeyError |
映射中没有这个键 |
MemoryError |
内存溢出错误(对于Python 解释器不是致命的) |
NameError |
未声明/初始化对象 (没有属性) |
UnboundLocalError |
访问未初始化的本地变量 |
ReferenceError |
弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError |
一般的运行时错误 |
NotImplementedError |
尚未实现的方法 |
SyntaxError |
Python 语法错误 |
IndentationError |
缩进错误 |
TabError |
Tab 和空格混用 |
SystemError |
一般的解释器系统错误 |
TypeError |
对类型无效的操作 |
ValueError |
传入无效的参数 |
UnicodeError |
Unicode 相关的错误 |
UnicodeDecodeError |
Unicode 解码时的错误 |
UnicodeEncodeError |
Unicode 编码时错误 |
UnicodeTranslateError |
Unicode 转换时错误 |
Warning |
警告的基类 |
DeprecationWarning |
关于被弃用的特征的警告 |
FutureWarning |
关于构造将来语义会有改变的警告 |
OverflowWarning |
旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning |
关于特性将会被废弃的警告 |
RuntimeWarning |
可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning |
可疑的语法的警告 |
UserWarning |
用户代码生成的警告 |