python3学习笔记(学完了 没记全)
初学python,不想一上来就直接写helloworld,了解一门语言的发展和语言的特性也是非常重要的,所以笔记会比较详细。
python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
python具有很强的可读性。
python3相对python2是较大的一个升级并且没有考虑向下兼容。
简介
- python是解释型语言
- python是交互式语言
- python是面向对象的语言
- python是初学者的语言
发展历史
Python 2.0 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 Unicode。
Python 3.0 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 Python 源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。
Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。
Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。
特点
- 易于学习
- 易于阅读
- 易于维护
- 广泛的标准库
- 交互模式
- 可移植
- 可扩展
- 数据库
- GUI编程
- 可嵌入
缺点
- 运行速度较慢
- 国内使用较少
- 中文文档少
应用领域
- 云计算
- web
- 科学计算、人工智能
- 运维
- 金融
- GUI
- 爬虫
- 等等还有很多
查看版本
查看python版本:
1 | python3 -V |
可以输入 python3
命令进入交互式编程界面。
HelloWorld
1 | #!/usr/bin/python3 |
python解释器建议写法:
1 | #!/usr/bin/env python3 |
将上面的代码保存为HelloWorld.py,然后使用python3命令运行。
环境搭建
安装python
python官网:https://www.python.org/
在官网下载源码编译安装或者直接下载安装包即可,macos和linux可以使用包管理器安装。
运行python
- 交互解释运行(python命令,ipython)
- python命令运行文件
- IDE、编辑器中运行(pycharm,vscode)
基本语法
标识符
- 必须以字母或者下划线_开头。
- 标识符的其他的部分由字母、数字和下划线组成。
- 大小写敏感。
- 在python3中,可以用ASCII字符作为标识符包括汉字。
python标识符保留字:
使用下面的方法查询保留的关键字:
1 | import keyword |
注释
1 | # 单行注释 |
行与缩进
python使用缩进来表示代码块。
1 | if True: |
多行语句
1 | total = item_one + \ |
[], {}, ()中使用多行语句不需要斜杠。
Number类型
- int: 1
- bool: True, False
- float: 1.23
- complex: 1 + 2j、 1.1 + 2.2j
String类型
1 | name = 'Mason' |
- 单行字符串使用单引号或者双引号包裹。
- 多行字符串使用三引号
'''
或者"""
包裹。 - 转义字符
\
,使用r
可以阻止转义。 - 字符串使用
+
拼接,可以使用*
重复字符串。 - 字符串两种索引方式:从左往右(0开始),从右往左(最右边的索引是-1)。
- 字符串中的字符不能改变。
- python中只有字符串没有字符。
阻止转义:
1 | print('hello\nworld') |
截取字符:变量[头下标: 尾下标: 步长]
1 | name = 'Mason' |
空行
函数之间、类方法之间、类和函数入口之间都要用空行隔开,便于区分。
用户输入
1 | input('\n\n请输入并以回车结束') |
多条语句
使用分号分隔多条语句。
代码组
比如:
1 | if exp1: |
print输出
print输出默认换行。
1 | name = 'Mason' |
import和from…import
使用import和from…import来导入模块。
导入模块: import module
导入模块中的一个函数: from module import function
导入模块中的多个函数: from module import function1, function2, function3
导入模块中的全部函数: from module import *
基本数据类型
python中的数据类型不需要声明,直接赋值。
python中的变量是弱类型的。
1 | name = 'Mason' |
赋值多个变量
1 | a = b = c = 1 |
还有类似es解构赋值的赋值方式:
1 | a, b, c = 'mason', 1, 3.14 |
标准数据类型
- Number:数字
- String:字符串
- List:列表
- Tuple:元祖
- Set:集合
- Dictionary:字典
注意布尔型属于Number类型。
其中,分为可变数据类型和不可变数据类型
可变类型:Number, String, Tuple
不可变类型:List, Set, Dictionary
Number
分为:int(长整型), float, bool, complex
使用 type()
可以查询变量指向的数据类型。
1 | type(1) |
还可以用 isinstance()
判断类型。
1 | isinstance(1, int) |
两者的区别: type()
不会认为子类是一种父类类型,而 isinstance()
会认为是。
bool是int的子类。
1 | issubclass(bool, int) |
删除变量引用:
1 | del myname |
数学计算:
使用: +
(加法), -
(减法), *
(乘法), /
(除法,得到浮点数), //
(除法,得到整数), %
(求余数), **
(乘方)
complex类型:是复数,由实部和虚部组成 a+bj
,或者 complex(a, b)
,a和b都是浮点型。
String
省略的部分笔记参考上一章节。
反斜杠还可以作为续行符:
1 | str = 'my name is\ |
也可以使用三引号跨行。
List
List(列表)就是数组,形如 ['abc', 123, False]
。
空列表: []
List中的每一个元素可以是任何类型。
截取List中的元素的方法和上面的String截取方式一样。
List中的+和*:
1 | list1 = ['abc', 123] |
List中的元素可以改变。
1 | list = [1, 2, 3, 4, 5, 6] |
List也可以像String一样设置步长来跳着选取元素。
1 | list = [1, 2, 3, 4, 5, 6] |
翻转句子词语顺序实例:
1 | # 翻转句子词序 |
Tuple
Tuple与List类似,不过元组中的元素不能修改,而且放在小括号()中,使用逗号隔开。
Tuple的其他用法和List一致。
字符串可以看成是一种特殊的元组。
实例:
1 | tuple = (123, 'abc') |
空元组: ()
一个元素的元组这样写: (10,)
一个元素的列表可以这样写: [10]
String, List, Tuple都属于序列。
Set
集合(Set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
Set可以用于成员关系测试和删除重复元素。
创建空的Set只能用 set()
创建一个Set:
1 | newSet = {elem1, elem2, elem3} |
Set实例:
1 | # Set去重 |
Dictionary
字典是无序对象的集合,就相当于js里面的对象。
字典使用{}包裹,里面是键值对。
key必须是不可变类型String, Number, Tuple,且key必须唯一。
1 | # 新建一个字典并向里面添加键值对 |
可以使用 dict()
构建字典,传入参数为序列。
数据类型转换
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会自动将低精度数据类型转换为高精度数据类型。
- 将数字和字符串进行加法操作会报错。
- 显式转换(手动)
参考上一张最后的api。
推导式
推导式是一种数据处理方式,可以将一个数据序列转为另一个数据序列。
列表推导式
1 | [表达式 for 变量 in 列表] |
实例:过滤掉小于等于3的数并返回新的List
1 | nums = [1, 2, 3, 4, 5, 6] |
字典推导式
1 | { key_expr: value_expr for value in collection } |
实例:将一个List通过字典推导式转为Dictionary
1 | list = ['abc','abcd', 'abcde'] |
集合推导式
1 | { expression for item in Sequence } |
实例:计算集合中元素的平方
1 | set = {item**2 for item in (1,2,3)} |
元组推导式
1 | (expression for item in Sequence ) |
元组推导式返回的是生成器对象。
1 | # tuple_object是生成器对象 |
解释器
1 | # 运行python脚本 |
注释
1 | # 单行注释 |
运算符
python中有以下运算符。
- 算术运算符:+ - * / % ** //
- 比较运算符:== != > >= < <=
- 赋值运算符:= += -= = /= %= *= //= :=(海象运算符)
- 逻辑运算符:and or not
- 位运算符:& | ^ ~ << >>
- 成员运算符:in, not in, 支持List,String,Tuple
- 身份运算符
- is:判断两个变量是否是同一个对象的引用,a is b,相当于id(a)==id(b)。
- is not:参上
- id():用于获取变量的内存地址。
1 | a = 10 |
is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等。
注意and比or优先级高。
数字
要引入math包:import math
下面的api都要用math.round()的形式写。
1 | num = 3.14 |
Number的类型:
- int:整形或者说可以作为long使用,bool型是int的子类型。
- float
- complex:复数,
a+bj
或者complex(a, b)
,其中a和b都是float。
数字类型转换
- int()
- float()
- complex()
数字运算
参考之前的章节。
交互模式中,最后被输出的表达式结果会被赋值给_。
数学函数
- sqrt():开方
- abs()
- ceil()
- floor()
- round(x, n):四舍五入精确到n位
- cmp(x, y)
- exp(x)
- pow(x, y)
- fabs()
- log()
- log10()
- max(x1, x2, …xn)
- min(x1, x2, …xn)
- modf(x):返回x的整数部分和小数部分。
随机数函数
- choice():从参数序列中随机挑选一个,
random.choice(range(10))
- randrange(start, stop, step):从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
- random():生成一个随机数,范围[0, 1)
- seed()
- shuffle(list):将list打乱随机排列。
- uniform(x, y):随机生成一个[x, y]之间的实数。
三角函数
就是各种正弦余弦,反正弦反余弦。
常量
- pi:圆周率π
- e:自然常数e
字符串
和之前字符串重复的地方不作笔记。
转义字符
\
在行尾:作为续行符\\
:反斜杠\'
:单引号\a
:响铃\b
:退格\000
:空\n
:换行\t
:横向制表符\v
:纵向制表符\r
:替换符,将r之后的字符串逐一替换r之前的字符串。\f
:换页
字符串运算符
- +:拼接字符串。
- *:重复字符串。
- []:获取字符串下标对应的字符。
- [start:end]:截取字符串。
- in:成员运算符,判断字符是否在字符串中。
- not in
- r/R:表示raw原始字符串,用于避免转义。
- %:字符串格式化
字符串格式化实例:
1 | print ("我叫%s今年%d岁!" % ('mason', 11)) |
- %c:格式化字符及其ASCII码
- %s:格式化字符串
- %d:格式化整数
- %u:格式化无符号整型
- %o:格式化无符号八进制数
- %x:格式化无符号十六进制数
- %X:格式化无符号十六进制数(大写)
- %f:格式化浮点数字,可指定小数点后的精度
- %e:用科学计数法格式化浮点数
- %E:作用同%e,用科学计数法格式化浮点数
- %g:%f和%e的简写
- %G:%f和%E的简写
- %p:用十六进制数格式化变量的地址
三引号
三引号可以让字符串跨多行。
f-string
f-string是新的格式化字符串的方法。
用法:
1 | name = 'mason' |
3.8以上版本可以用=来拼接运算式和运算结果:
1 | print(f'{1+2=}') |
unicode字符串
用到的时候查表。
字符串函数
随用随查:https://www.runoob.com/python3/python3-string.html