Python学习之路

内容摘自:
http://www.runoob.com/python
https://www.cnblogs.com/jiyimeng/p/python11091.html
Python简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

1.Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 2.Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。 3.Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。 4.Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。









Python发展历史 Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。
Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。
像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。
现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。








Python 特点
  • 易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
  • 易于阅读:Python代码定义的更清晰。
  • 易于维护:Python的成功在于它的源代码是相当容易维护的。
  • 一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
  • 互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
  • 可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
  • 可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
  • 数据库:Python提供所有主要的商业数据库的接口。
  • GUI编程:Python支持GUI可以创建和移植到许多系统调用。
  • .可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。







Python环境搭建 官方地址:https://www.python.org
下载地址:https://www.python.org/downloads

Python学习之路
文章图片
下载内容截图
下载步骤:
1.下载相关的程序:根据与Mac OS X 和Windows区分;

Python学习之路
文章图片
Windows下载截图
Python学习之路
文章图片
安装界面 2.运行下载的程序;








Python集成开发环境: PyCharm PyCharm 下载地址 : https://www.jetbrains.com/pycharm/download/








Python环境配置注意事项
  • Python添加到系统的环境变量中(一般在安装过程中勾选相关的选项即可,否则需要自己手动添加);







开发第一个简单的Python程序







Python基础语法 编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。
当然可以为源码文件指定不同的编码:
# -- coding: cp-1252 --
上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适合语言为保加利亚语、白罗斯语、马其顿语、俄语、塞尔维亚语。
标识符 第一个字符必须是字母表中字母或下划线 _ 。
标识符的其他的部分由字母、数字和下划线组成。
标识符对大小写敏感。
在 Python 3 中,非 ASCII 标识符也是允许的了
保留字 保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
>>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

注释 Python中单行注释以 # 开头,实例如下:
#!/usr/bin/python3 # 第一个注释 print ("Hello, Python!") # 第二个注释 多行注释可以用多个 # 号,还有 ''' 和 """:#!/usr/bin/python3# 第一个注释 # 第二个注释''' 第三注释 第四注释 '''""" 第五注释 第六注释 """ print ("Hello, Python!") 执行以上代码,输出结果为:Hello, Python!

行与缩进 python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
if True: print ("True") else: print ("False")

以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:
if True: print ("Answer") print ("True") else: print ("Answer") print ("False")# 缩进不一致,会导致运行错误

多行语句 Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:
total = item_one + \ item_two + \ item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:
total = ['item_one', 'item_two', 'item_three', 'item_four', 'item_five']

空行 函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
等待用户输入 执行下面的程序在按回车键后就会等待用户输入:
#!/usr/bin/python3input("开始显示\n\n按下 enter 键后退出。")

以上代码中 ,"\n\n"在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出
同一行显示多条语句 Python可以在同一行中使用多条语句,语句之间使用分号(; )分割,以下是一个简单的实例:
#!/usr/bin/python3import sys; x = 'hello '; sys.stdout.write(x + '\n'+x)

执行以上代码,输出结果为:
hello hello

多个语句构成代码组 缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
if expression : suite elif expression : suite else : suite

Print 输出 print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
#!/usr/bin/python3x="a" y="b" # 换行输出 print( x ) print( y ) print(1+2) print(1-2) print(False) print("abc") print('---------') # 不换行输出 print( x, end=" " ) print( y, end=" " ) print()

以上实例执行结果为:
a b 3 -1 False abc --------- a b

import 与 from...import 在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
导入 sys 模块
import sys print('================Python import mode=========================='); print ('命令行参数为:') for i in sys.argv: print (i) print ('\n python 路径为',sys.path)

导入 sys 模块的 argv,path 成员
from sys import argv,path#导入特定的成员 print('================python from import===================================') print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

命令行参数 很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息:
$ python -h usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... Options and arguments (and corresponding environment variables): -c cmd : program passed in as string (terminates option list) -d: debug output from parser (also PYTHONDEBUG=x) -E: ignore environment variables (such as PYTHONPATH) -h: print this help message and exit[ etc. ]









数字(Number)类型 python中数字有四种类型:整数、布尔型、浮点数和复数。
int (整数)
如 1, 只有一种整数类型 int,表示为长整型,Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型,实际上由于机器内存的有限,我们使用的整数是不可能无限大的。
n=-4 print("n的值::",n); print("绝对值方法:n.__abs__():",n.__abs__()); print("相加运算符:n.__add__(4):",n.__add__(4)); print("按位与运算:n.__and__(-4):",n.__and__(-4)); print("判断是否相等:n.__eq__(-4):",n.__eq__(-4)); print("转成浮点数:n.__float__():",n.__float__()); print("做除法,取整数:n.__floordiv__(3):",n.__floordiv__(3)); print("做除法,取余数:n.__mod__(3):",n.__mod__(3)); print("判断是否大于等于:n.__ge__(-4):",n.__ge__(-4)); print("判断是否大于:n.__gt__(-4):",n.__gt__(-4)); print("判断是否小于等于:n.__le__(-3):",n.__le__(-3)); print("判断是否小于:n.__lt__(-4):",n.__lt__(-4)); print("取反运算:n.__neg__():",n.__neg__()); print("返回X的Y次方的值:n.__pow__(2):",n.__pow__(2)); print("返回二进制的最小长度:bin(n):",bin(n));

