其实,程序指的就是一系列指令,用来告诉计算机作什么,而编写程序的关键在于,咱们须要用计算机能够理解的语言来提供这些指令。html
为了有效避开全部影响给计算机传递指令的因素,计算机科学家设计了一些符号,这些符号各有其含义,且之间无二义性,一般称它们为编程语言。编程语言中的每一个结构,都有固定的使用格式(称为语法)以及精确的含义(称为语义)。换句话说,编程语言指定了成套的规则,用来编写计算机能够理解的指令。习惯上,咱们将这一条条指令称为计算机代码,而用编程语言来编写算法的过程称为编码。java
本教程要讲解的 Python] 就是一种编程语言,除此以外,你确定也据说过其余一些编程语言,如 C、C++,Java、Ruby 等。至今,计算机科学家已经开发了成百上千种编程语言,且随着时间演变,这些编程语言又产生了多个不一样的版本。但不管是哪一个编程语言,也不管有多少个版本,虽然它们在细节上可能有所不一样,无疑它们都有着固定的、无二义性的语法和语义。python
以上提到的编程语言,都是高级计算机语言,设计它们的目的是为了方便程序员理解和使用。但严格来讲,计算机硬件只能理解一种很是低级的编程语言,称为机器语言。git
咱们编写的源代码是人类语言,咱们本身可以轻松理解;可是对于计算机硬件(CPU),源代码就是天书,根本没法执行,计算机只能识别某些特定的二进制指令,在程序真正运行以前必须将源代码转换成二进制指令。所谓的二进制指令,也就是机器码,是 CPU 可以识别的硬件层面的“代码”。程序员
然而,究竟在何时将源代码转换成二进制指令呢?不一样的编程语言有不一样的规定:算法
有的编程语言要求必须提早将全部源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的 .exe),好比C语言、C++、Go、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言,使用的转换工具称为编译器。编程
有的编程语言能够一边执行一边转换,须要哪些源代码就转换哪些源代码,不会生成可执行程序,好比 Python、JavaScript、PHP、Shell、MATLAB等,这种编程语言称为解释型语言,使用的转换工具称为解释器。api
一、简单理解,编译器就是一个“翻译工具”,相似于将中文翻译成英文、将英文翻译成俄文。可是,翻译源代码是一个复杂的过程,大体包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等几个步骤数组
二、Java和 C#是一种比较奇葩的存在,它们是半编译半解释型的语言,源代码须要先转换成一种中间文件(字节码文件),而后再将中间文件拿到虚拟机中执行。Java 引领了这种风潮,它的初衷是在跨平台的同时兼顾执行效率;C# 是后来的跟随者,可是 C# 一直止步于 Windows 平台,在其它平台鲜有做为。性能优化
图 1 编译型语言和解释型语言的执行流程
那么,编译型语言和解释型语言各有什么特色呢?它们之间有什么区别?
对于编译型语言,开发完成之后须要将全部的源代码都转换成可执行程序,好比 Windows 下的.exe
文件,可执行程序里面包含的就是机器码。只要咱们拥有可执行程序,就能够随时运行,不用再从新编译了,也就是“一次编译,无限次运行”。在运行的时候,咱们只须要编译生成的可执行程序,再也不须要源代码和编译器了,因此说编译型语言能够脱离开发环境运行。编译型语言通常是不能跨平台的,也就是不能在不一样的操做系统之间随意切换。
对于解释型语言,每次执行程序都须要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。每次执行程序时可能使用不一样的功能,这个时候须要转换的源代码也不同。由于每次执行程序都须要从新转换源代码,因此解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。计算机的一些底层功能,或者关键算法,通常都使用 C/C++ 实现,只有在应用层面(好比网站开发、批处理、小工具等)才会使用解释型语言。
在运行解释型语言的时候,咱们始终都须要源代码和解释器,因此说它没法脱离开发环境。
当咱们说“下载一个程序(软件)”时,不一样类型的语言有不一样的含义:
对于编译型语言,咱们下载到的是可执行文件,源代码被做者保留,因此编译型语言的程序通常是闭源的。
对于解释型语言,咱们下载到的是全部的源代码,由于做者不给源代码就无法运行,因此解释型语言的程序通常是开源的。
相比于编译型语言,解释型语言几乎都能跨平台,“一次编写,处处运行”是真是存在的,并且比比皆是。那么,为何解释型语言就能跨平台呢?这一切都要归功于解释器!
咱们所说的跨平台,是指源代码跨平台,而不是解释器跨平台。解释器用来将源代码转换成机器码,它就是一个可执行程序,是绝对不能跨平台的。解释型语言之因此可以跨平台,是由于有了解释器这个中间层。在不一样的平台下,解释器会将相同的源代码转换成不一样的机器码,解释器帮助咱们屏蔽了不一样平台之间的差别。
Python 属于典型的解释型语言,因此运行 Python 程序须要解释器的支持,只要你在不一样的平台安装了不一样的解释器,你的代码就能够随时运行,不用担忧任何兼容性问题,真正的“一次编写,处处运行”。Python 几乎支持全部常见的平台,好比 Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC 等,你所写的 Python 代码无需修改就能在这些平台上正确运行。也就是说,Python 的可移植性是很强的。
Python 英文原意为“蟒蛇”,直到 1989 年荷兰人 Guido van Rossum (简称 Guido)发明了一种面向对象的解释型编程语言,并将其命名为 Python,才赋予了它表示一门编程语言的含义。
Python 语言是在 ABC 教学语言的基础上发展来的;遗憾的是,ABC 语言虽然很是强大,但却没有普及应用,Guido 认为是它不开放致使的。基于这个考虑,Guido 在开发 Python 时,不只为其添加了不少 ABC 没有的功能,还为其设计了各类丰富而强大的库,利用这些 Python 库,程序员能够把使用其它语言制做的各类模块(尤为是C语言和 C++)很轻松地联结在一块儿,所以 Python 又常被称为“胶水”语言。
Python的语言优点有如下几个点:
简单易学
跨平台
丰富强大的库
极高的开发效率
应用领域普遍
扩展性强
'''
(1)Cpython(官方推荐)
把python转化成c语言能识别的二进制码
(2)Jpython
把python转化成java语言能识别的二进制码
(3)其余语言解释器
把python转化成其余语言能识别的二进制码
(4)PyPy
将全部代码一次性编译成二进制码,加快执行效率(模仿编译型语言的一款python解释器)
'''
'''
python 2.x 版本,官方在 2020 年中止支持,原码不规范,重复较多
python 3.x 版本,功能更增强大且修复了不少bug,原码清晰,简单
'''
Python 安装包下载地址:https://www.python.org/downloads/
安装完成之后,打开 Windows 的命令行程序(命令提示符),在窗口中输入python
命令(注意字母p
是小写的),若是出现 Python 的版本信息,并看到命令提示符>>>
,就说明安装成功了,以下图所示。
请尽可能勾选
Add Python 3.8 to PATH
,这样能够将 Python 命令工具所在目录添加到系统 Path 环境变量中,之后开发程序或者运行 Python 命令会很是方便。
python python文件名
简单地理解,标识符就是一个名字,就好像咱们每一个人都有属于本身的名字,它的主要做用就是做为变量、函数、类、模块以及其余对象的名称。Python中标识符的命名不是随意的,而是要遵照必定的命令规则
'''
一、标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
二、标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
三、Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
四、在 Python 中,标识符中的字母是严格区分大小写
五、Python 语言中,如下划线开头的标识符有特殊含义
六、Python 容许使用汉字做为标识符(不推荐)
'''
标识符的命名,除了要遵照以上这几条规则外,不一样场景中的标识符,其名称也有必定的规范可循,例如:
'''
- 当标识符用做模块名时,应尽可能短小,而且所有使用小写字母,可使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用做包的名称时,应尽可能短小,也所有使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用做类名时,应采用单词首字母大写的形式。例如,定义一个图书类,能够命名为 Book。
- 模块内部的类名,能够采用 "下划线+首字母大写" 的形式,如 _Book;
- 函数名、类中的属性名和方法名,应所有使用小写字母,多个单词之间能够用下划线分割;
- 常量命名应所有使用大写字母,单词之间能够用下划线分割;
'''
and | as | assert | break | class | continue |
---|---|---|---|---|---|
def | del | elif | else | except | finally |
for | from | False | global | if | import |
in | is | lambda | nonlocal | not | None |
or | pass | raise | return | try | True |
while | with | yield |
变量是一段有名字的连续存储空间。咱们经过定义变量来申请并命名这样的存储空间,并经过变量的名字来使用这段存储空间。在编程语言中,将数据放入变量的过程叫作赋值(Assignment)。Python 使用等号=
做为赋值运算符,具体格式为:
变量名 = 任意类型的值(存储数据)
例如:
x = 10
y = "hi,yuan"
z = True
# 变量的值能够随时被修改,只要从新赋值便可 并且,你也不用关心数据的类型
x = "hello world"
思考:
x = 10
x = 20
y = x
y = 30
print(x)
print(y)
在C、Java等语言的语法中规定,必须以分号做为语句结束的标识。Python也支持分号,一样用于一条语句的结束标识。但在Python中分号的做用已经不像C、Java中那么重要了,Python中的分号能够省略,主要经过换行来识别语句的结束。
和其它程序设计语言(如
注意,Python 中实现对代码的缩进,可使用空格或者 Tab 键实现。但不管是手动敲空格,仍是使用 Tab 键,一般状况下都是采用 4 个空格长度做为一个缩进量(默认状况下,一个 Tab 键就表示 4 个空格)。
Python 的设计哲学是优雅、明确、简单
注释(Comments)用来向用户提示或解释某些代码的做用和功能,它能够出如今代码中的任何位置。
通常状况下,合理的代码注释应该占源代码的 1/3 左右。Python 支持两种类型的注释,分别是单行注释和多行注释。
# Python的单行注释
'''
Python的多行注释
这是注释代码,不被解释器执行的内容
'''
注意事项:
(1) Python 多行注释不支持嵌套
(2) 无论是多行注释仍是单行注释,当注释符做为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分,例如:
print('''Hello,World!''')
print("""http://c.biancheng.net/cplus/""")
print("#是单行注释的开始")
print("hi,yuan") # 输入函数
input(">>>") # 输入函数
Python 采用 PEP 8 做为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 加强建议书)的缩写,8 表明的是 Python 代码的样式指南。下面仅给你们列出 PEP 8 中初学者应严格遵照的一些编码规则:
一、每一个 import 语句只导入一个模块,尽可能避免一次导入多个模块,例如:
#推荐
import os
import sys
#不推荐
import os,sys
关于 import 的含义和用法会在后续介绍,这里没必要深究。
二、不要在行尾添加分号,也不要用分号将两条命令放在同一行
三、建议每行不超过 80 个字符,若是超过,建议使用小括号将多行内容隐式的链接起来,而不推荐使用反斜杠 \ 进行链接。例如,若是一个字符串文本没法实现一行彻底显示,则可使用小括号将其分开显示,代码以下:
#推荐
s=("C语言中文网是中国领先的C语言程序设计专业网站,"
"提供C语言入门经典教程、C语言编译器、C语言函数手册等。")
#不推荐
s="C语言中文网是中国领先的C语言程序设计专业网站,\
提供C语言入门经典教程、C语言编译器、C语言函数手册等。"
四、使用必要的空行能够增长代码的可读性,一般在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也能够空一行。
五、一般状况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
整数就是没有小数部分的数字,Python 中的整数包括正整数、0 和负整数。有些强类型的编程语言会提供多种整数类型,每种类型的长度都不一样,能容纳的整数的大小也不一样,开发者要根据实际数字的大小选用不一样的类型。例如C语言提供了 short、int、long、long long 四种类型的整数,它们的长度依次递增,初学者在选择整数类型时每每比较迷惑,有时候还会致使数值溢出。而 Python 则不一样,它的整数不分类型,或者说它只有一种类型的整数。Python 整数的取值范围是无限的,无论多大或者多小的数字,Python 都能轻松处理。
x = 10
print(type(x)) # <class 'int'>
x = 100000000000000000000000000000000000000000000000000
print(type(x))
print(x)
进制
# 十六进制
print(0x11)
print(0x111)
# 二进制
print(0b101)
print(0B101)
# 八进制
print(0o12)
print(0o23)
# 十进制转换为二进制
print(bin(3))
# 十进制转换为十六进制
print(hex(19))
# 十进制转换为八进制
print(oct(10))
在编程语言中,小数一般以浮点数的形式存储。
Python中的小数有两种书写形式:
(1) 十进制形式
这种就是咱们平时看到的小数形式,例如 34.六、346.0、0.346。书写小数时必须包含一个小数点,不然会被 Python 看成整数处理。
(2)指数形式
Python 小数的指数形式的写法为:aEn 或 aen
指数形式的小数举例:
2.1E5 = 2.1×105,其中 2.1 是尾数,5 是指数。
3.7E-2 = 3.7×10-2,其中 3.7 是尾数,-2 是指数。
0.5E7 = 0.5×107,其中 0.5 是尾数,7 是指数。
注意,只要写成指数形式就是小数,即便它的最终值看起来像一个整数。例如 14E3 等价于 14000,但 14E3 是一个小数。Python 只有一种小数类型,就是 float。
f1 = 3.14
print(f1)
print(type(f1)) # <class 'float'>
f2 =0.000000000000000000000000000000003
print(f2)
print(type(f2))
f3 = 3.141592612345678987654321
print(f3)
print(type(f3))
f4 = 12e4
print(f4)
print(type(f4))
Python提供了 bool 类型来表示真(对)或假(错),好比常见的5 > 3
比较算式,这个是正确的,在程序世界里称之为真(对),Python 使用 True 来表明;再好比4 > 20
比较算式,这个是错误的,在程序世界里称之为假(错),Python 使用 False 来表明。
print(4 == 2) # False
print(5 > 1) # True
name = "yuan"
print(name == "alex") # False
print(1=="1") # False
True 至关于整数值 1,False 至关于整数值 0。
字符串是由零个或多个字符组成的有限序列。字符串的内容能够包含字母、标点、特殊符号、中文、日文等全世界的全部字符。
s1 = "hi yuan"
print(s1)
s2 = ""
print(s2)
s3 = "苑是最好的老师!"
print(s3)
Python 字符串中的双引号和单引号没有任何区别
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移到下一行开头。 |
\r | 回车符,将光标位置移到本行开头。 |
\t | 水平制表符,也即 Tab 键,通常至关于四个空格。 |
\a | 蜂鸣器响铃。注意不是喇叭发声,如今的计算机不少都不带蜂鸣器了,因此响铃不必定有效。 |
\b | 退格(Backspace),将光标位置移到前一列。 |
\ | 反斜线 |
' | 单引号 |
" | 双引号 |
\ | 在字符串行尾的续行符,即一行未完,转到下一行继续写。 |
s1 = "hi yuan\noldboyedu"
print(s1)
s2 = 'I\'m yuan'
print(s2)
s3 = "D:\\nythonProject\\nenv\\Scripts\\python.exe"
print(s3)
Python 长字符串由三个双引号"""
或者三个单引号'''
包围,语法格式以下:
'''
Python 长字符
'''
"""
Python 长字符
"""
在长字符串中放置单引号或者双引号不会致使解析错误。若是长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何做用,和一段普通的文本无异,至关于被注释掉了。
注意,此时 Python 解释器并不会忽略长字符串,也会按照语法解析,只是长字符串起不到实际做用而已。当程序中有大段文本内容须要定义成字符串时,优先推荐使用长字符串形式,由于这种形式很是强大,能够在字符串中放置任何内容,包括单引号和双引号。
方式1:
以前讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有不少高级的玩法,好比格式化输出,这就是本节要讲解的内容。print() 函数使用以%
开头的转换说明符对各类类型的数据进行格式化输出,具体请看下表。
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f、%F | 转化为十进制浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
name = "yuan"
age = 23
print("My name is %s; My age is %d"%(name,age))
在 print() 函数中,由引号包围的是格式化字符串,它至关于一个字符串模板,能够放置一些转换说明符(占位符)。本例的格式化字符串中包含一个%s
和%d
说明符,它最终会被后面的name和age 变量的值所替代。中间的%
是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。
方式2:
相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,经过传入的参数进行格式化,而且使用大括号‘{}’做为特殊字符代替‘%’
(1)不带编号,即“{}”
(2)带数字编号,可调换顺序,即“{1}”、“{2}”
(3)带关键字,即“{name}”、“{age}”
name = "yuan"
age = 23
print("My name is {}; My age is {}".format(name,age))
print("My name is {1}; My age is {0}".format(name,age))
print("My name is {n}; My age is {a}".format(n=name,a=age))
大小写处理
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
capitalize | 首字母大写,其他小写 | ‘lk with psr'.capitalize() | ‘Lk with psr' |
upper | 所有大写 | ‘lk with psr'.upper() | ‘LK WITH PSR' |
lower | 所有小写 | ‘lk with psr'.lower() | ‘lk with psr' |
swapcase() | 大小写互换 | ‘Lk with Psr'.swapcase() | ‘lK WITH pSR' |
.title() | 首字母大写 | ‘lk with psr'.title() | ‘Lk With Psr' |
判断字符串中的字符类型
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
startswith(‘a',[start,end]) | 是否以a开头 | ‘a lk'.startswith(‘a') | True |
endswith(‘a') | 是否以a结尾 | ‘lk'.endswith(‘a') | False |
isalnum() | 是否全为字母或数字 | ‘123asd'.isalnum() | True |
isalpha() | 是否全字母 | ‘lk12'.isalpha() | True |
isdigit() | 是否全数字 | ‘123'.isdigit() | True |
islower() | 是否全小写 | ‘lk'.islower() | True |
isupper() | 是否全大写 | ‘lk'.isupper() | False |
istitle() | 判断首字母是否为大写 | ‘Lk'.istitle() | True |
isspace() | 判断字符是否为空格 | ' '.isspace() | True |
字符串替换
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
replace(‘old',‘new') | 替换old为new | 'hello world'.replace(‘world',‘python') | hello python |
replace(‘old',‘new',次数) | 替换指定次数的old为new | 'hello world'.replace(‘l',‘p',2) | heppo world |
去空格
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
strip() | 去两边空格 | ' h e-l lo '.strip() | 能够想象 |
lstrip() | 去左边空格 | ' h e-l lo '.lstrip() | 能够想象 |
rstrip() | 去右边空格 | ' h e-l lo '.rstrip() | 能够想象 |
用特定符链接单个字符
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
.join() | -链接 | ‘-'.join([‘a', ‘b', ‘c']) | a-b-c |
用字符串中的特定符分割字符串
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
split() | 默认按空格分隔 | ' h e-l lo ' .split() | [‘h', ‘e-l', ‘lo'] |
split(‘指定字符') | 按指定字符分割字符串为数组 | ' h e-l lo ' .split('-') | [' h e', 'l lo '] |
搜索
函数 | 做用 | 示例 | 输出 |
---|---|---|---|
find() | 搜索指定字符串,没有返回-1 | ‘lk la'.find(‘lk') | 0 |
index() | 同上,可是找不到会报错 | ‘lk la'.index(‘lk') | 0 |
rfind() | 从右边开始查找 | ‘lk la'.rfind(‘lk') | 0 |
count() | 统计指定的字符串出现的次数 | ‘lklklk'.count(‘lk') | 3 |
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按必定顺序排列,可经过每一个值所在位置的编号(称为索引)访问它们。
为了更形象的认识序列,能够将它看作是一家旅店,那么店中的每一个房间就如同序列存储数据的一个个内存空间,每一个房间所特有的房间号就至关于索引值。也就是说,经过房间号(索引)咱们能够找到这家旅店(序列)中的每一个房间(内存空间)。
序列中,每一个元素都有属于本身的编号(索引)。从起始元素开始,索引值从 0 开始递增,如图 1 所示。
除此以外,Python 还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计数,从索引值 -1 开始,如图 2 所示。
切片操做是访问序列中元素的另外一种方法,它能够访问必定范围内的元素,经过切片操做,能够生成一个新的序列。序列实现切片操做的语法格式以下:
序列类型对象[start : end : step]
其中,各个参数的含义分别是:
start:表示切片的开始索引位置(包括该位置),此参数也能够不指定,会默认为 0,也就是从序列的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),若是不指定,则默认为序列的长度;
step:表示在切片过程当中,隔几个存储位置(包含当前位置)取一次元素,也就是说,若是 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。若是省略设置 step 的值,则最后一个冒号就能够省略。
Python 中,支持两种类型相同的序列使用“+”运算符作相加操做,它会将两个序列进行链接,但不会去除重复的元素。使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果
print("welcome"+" to"+" oldboyedu")
print("*"*10)
print("*"*30+"welcome to oldboyedu"+"*"*30)
Python 中,可使用 in 关键字检查某元素是否为序列的成员。
print("yuan" in "hi,yuan")
在实际开发中,常常须要将一组(不仅一个)数据存储起来,以便后边的代码使用。说到这里,一些读者可能据说过数组(Array),它就能够把多个数据挨个存储到一块儿,经过数组下标能够访问数组中的每一个元素。
从形式上看,列表会将全部元素都放在一对中括号[ ]
里面,相邻元素之间用逗号,
分隔,以下所示:
[element1, element2, element3, ..., elementn]
列表中的元素个数没有限制,只要是 Python 支持的数据类型就能够。从内容上看,列表能够存储整数、小数、字符串、列表、元组等任何类型的数据,而且同一个列表中元素的类型也能够不一样。
列表是 Python 序列的一种,咱们可使用索引(Index)访问列表中的某个元素(获得的是一个元素的值),也可使用切片访问列表中的一组元素(获得的是一个新的子列表)。
使用索引访问列表元素的格式为:
listname[i]
其中,listname
表示列表名字,i 表示索引值。列表的索引能够是正数,也能够是负数。
使用切片访问列表元素的格式为:
listname[start : end : step]
其中,listname
表示列表名字,start 表示起始索引,end 表示结束索引,step 表示步长。
添加方法: append、extend、insert
<1>append() 方法用于在列表的末尾追加元素,该方法的语法格式以下:
listname.append(obj)
其中,listname
表示要添加元素的列表;obj 表示到添加到列表末尾的数据,它能够是单个元素,也能够是列表、元组等。
<2>extend() 和 append() 的不一样之处在于:extend() 不会把列表或者元祖视为一个总体,而是把它们包含的元素逐个添加到列表中。
extend() 方法的语法格式以下:
listname.extend(obj)
其中,listname
指的是要添加元素的列表;obj 表示到添加到列表末尾的数据,它能够是单个元素,也能够是列表、元组等,但不能是单个的数字。
<3> append() 和 extend() 方法只能在列表末尾插入元素,若是但愿在列表中间某个位置插入元素,那么可使用 insert() 方法。
insert() 的语法格式以下:
listname.insert(index , obj)
其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname
列表第 index 个元素的位置。
当插入列表或者元祖时,insert() 也会将它们视为一个总体,做为一个元素插入到列表中,这一点和 append() 是同样的。
在Python列表中删除元素主要分为如下 3 种场景:
根据目标元素所在位置的索引进行删除,可使用 del 关键字或者 pop() 方法;
根据元素自己的值进行删除,可以使用列表(list类型)提供的 remove() 方法;
将列表中全部元素所有删除,可以使用列表(list类型)提供的 clear() 方法。
<1>del
是 Python 中的关键字,专门用来执行删除操做,它不只能够删除整个列表,还能够删除列表中的某些元素。咱们已经在《
del
能够删除列表中的单个元素,格式为:
del listname[index]
其中,listname
表示列表名称,index 表示元素的索引值。
del
也能够删除中间一段连续的元素,格式为:
del listname[start : end]
其中,start 表示起始索引,end 表示结束索引。del
会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。
<2> Python pop() 方法用来删除列表中指定索引处的元素,具体格式以下:
listname.pop(index)
其中,listname
表示列表名称,index 表示索引值。若是不写 index 参数,默认会删除列表中的最后一个元素.
<3>除了del
关键字,Python 还提供了 remove() 方法,该方法会根据元素自己的值来进行删除操做。须要注意的是,remove() 方法只会删除第一个和指定值相同的元素,并且必须保证该元素是存在的,不然会引起ValueError
错误。
Python提供了两种修改列表(list)元素的方法,你能够每次修改单个元素,也能够每次修改一组元素(多个)。修改单个元素很是简单,直接对元素赋值便可.
修改一组元素,Python 支持经过切片语法给一组元素赋值。在进行这种操做时,若是不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操做既能够为列表添加元素,也能够为列表删除元素。
Python 列表(list)提供了 index() 和 count() 方法,它们均可以用来查找元素。
元组(tuple)是 Python中另外一个重要的序列结构,和列表相似,元组也是由一系列按特定顺序排序的元素组成。
元组和列表(list)的不一样之处在于:
列表的元素是能够更改的,包括修改元素值,删除和插入元素,因此列表是可变序列;
而元组一旦被建立,它的元素就不可更改了,因此元组是不可变序列。元组也能够看作是不可变的列表,一般状况下,元组用于保存无需修改的内容。
从形式上看,元组的全部元素都放在一对小括号( )
中,相邻元素之间用逗号,
分隔,以下所示:
(element1, element2, ... , elementn)
其中 element1~elementn
表示元组中的各个元素,个数没有限制,只要是 Python 支持的数据类型就能够。
须要注意的一点是,当建立的元组中只有一个字符串类型的元素时,该元素后面必需要加一个逗号
,
,不然 Python 解释器会将它视为字符串。
Python字典(dict
)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
字典类型是 Python 中惟一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即经过一个元素,能够惟一找到另外一个元素。如图 1 所示。
字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。
字典类型很像学生时代经常使用的新华字典。咱们知道,经过新华字典中的音节表,能够快速找到想要查找的汉字。其中,字典里的音节表就至关于字典类型中的键,而键对应的汉字则至关于值。
主要特征 | 解释 |
---|---|
经过键而不是经过索引来读取元素 | 字典类型有时也称为关联数组或者散列表(hash)。它是经过键将一系列的值联系起来的,这样就能够经过键从字典中获取指定项,但不能经过索引来获取。 |
字典是任意数据类型的无序集合 | 和列表、元组不一样,一般会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。 |
字典是可变的,而且能够任意嵌套 | 字典能够在原处增加或者缩短(无需生成一个副本),而且它支持任意深度的嵌套,即字典存储的值也能够是列表或其它的字典。 |
字典中的键必须惟一 | 字典中,不支持同一个键出现屡次,不然只会保留最后一个键值对。 |
字典中的键必须不可变 | 字典中每一个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。 |
使用 { } 建立字典,因为字典中每一个元素都包含两部分,分别是键(key)和值(value),所以在建立字典时,键和值之间使用冒号:
分隔,相邻元素之间使用逗号,
分隔,全部元素放在大括号{ }
中。
使用{ }
建立字典的语法格式以下:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中
dictname
表示字典变量名,keyn : valuen
表示各个元素的键值对。须要注意的是,同一字典中的各个键必须惟一,不能重复。
列表和元组是经过下标来访问元素的,而字典不一样,它经过键来访问对应的值。由于字典中的元素是无序的,每一个元素的位置都不固定,因此字典也不能像列表和元组那样,采用切片的方式一次性访问多个元素。
Python 访问字典元素的具体格式为:
dictname[key]
其中,dictname
表示字典变量的名字,key 表示键名。注意,键必须是存在的,不然会抛出异常。
除了上面这种方式外,Python 更推荐使用 dict
类型提供的 get() 方法来获取指定键对应的值。当指定的键不存在时,get() 方法不会抛出异常。
get() 方法的语法格式为:
dictname.get(key[,default])
其中,dictname
表示字典变量的名字;key 表示指定的键;default 用于指定要查询的键不存在时,此方法返回的默认值,若是不手动指定,会返回 None。
因为字典属于可变序列,因此咱们能够任意操做字典中的键值对(key-value)。Python 中,常见的字典操做有如下几种:
向现有字典中添加新的键值对。
修改现有字典中的键值对。
从现有字典中删除指定的键值对。
判断现有字典中是否存在指定的键值对。
一、Python字典添加键值对
为字典添加新的键值对很简单,直接给不存在的 key 赋值便可,具体语法格式以下:
dictname[key] = value
对各个部分的说明:
dictname
表示字典名称。
key 表示新的键。
value 表示新的值,只要是 Python 支持的数据类型均可以。
二、Python字典修改键值对
Python 字典中键(key)的名字不能被修改,咱们只能修改值(value)。
字典中各元素的键必须是惟一的,所以,若是新添加元素的键与已存在元素的键相同,那么键所对应的值就会被新的值替换掉,以此达到修改元素值的目的。
三、Python字典删除键值对
若是要删除字典中的键值对,仍是可使用 del
语句。
四、判断字典中是否存在指定键值对
若是要判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键。判断字典是否包含指定键值对的键,可使用 in 或 not in 运算符。
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加 | 12.45 + 15 | 27.45 |
- | 减 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5 * 3.6 | 18.0 |
/ | 除法(和数学中的规则同样) | 7 / 2 | 3.5 |
// | 整除(只保留商的整数部分) | 7 // 2 | 3 |
% | 取余,即返回除法的余数 | 7 % 2 | 1 |
** | 幂运算/次方运算,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
运算符 | 说 明 | 用法举例 | 等价形式 |
---|---|---|---|
= | 最基本的赋值运算 | x = y | x = y |
+= | 加赋值 | x += y | x = x + y |
-= | 减赋值 | x -= y | x = x - y |
*= | 乘赋值 | x *= y | x = x * y |
/= | 除赋值 | x /= y | x = x / y |
%= | 取余数赋值 | x %= y | x = x % y |
**= | 幂赋值 | x **= y | x = x ** y |
//= | 取整数赋值 | x //= y | x = x // y |
&= | 按位与赋值 | x &= y | x = x & y |
|= | 按位或赋值 | x |= y | x = x | y |
^= | 按位异或赋值 | x ^= y | x = x ^ y |
<<= | 左移赋值 | x <<= y | x = x << y,这里的 y 指的是左移的位数 |
>>= | 右移赋值 | x >>= y | x = x >> y,这里的 y 指的是右移的位数 |
比较运算符 | 说明 |
---|---|
> | 大于,若是> 前面的值大于后面的值,则返回 True,不然返回 False。 |
< | 小于,若是< 前面的值小于后面的值,则返回 True,不然返回 False。 |
== | 等于,若是== 两边的值相等,则返回 True,不然返回 False。 |
>= | 大于等于(等价于数学中的 ≥),若是>= 前面的值大于或者等于后面的值,则返回 True,不然返回 False。 |
<= | 小于等于(等价于数学中的 ≤),若是<= 前面的值小于或者等于后面的值,则返回 True,不然返回 False。 |
!= | 不等于(等价于数学中的 ≠),若是!= 两边的值不相等,则返回 True,不然返回 False。 |
is | 判断两个变量所引用的对象是否相同,若是相同则返回 True,不然返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,若是不相同则返回 True,不然返回 False。 |
逻辑运算符 | 含义 | 基本格式 | 说明 |
---|---|---|---|
and | 逻辑与运算,等价于数学中的“且” | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,不然为假。 |
or | 逻辑或运算,等价于数学中的“或” | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,不然为真。 |
not | 逻辑非运算,等价于数学中的“非” | not a | 若是 a 为真,那么 not a 的结果为假;若是 a 为假,那么 not a 的结果为真。至关于对 a 取反。 |
和其它编程语言同样,按照执行流程划分,Python 程序也可分为 3 大结构,即顺序结构、选择(分支)结构和循环结构:
Python 顺序结构就是让程序按照从头至尾的顺序依次执行每一条 Python 代码,不重复执行任何代码,也不跳过任何代码。
Python 选择结构也称分支结构,就是让程序“拐弯”,有选择性的执行代码;换句话说,能够跳过没用的代码,只执行有用的代码。
Python 循环结构就是不断地重复执行同一段代码。
Python 中的 if else 语句能够细分为三种形式,分别是 if
语句、if else
语句和if elif else
语句
if
语句语法格式:
if 表达式:
代码块
if-else
语句语法格式:
if 表达式:
代码块 1
else:
代码块 2
if-elif-else
语句语法格式:
if 表达式 1:
代码块 1
elif 表达式 2:
代码块 2
elif 表达式 3:
代码块 3
...# 其它elif语句
else:
代码块 n
对语法格式的说明:
一、“表达式”能够是一个单一的值或者变量,也能够是由运算符组成的复杂语句,形式不限,只要它能获得一个值就行。无论“表达式”的结果是什么类型,if else 都能判断它是否成立(真或者假)。
二、“代码块”由:与具由相同缩进标识的若干条语句组成。
Python 中,while 循环和 if 条件分支语句相似,即在条件(表达式)为真的状况下,会执行相应的代码块。不一样之处在于,只要条件为真,while 就会一直重复执行那段代码块。
while 语句的语法格式以下:
while 条件表达式:
代码块
这里的代码块,指的是缩进格式相同的多行代码,不过在循环结构中,它又称为循环体。
while 语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来从新判断条件表达式的值是否为真,若仍为真,则继续从新执行代码块...如此循环,直到条件表达式的值为假(False),才终止循环。
for 循环的语法格式以下:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
格式中,迭代变量用于存放从序列类型变量中读取出来的元素,因此通常不会在循环中对迭代变量手动赋值;代码块指的是具备相同缩进格式的多行代码(和 while 同样),因为和循环结构联用,所以代码块又称为循环体。
咱们知道,在执行 while 循环或者 for 循环时,只要循环条件知足,程序将会一直执行循环体,不停地转圈。但在某些场景,咱们可能但愿在循环结束前就强制结束循环,Python 提供了 2 种强制离开当前循环体的办法:
使用 continue 语句,能够跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
只用 break 语句,能够彻底终止当前循环。
break 语句能够当即终止当前循环的执行,跳出当前所在的循环结构。不管是 while 循环仍是 for 循环,只要执行 break 语句,就会直接结束当前正在执行的循环体。和 break 语句相比,continue 语句的做用则没有那么强大,它只会终止执行本次循环中剩下的代码,直接从下一次循环继续执行。