来源引用网络知识与某站曹老师视频相互结合学习记录,仅供参考!
Python简介
百度百科
Python 是一门优雅而健壮的编程语言,由荷兰国家数学与计算机科学研究中心的吉多·范罗苏姆于1990年代初设计,作为ABC语言的替代品,它继承了传统编译语言的强大性和通用性,同时也借鉴了脚本语言和解释语言的易用性,是一种解释型脚本语言。Guido van Rossum在1995年于国家创新研究公司(CNRI)继续他在Python上的工作,2001年Python软件基金会(PSF)成立。
Python被设计成是 “符合大脑思维习惯” 的,采用极简主义的设计理念,加以统一规范的交互模式。这使得Python易于学习、理解和记忆。Python 开发者的哲学是 “用一种方法,最好是只有一种方法来做一件事”。它提供高效的数据结构、动态类型及面向对象编程特性,适用于脚本编写与快速开发。对于科研而言,Python的应用非常广泛。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
Python 2于2000年发布,Python 3于2008年发布且不完全兼容前代。 该语言已成为受欢迎的程序设计语言之一,其使用率自2004年起呈线性增长,广泛应用于Web开发、科学计算、金融分析、自动化等领域。
Python 基础知识
推荐书籍:Python 核心编程
推荐工具:PyCharm(环境搭建--Python-PyCharm)、Visual Studio Code 等等(烦请自行选择)
一、变量和简单类型
变量
无论使用什么语言编程,总要处理数据,处理数据就需要使用变量来保存数据;变量就像一个个小容器,用于“盛装”程序中的数据。
在 Python 中有以下六种数据类型:
数字、字符串、列表、字典、元组、集合;
数字类型又分四种小类:整数、浮点数、复数、布尔类型。
类型 | 描述 | 说明 |
数字(Number) | 整数(int) | 整数(int),例如:50、-50 |
浮点数(float) | 浮点数(float),例如:13.14、-13.14 | |
复数(complex) | 复数(complex),例如:5+3j,以 j 结尾表示复数 | |
布尔(bool) | 布尔(bool),即真 True 数字记作 1 和假 False 0 | |
字符串(String) | 描述文本的一种数据类型 | 字符串由任意数量的字符组成 |
列表(List) | 有序的可变序列 | python 中使用最频繁的数据类型,可有序记录一堆数据 |
元组(Tuple) | 有序的不可变序列 | 可有序记录一堆不可变的 Python 数据集合 |
集合(Set) | 无序不重复集合 | 可无序记录一堆不重复的 Python 数据集合 |
字典(Dictionary) | 无序 Key-Value 集合 | 可无序记录一堆 Key-Value 的 Python 数据集合 |
变量的定义方式
变量名称 = 变量的值
(“=”等号是赋值符号,意思是把右侧的值赋值给左侧变量)
变量的数据是可以变化的,重新给变量赋值即可;
PyCharm 工具快捷键 Ctrl+Alt+L 重新设置代码格式
注释
注释:对程序代码进行解释说明的文字;
可以用来解释程序某些部分的作用和功能,提高程序的可读性。
注释分为单行注释和多行注释:
单行注释
python 使用 # (井号)表示单行注释的开始,跟在“#”号后面直到这行结束为止的代码都将被解释器忽略。
多行注释
多行注释是指一次性将程序中的多行代码注释掉,在 python 程序中使用三个单引号或三个双引号将注释的内容括起来。
数据类型
python 是弱类型语言,变量的类型是可以改变的;
变量定义成功后,可以使用 type(() 方法来查看变量的类型;
Python数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可;
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
int(x [,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
变量的命名规则
Python 需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)。python 语言的标识符必须以字母、下划线 _ 开头,后面可以跟任意数量的字母、数字、下划线;这里的字母并不局限于 26 个英文字母,可以包含中文字符(可以是中文,不报错),不过不推荐。
在使用标识符时,需要注意以下规则:
1、标识符可以由字母、数字、下划线组成,但是不能由数字开头;
2、标识符不能是 python 关键字;
3、标识符不能包含空格;
python 常用关键字
系统有一些常用关键字不可以用来当作标识符。
and | lambda | except | while | del | return | import |
or | class | try | if | assert | yield | as |
in | def | finally | else | True | continue | from |
is | global | raise | elif | False | pass | |
not | nonlocal | with | for | None | break |
运算符
运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等等;
赋值运算符
赋值运算符用于为变量或常量指定值,python 中使用“=”(一个等号)作为赋值运算符;通常使用赋值运算符将表达式的值赋给另一个变量。
算数运算符
python 支持所有的基本算数运算符,这些算数运算符用于执行基本的数学运算,例如加、减、乘、除和求余、取模等等。
运算符 | 描述 | 示例(a=10,b=21) |
+ | 加:两个对象相加 | a + b 输出结果 31 |
- | 减:得到负数或是一个数减去另一数 | a - b 输出结果 -11 |
* | 乘:两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除:x 除以 y | b / a 输出结果 2.1 |
% | 取模:返回除法的余数 | b % a 输出结果 1 |
** | 幂:返回 x 的 y 次方幂 | a ** b 输出结果为 10 的 21 次方 |
// | 取整除:返回商的整数部分 | 9 // 2 输出结果 4,9.0 // 2.0 输出结果 4.0 |
a = 10 b = 21 print("a+b=", a + b) print("a-b=", a - b) print("a*b=", a * b) print("b/a=", b / a) print("b%a=", b % a) print("a**b=", a ** b) print("b//a=", b // a) print("9//2=", 9 // 2) print("9.0//2.0=", 9.0 // 2.0) 运行结果 a+b= 31 a-b= -11 a*b= 210 b/a= 2.1 b%a= 1 a**b= 1000000000000000000000 b//a= 2 9//2= 4 9.0//2.0= 4.0扩展后的赋值运算符
运算符 | 描述 | 示例(a=10,b=21,c=21) |
= | 简单的赋值运算符 | c = a + b 将 a+b 的运算结果赋值给 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 |
其他
Python算术运算符
运算符 | 描述 | 实例(假设变量 a=10,b=21) |
+ | 加 -- 两个对象相加 | a + b 输出结果 31 |
- | 减 -- 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
* | 乘 -- 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除 -- x 除以 y | b / a 输出结果 2.1 |
% | 取模 -- 返回除法的余数 | b % a 输出结果 1 |
** | 幂 -- 返回x的y次幂 | a**b 为10的21次方 |
// | 取整除 -- 往小的方向取整数 | |
Python 比较(关系)运算符
运算符 | 描述 | 实例(假设变量 a=10,b=20) |
== | 等于 -- 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 -- 比较两个对象是否不相等 | (a != b) 返回 True。 |
> | 大于 -- 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 -- 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a < b) 返回 True。 |
>= | 大于等于 -- 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 -- 返回x是否小于等于y。 | (a <= b) 返回 True。 |
== | 等于 -- 比较对象是否相等 | (a == b) 返回 False。 |
Python赋值运算符
运算符 | 描述 | 实例(假设变量 a=10,b=20) |
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 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 |
:= | 海象运算符,这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。 | Python3.8 版本新增运算符。在这个示例中,赋值表达式可以避免调用 len() 两次: |
Python位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011运算符 | 描述 | 实例(假设变量 a=60=00111100,b=13=00001101) |
& | 按位与运算符:参与运算的两个值,如果两个相应位都为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 |
Python逻辑运算符
Python语言支持逻辑运算符;
运算符 | 逻辑表达式 | 描述 | 实例(a=10,b=20) |
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
Python成员运算符
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
运算符 | 描述 | 实例 |
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
Python身份运算符
身份运算符用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似id(x) == id(y), 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y, 类似id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
注:id() 函数用于获取对象内存地址。
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):
运算符 | 描述 |
| 圆括号的表达式 |
| 读取,切片,调用,属性引用 |
await x | await 表达式 |
| 乘方(指数) |
| 正,负,按位非 NOT |
| 乘,矩阵乘,除,整除,取余 |
| 加和减 |
| 移位 |
| 按位与 AND |
| 按位异或 XOR |
| 按位或 OR |
in,not in, is,is not, <, <=, >, >=, !=, == | 比较运算,包括成员检测和标识号检测 |
| 逻辑非 NOT |
| 逻辑与 AND |
| 逻辑或 OR |
| 条件表达式 |
| lambda 表达式 |
| 赋值表达式 |
字符串
字符串的意思就是“一串字符”,python 中要求字符串必须使用引号(单引号、双引号、三引号)括起来,需要两边的引号能配对;
str1 = "python" str2 = 'pycharm' print(str1) print(str2) 运行结果 python pycharm字符串定义和转义字符
例如:定义的字符串里面含有单引号或者双引号,对于这种情况,有两种解决方案:
1、使用不同的引号将字符串括起来;
2、通过使用 \ 对引号进行转义;
str1 = "python '520'" str2 = 'pycharm "521"' str3 = 'pycharm \'1314\'' print(str1) print(str2) print(str3) 运行结果 python '520' pycharm "521" pycharm '1314'长字符串的定义
长字符串的写法是使用三个引号(单引号或者双引号),在长字符串中可以放置任意内容,包括放置单引号、双引号等等,若所定义的长字符串没有赋值给任何变量,那么这个长字符串就相当于是一个多行注释,被注释掉了,会被 python 解释器忽略。
str1 = """ 《静夜思》 李白 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 """ print(str1)字符串拼接
在 python 中,使用“+”加号作为字符串的拼接运算符;
str1 = "python" str2 = 'pycharm' print("str1:" + str1 + ",str2:" + str2) 运行结果 str1:python,str2:pycharm有时需要将字符串与数值进行拼接,而 python 中不允许直接拼接数值和字符串,程序必须先将数值转化成字符串;为了将数值转换成字符串,可以使用 str() 或 repr() 函数;
str1 = "python" str2 = 'pycharm' int_str3 = 123 print("str1:" + str1 + ",str2:" + str2 + ",int_str3:" + str(int_str3)) print("str1:" + str1 + ",str2:" + str2 + ",int_str3:" + repr(int_str3)) 运行结果 str1:python,str2:pycharm,int_str3:123 str1:python,str2:pycharm,int_str3:123使用 input 获取用户输入
input() 函数用于向用户生成一条提示,然后获取用户输入的内容;由于 input() 函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input() 函数总是返回一个字符串;一般可以通过 int()、float() 等方法来转换类型。
name = input("请输入您的姓名:") print(name, type(name)) age = input("请输入您的年龄:") # 使用int()函数把字符串类型转换成整型 age = int(age) print(age, type(age)) height = input("请输入您的身高(cm):") # 转换成浮点型 height = float(height) print(height, type(height)) 运行结果 请输入您的姓名:小明 小明 <class 'str'> 请输入您的年龄:15 15 <class 'int'> 请输入您的身高(cm):177 177.0 <class 'float'>字符串格式化
前面介绍了字符串拼接,若是简单的 2、3 个字符串拼接那还算好,如果大于 3 个变量的拼接,就会比较麻烦,还有就是字符串无法和其他类型直接拼接,需要先进行类型转换;python 中提供了“%”对各种类型的数据进行格式化输出。
name = "小明" print("姓名是:%s" % name) 运行结果 姓名是:小明print("姓名是:%s" % name)
这里 “%s”是占位符,第二个“%”是分隔符,后面的 name 就是变量了;
name = "小明" age = 15 print("姓名是:%s,已经%s岁了" % (name, age)) 运行结果 姓名是:小明,已经15岁了再添加一个 int 类型的 age 变量,输出时使用两个“%s”,中间依然用“%”间隔,后面括号里面两个参数;需要注意参数的顺序不能乱;
除了“%s”以外,还有很多占位符,例如常用的 %s,%d,%f,分别把参数或者表达式转换成字符串,整型,浮点型。
转换说明符 | 描述 |
d,i | 转换为带符号的十进制形式的整数 |
o | 转换为带符号的八进制形式的整数 |
x | 转换为带符号的十六进制形式的整数 |
X | 转换为带符号的十六进制形式的整数 |
e | 转换为科协计数法表示的浮点数(e 小写) |
E | 转换为科协计数法表示的浮点数(E 大写) |
f,F | 转换为十进制形式的浮点数 |
g | 智能选择使用 f 或 e 格式 |
G | 智能选择使用 F 或 E 格式 |
C | 转换为单字符(只接受整数或单字符字符串) |
r | 使用 repr() 将变量或表达式转换为字符串 |
s | 使用 str() 将变量或表达式转换为字符串 |
name = "小明" age = 15 height = 177.7 print("姓名是:%s,已经%s岁了,身高%f" % (name, age, height)) 运行结果 姓名是:小明,已经15岁了,身高177.700000可以看到打印结果中,身高字段后面多了 5 个 0,此处涉及到一个格式化精度控制;
可以使用辅助符号“m,n”来控制数据的宽度和精度:
m,控制宽度(包括小数点),需要注意若设置的宽度小于数字本身,则不会生效;
n,控制小数点精度,若数字的宽度大于小数位数,则需要进行四舍五入;
name = "小明" age = 15 height = 171.55 print("姓名是:%s,已经%s岁了,身高%.1f" % (name, age, height)) 运行结果 姓名是:小明,已经15岁了,身高171.6快速 format 格式化用法,一种更加简单快捷优雅的格式化方式;
语法是:f"内容{变量}内容"
在字符串前面添加“f”,字符串里面的对应变量使用“{}”大括号括起来;
name = "小明" age = 15 height = 171.55 print(f"姓名是:{name},已经{age}岁了,身高{height:.1f}") 运行结果 姓名是:小明,已经15岁了,身高171.6未完待续......