输出结果
n的值:: -4 绝对值方法:n.__abs__(): 4 相加运算符:n.__add__(4): 0 按位与运算:n.__and__(-4): -4 判断是否相等:n.__eq__(-4): True 转成浮点数:n.__float__(): -4.0 做除法,取整数:n.__floordiv__(3): -2 做除法,取余数:n.__mod__(3): 2 判断是否大于等于:n.__ge__(-4): True 判断是否大于:n.__gt__(-4): False 判断是否小于等于:n.__le__(-3): True 判断是否小于:n.__lt__(-4): False 取反运算:n.__neg__(): 4 返回X的Y次方的值:n.__pow__(2): 16 返回二进制的最小长度:bin(n): -0b100

bool (布尔)
在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来:
print(True); print(False); print(1>2); print(1<2); print(True+10); print(False+10); print(True==1); print(True==2); print(False==1); print(True==0); print("========================================================") print("True and True:",True and True); print("True and False:",True and False); print("False and False:",False and False); print("5 > 3 and 3 > 1:",5 > 3 and 3 > 1); print("========================================================") print("True or True:",True or True); print("True or False:",True or False); print("False or False:",False or False); print("5 > 3 or 3 > 1:",5 > 3 or 3 > 1); print("========================================================") print("not True:",not True); print("not False:",not False); print("not 1 > 2:",not 1 > 2); print("========================================================")

输出结果
True False False True 11 10 True False False False ======================================================== True and True:True True and False:False False and False:False 5 > 3 and 3 > 1:True ======================================================== True or True:True True or False:True False or False:False 5 > 3 or 3 > 1:True ======================================================== not True:False not False:True not 1 > 2:True ========================================================

float (浮点数)
浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250),如 1.23、3E-2
complex (复数)
复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。 如 1 + 2j、 1.1 + 2.2j
空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
注意:
1、Python可以同时为多个变量赋值,如a, b = 1, 2。 2、一个变量可以通过赋值指向不同类型的对象。 3、数值的除法(/)总是返回一个浮点数,要获取整数使用 // 操作符。 4、在混合计算时,Python会把整型转换成为浮点数。









字符串(String)
  • python中单引号和双引号使用完全相同。
  • 使用三引号('''或""")可以指定一个多行字符串。
  • 转义符 ''
  • 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
  • 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
  • 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
  • Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • Python中的字符串不能改变。
  • Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
  • 字符串的截取的语法格式如下:变量[头下标:尾下标]
word = '字符串' sentence = "这是一个句子。" paragraph = """这是一个段落, 可以由多行组成"""

实例
#!/usr/bin/python3str='Test'print(str)# 输出字符串 print(str[0:-1])# 输出第一个到倒数第二个的所有字符 print(str[0])# 输出字符串第一个字符 print(str[2:5])# 输出从第三个开始到第五个的字符 print(str[2:])# 输出从第三个开始的后的所有字符 print(str * 2)# 输出字符串两次 print(str + '你好')# 连接字符串print('------------------------------')print('hello\nTest')# 使用反斜杠(\)+n转义特殊字符 print(r'hello\nTest')# 在字符串前面添加一个 r,表示原始字符串,不会发生转义

输出结果为:
Test Tes T st st TestTest Test你好 ------------------------------ hello Test hello\nTest

注意
  • Python 没有单独的字符类型,一个字符就是长度为1的字符串。
  • Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。
  • 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
  • 字符串可以用+运算符连接在一起,用*运算符重复。
  • Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
  • Python中的字符串不能改变。







列表(List) List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号([])之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
list = ['abcd3R', 123, 3.21, 'EDADW', 123212.33,complex(1,-1)] tinylist = [123, 'bill']print("输出完整列表",list)# 输出完整列表 print("输出列表第一个元素",list[0])# 输出列表第一个元素 print("从第二个开始输出到第三个元素",list[1:3])# 从第二个开始输出到第三个元素 print("输出从第三个元素开始的所有元素",list[2:])# 输出从第三个元素开始的所有元素 print("输出两次列表",tinylist * 2)# 输出两次列表 print("连接列表",list + tinylist)# 连接列表

输出结果:
输出完整列表 ['abcd3R', 123, 3.21, 'EDADW', 123212.33, (1-1j)] 输出列表第一个元素 abcd3R 从第二个开始输出到第三个元素 [123, 3.21] 输出从第三个元素开始的所有元素 [3.21, 'EDADW', 123212.33, (1-1j)] 输出两次列表 [123, 'bill', 123, 'bill'] 连接列表 ['abcd3R', 123, 3.21, 'EDADW', 123212.33, (1-1j), 123, 'bill']

与Python字符串不一样的是,列表中的元素是可以改变的:
a=[1,2,3,4,5,6,7,8] print(a) a[1]="a" a[3:6]=["v","b","n","x","d"] #将3到6的位置替换成后面的数组 print(a) print(a[3])

输出结果
···
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 'a', 3, 'v', 'b', 'n', 'x', 'd', 7, 8]
v
···








Tuple(元组) 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。
tuple = ( 'abcd', 786 , 2.23, 'test', 70.2) tinytuple = (123, 'test') print ("输出完整元组",tuple)# 输出完整元组 print ("输出元组的第一个元素",tuple[0])# 输出元组的第一个元素 print ("输出从第二个元素开始到第三个元素",tuple[1:3])# 输出从第二个元素开始到第三个元素 print ("输出从第三个元素开始的所有元素",tuple[2:])# 输出从第三个元素开始的所有元素 print ("输出两次元组",tinytuple * 2)# 输出两次元组 print ("连接元组",tuple + tinytuple) # 连接元组

输出结果
输出完整元组('abcd', 786, 2.23, 'test', 70.2) 输出元组的第一个元素abcd 输出从第二个元素开始到第三个元素(786, 2.23) 输出从第三个元素开始的所有元素(2.23, 'test', 70.2) 输出两次元组(123, 'test', 123, 'test') 连接元组('abcd', 786, 2.23, 'test', 70.2, 123, 'test')

  • 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
  • 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = ()# 空元组 tup2 = (20,) # 一个元素,需要在元素后添加逗号 print(tup1) print(tup2)

输出结果
() (20,)

注意
  1. string、list和tuple都属于sequence(序列)。
  2. 与字符串一样,元组的元素不能修改。
  3. 元组也可以被索引和切片,方法一样。
  4. 注意构造包含0或1个元素的元组的特殊语法规则。
  5. 元组也可以使用+操作符进行拼接。








集合(Set) 集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:parame = {value01,value02,...} 或者 set(value)
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}print(student)# 输出集合,重复的元素被自动去掉# 成员测试 if ('Rose' in student): print('Rose 在集合中') else: print('Rose 不在集合中')# set可以进行集合运算 a = set('abracadabra') b = set('alacazam')print("set可以进行集合运算:",a,b)print("a和b的差集:",a - b)# a和b的差集print("a和b的并集:",a | b)# a和b的并集print("a和b的交集:",a & b)# a和b的交集print("a和b中不同时存在的元素:",a ^ b)# a和b中不同时存在的元素

输出结果:
{'Tom', 'Jim', 'Jack', 'Rose', 'Mary'} Rose 在集合中 set可以进行集合运算: {'r', 'c', 'd', 'a', 'b'} {'z', 'l', 'c', 'a', 'm'} a和b的差集: {'d', 'b', 'r'} a和b的并集: {'z', 'r', 'c', 'l', 'd', 'a', 'm', 'b'} a和b的交集: {'c', 'a'} a和b中不同时存在的元素: {'r', 'z', 'm', 'l', 'd', 'b'}









字典(Dictionary) 字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象结合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }

基本代码:
#创建方式 dict0 = {'Alice': 2341, 'Beth': '9102', 'Cecil': '3258'} dict1 = { 'abc': 456 } dict2 = { 'abc': 123, 98.6: 37 }dict = {} dict['one'] = "bill" dict[2] = "china"print(dict) print(dict0) print(dict1) print(dict2)tinydict = {'name': 'bill', 'code': 1, 'site': 'www.baidu.com'}print("输出键为 'one' 的值",dict['one'])# 输出键为 'one' 的值 print("输出键为 2 的值",dict[2])# 输出键为 2 的值 print("输出完整的字典",tinydict)# 输出完整的字典 print("输出所有键",tinydict.keys())# 输出所有键 print("输出所有值",tinydict.values())# 输出所有值print("========================================================") dict = {'Name': 'Test', 'Age': 7, 'Class': 'First'}# 修改信息 dict['Age'] = 8; # 更新 Age dict['School'] = "Test"# 添加信息print("dict['Age']: ", dict['Age']) print("dict['School']: ", dict['School'])dict = {'Name': 'BIll', 'Age': 7, 'Class': 'First'} del dict['Name'] # 删除键 'Name' dict.clear()# 清空字典 del dict# 删除字典 print("dict['Age']: ", dict['Age']) print("dict['School']: ", dict['School'])

【Python学习之路】输出结果(异常会在前面抛出来)
Traceback (most recent call last): File "E:/PythonProject/HelloWorld/Test.py", line 37, in print("dict['Age']: ", dict['Age']) TypeError: 'type' object is not subscriptable{'one': 'bill', 2: 'china'} {'Alice': 2341, 'Beth': '9102', 'Cecil': '3258'} {'abc': 456} {'abc': 123, 98.6: 37} 输出键为 'one' 的值bill 输出键为 2 的值china 输出完整的字典{'name': 'bill', 'code': 1, 'site': 'www.baidu.com'} 输出所有键dict_keys(['name', 'code', 'site']) 输出所有值dict_values(['bill', 1, 'www.baidu.com']) ======================================================== dict['Age']:8 dict['School']:Test

    推荐阅读