一、构建开发环境
1、安装python
1.1 在Windows下安装Python 3.8
- 官网下载地址:
https://www.python.org/downloads/windows/
- 配置环境变量
- 在【此电脑】 - 【属性】 - 【高级系统设置】 - 【系统变量】中对Path执行编辑操作
- 最后在编辑环境变量界面分别添加Python安装路径的目录信息
1.2 在Linux下下安装Python 3.8
- CentOS 7 系统
- 安装Linux的wget工具、GCC编译器、Python3使用的依赖组件
# 安装Linux的wget工具
yum -y install wget
#GCC编译器环境
yum -y install gcc
#Python3 使用的依赖组件
yum install openssl-devel bzip2-devel expat-develgdbm-devel
yum install readlline-develsqlite*-develmysql-devellibffi-devel
- 下载安装包
wget "https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz"
- 在安装包下的路径执行
tar -zxvf Python-3.8.0.tgz
- 将Python3.8.0编译到系统
# 进入Python3.8.0文件夹
cd Python3.8.0
# 依次输入编译指令
sudo ./configure
sudo make
sudo make install
二、Python基础语法
1、关键字与标识符
1.1 关键字
- 关键字:
- 编程语言中赋予特殊意义的单词
- Python中设置了35个,关键字不能作为标识符
# 35个关键字
['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']
1.2 标识符
- 标识符:
- 定义是一个名称,用来给变量、常量、函数、类、模块以及其他对象命名
- Python标识符命名规则:
- 有字符(A-Z和a-z)、下划线和数字组成的,首字母不能是数字
- 不能与Python关键字相同
- 不能包含特殊字符(空格、@、%、$等)
- 严格区分大小写
- 使用下划线的标识符的特殊意义:
- 类属性以单下划线开头的标识符表示类以外的对象不能直接访问的类属性:如_width
- 类属性以双下划线开头的标识符表示类的私有属性:如__add
- 类方法以双下划线开头和结尾的标识符表示该类专有的标识符
- 业界标识符命名标准:
- Python标识符命名长度虽不受限制,但是PEP-8标准建议不超过79个字符
- 标识符命名最好见名知意
- 使用驼峰命名法:小驼峰式命名法(myName)、大驼峰式命名法(MyLastName)、下划线命名法(last_name)
- 标识符命名规则检测功能:“_last_name”.isidentifier()
2、 变量
2.1 变量的定义与使用
- 变量的定义与使用:
- 变量是由标识符进行命名设定的,用来存储数据
- Python中变量不需要先定义变量类型再使用
- Python中可以支持多个变量同时赋值
- Python3.8开始新增了在函数里实现变量赋值操作
# 多个变量赋值
# 方式1:
a = b = c = 1
# 方式2:
d,e,f = 10,'hello',True
# 函数中为变量赋值
print('a is', a := 1)
2.2 变量的深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 浅拷贝:只能将最外层的数据格式(列表、集合和字典)单独复制成新对象,对嵌套在里面的对象依然依赖原来的引用
- 深拷贝:将一个变量的所有数据结构独立复制到另外一个变量,无论变量如何修改都不会影响另一个变量
- 不可变数据类型和可变数据类型
- 不可变数据类型有整型、浮点型、字符串类型和元组;这些类型变量的值不可改变,如果改变了相当于新建了一个对象
- 可变数据类型有列表和字典;这些类型变量的值可以改变
3、运算符
3.1 算术运算符
- 计算两个变量的加减乘除等
# 算术运算符
x = 8
y = 5
print('加法运算符:', x + y)
print('减法运算符:', x - y)
print('乘法运算符:', x * y)
print('除法运算符:', x / y)
print('取模运算符:', x % y)
print('幂运算符:', x ** y)
print('取整运算符:', x // y)
加法运算符: 13
减法运算符: 3
乘法运算符: 40
除法运算符: 1.6
取模运算符: 3
幂运算符: 32768
取整运算符: 1
3.2 比较运算符
- 比较两个变量的大小
# 比较运算符
x = 2
y = 3
print('等于运算符:', x == y)
print('不等于运算符:', x != y)
print('大于运算符:', x > y)
print('小于运算符:', x < y)
print('大于等于运算符:', x >= y)
print('小于等于运算符:', x <= y)
等于运算符: False
不等于运算符: True
大于运算符: False
小于运算符: True
大于等于运算符: False
小于等于运算符: True
3.3 赋值运算符
- 将值赋给新的变量
# 赋值运算符
x = 5
y = 2
print('简单的赋值运算符:', x + y)
x += y
print('加法赋值运算符:', x)
x = 5
x -= y
print('减法赋值运算符:', x)
x = 5
x *= y
print('乘法赋值运算符:', x)
x = 5
x /= y
print('除法赋值运算符:', x)
x = 5
x %= y
print('取模赋值运算符:', x)
x = 5
x **= y
print('幂赋值运算符:', x)
x = 5
x //= y
print('取整值运算符:', x)
简单的赋值运算符: 7
加法赋值运算符: 7
减法赋值运算符: 3
乘法赋值运算符: 10
除法赋值运算符: 2.5
取模赋值运算符: 1
幂赋值运算符: 25
取整值运算符: 2
3.4 逻辑运算符
- 与或非的逻辑判断
# 逻辑运算符
x = False
y = 'a'
print('与运算符:', x and y)
print('或运算符:', x or y)
print('非运算符:', not x)
与运算符: False
或运算符: a
非运算符: True
3.5 位运算符
- 将数值转换成二进制进行计算
# 位运算符
x = 60
y = 13
print('&运算符:', x & y)
print('|运算符:', x | y)
print('^运算符:', x ^ y)
print('~运算符:', ~x)
print('<<运算符:', x << 2)
print('>>运算符:', x >> 2)
&运算符: 12
|运算符: 61
^运算符: 49
~运算符: -61
<<运算符: 240
>>运算符: 15
3.6 成员运算符
- 判断字符串、元组、列表或字典里是否包含某个成员,返回True或False
# 成员运算符
x = 'hello world'
y = [1, 2, 3, 4]
print('in 运算符:', 'hello' in x)
print('not in 运算符:', 2 not in y)
in 运算符: True
not in 运算符: False
3.7 身份运算符
- 比较两个对象存储单元是否一致
# 身份运算符
x = 10
y = 10
print('is 运算符:', x is y)
y = 20
print('is not运算符:', x is not y)
is 运算符: True
is not运算符: True
3.8 运算符优先级
- 当存在两种或者两种以上运算符时,会根据优先级高低执行运算
4、 编码规范
4.1 代码注释
- 注释
- 注释是对代码的解释和说明;目的是让人更加轻松地理解代码
- Python中3种注释
1.单行注释
# 这是单行注释
2.多行注释
'''
这是一个多行注释
多行注释中可以写很多代码
'''
或者
"""
这是一个多行注释
多行注释中可以写很多代码
"""
3.中文编码声明注释
#!/usr/bin/env python
#!-*-coding:utf-8 -*-
或
#coding=utf-8
4.2 模块和包
- 模块
- 指一个单独的Python文件;后缀名为.py
- 包
- 指多个模块所在的文件夹;每个包目录下都存在 init.py 文件,有这个文件才是包
- 导入模块、包操作
1.使用关键字import
import os
import os as myos # 使用别名
2.使用from关键字
from os import name # 从模块os导入name方法
from HelloWorld.world import w # 从嵌套了一个包中获取模块w
- 常见导入模块、包异常
模块或包不存在: ModuleNotFoundError:No module named 'XXX'
导入不存在的模块或函数: ImportError:can not import name 'XXX' from 'XXX'
包的路径导入错误: ImportError:attemptError attempted relative import with no know parent packeage
文件名与模块名重复: AttributeError:partially initialized module 'XXX' has no attribute 'XXX'
4.3 编码缩进
-
代码编写规范
- Python采用代码缩进和冒号来区分代码块之间的层次
- 通常采用4个空格作为缩进
- Python中定义类、函数、流程控制语句、异常处理语句时,需要再语句末端添加冒号【:】
-
常见编码格式异常
无效缩进: IndentationError:unexpected indent
没有缩进代码: IndentationError:expected an indented block
缺失冒号: SyntaxError:invalid syntax
三、基本数据类型
1、数字类型
1.1 数字类型分类
- 数字类型种类
- 整型:没有小数点的数值
- 浮点型:带有小数点的数值
- 布尔型:True和False表示
- 复数:一个实数和一个虚数组合而成,x+yj或者complex(x,y)
1.2 整数的进制与转换
- 在Python3中,整型没有长度限制,可以设置非常大的数值,但实际上由于计算机内存的限制不可能无限大
- 进制的转换
a = 0b11011
print('0b11011 二进制表示:', a) # 二进制使用:0b开头
b = 0o33
print('0o33 八进制表示:', b) # 八进制使用:0o开头
c = 27
print('27 十进制表示:', c) # 十进制
d = 0x1b
print('0x1b 十六进制表示:', d) # 十六进制使用:0x开头
0b11011 二进制表示: 27
0o33 八进制表示: 27
27 十进制表示: 27
0x1b 十六进制表示: 27
- 不同进制的数据转换函数
# 十进制转换成二进制,使用bin()
num = 8
v = bin(num)
print('十进制转换成二进制:8 --->', v)
# 十进制转换成八进制,使用oct()
v = oct(num)
print('十进制转换成八进制:8 --->', v)
# 十进制转换成十六进制,使用hex()
v = hex(num)
print('十进制转换成十六进制:8 --->', v)
# 二进制转换成十进制
v1 = '0b1111'
result = int(v1, base=2)
print('二进制转换成十进制: 0b1111 --->', result)
# 八进制转换成十进制
v1 = '0o1111'
result = int(v1, base=8)
print('八进制转换成十进制: 0o1111 --->', result)
# 十六进制转换成十进制
v1 = '0x1111'
result = int(v1, base=16)
print('十六进制转换成十进制: 0x1111 --->', result)
十进制转换成二进制:8 ---> 0b1000
十进制转换成八进制:8 ---> 0o10
十进制转换成十六进制:8 ---> 0x8
二进制转换成十进制: 0b1111 ---> 15
八进制转换成十进制: 0o1111 ---> 585
十六进制转换成十进制: 0x1111 ---> 4369
1.3 浮点数的精度处理
- 解决浮点数精度函数
- 函数round()或者decimal模块
1.函数round()
# 保留2位小数,输出0.14
print(round(0.135, 2))
# 保留2位小数,输出0.23
print(round(0.235, 2))
2.decimal模块
from decimal import Decimal
from decimal import getcontext
# 设置小数点保留的位数
d_context = getcontext()
d_context.prec = 2
# Decimal 传入的数据必须以字符串表示
a = Decimal('0.235') / Decimal('1')
print(a) # 0.24
1.4 布尔型数据的逻辑运算
- 布尔值
- 使用True和False作为布尔的值
- 实际数值1和0也可以作为布尔的值
1.5 复数的使用与运算
- 复数是有一个实数和一个虚数组合而成
- 在一个复数里,可以使用real和imag方法获取复数的实数和虚数
a = complex(2, 4)
print(a.real) # 2.2
print(a.imag) # 4.0
2、字符串类型
2.1 定义与使用
-
定义
- 字符串是由数字、字母、下划线组成的一串字符,多个字符可以组成字符串
- 字符串可以用单引号、双引号或三引号表示
-
转义字符
- 是一种特殊的字符常量,以反斜线【\】开头
- 它具有特定的含义,用于区分字符原有的意义
- 如果在转义字符前面加上r,可以是转义字符不转义,按普通字符串输出
-
字符串的使用
- 字符串的截取
str[start:end:step]
# 字符截取
str = 'ABCDEFG'
print('截取字符串第1位到第3位的字符:', str[0:3:])
print('截取字符串的全部字符:', str[::])
print('截取第7个字符到结尾:', str[6::])
print('截取从头开始到倒数第三个字符:', str[:-3:])
print('截取第三个字符:', str[2])
print('截取最后一个字符:', str[-1])
print('与原字符串顺序相反的字符串:', str[::-1])
print('截取倒数第三位与倒数第一位的字符:', str[-3:-1:])
print('截取倒数第三位到结尾:', str[-3::])
print('逆序截取:', str[:-5:-3])
截取字符串第1位到第3位的字符: ABC
截取字符串的全部字符: ABCDEFG
截取第7个字符到结尾: G
截取从头开始到倒数第三个字符: ABCD
截取第三个字符: C
截取最后一个字符: G
与原字符串顺序相反的字符串: GFEDCBA
截取倒数第三位与倒数第一位的字符: EF
截取倒数第三位到结尾: EFG
逆序截取: GD
2.2 格式化操作
- 字符串格式化是在字符串里面引入变量,通过改变变量的数据来生成不同的字符串
- 字符串格式化可以使用格式化符号【%】、函数format()和f-string实现
1.使用格式化符号 %
a = 'Hi,%s' % 'Python'
print(a)
2.使用format()
# 在字符串的末端使用.format()
# 每个{}代表一个变量的占位符,format根据占位符{}的数量进行数据填充
a = '{}{}'.format('hello', ' python')
print(a) # 输出 hello python
3.f-string
# 在{}里面填写变量,{}中可传入元组,列表,字典等
h = 'hello'
w = 'world'
a = f'{h} {w}'
print(a) #输出hello world
2.3 使用运算符
- 各个运算符的详细使用说明
a = 'Hello'
b = 'World'
# 算术运算符
# '+'将变量a和b连接成新的字符串
# 输出HelloWorld
print(a + b)
# '*'将变量a叠加
print(a * 2)
# 比较运算符
# 判断变量a和变量b是否相等
print(a == b)
# 判断变量a是否大于变量b
print(a > b)
# 成员运算符
# 判断变量a是否含有字符'H'
print('H' in a)
# 判断变量a是否不含有字符'H'
print('H' not in a)
2.4 大小写转换
- capitalize()方法:将字符串第一个字符转化成大写字母,其他字符全部转化成小写字母
a = 'i Love Python'
b = a.capitalize()
print(b)
2.5 大写转小写
- lower( )方法:将字符串中所有英文字母的大写形式转换成小写形式
a = 'I LOVE PYTHON'
b = a.lower()
print(b)
2.6 小写转大写
- upper( )方法:将字符串中所有英文字母的小写形式转换成大写形式
a = 'i love python'
b = a.upper()
print(b)
2.7 大小写切换
- swapcase()方法:对字符串的英文字母进行大小写切换,小变大;大变小
a = 'i Love Python'
b = a.swapcase()
print(b)
2.8 查询索引
- find()方法:检测字符串中是否含有某个字符或部分字符串(子串),存在则返回子串首个字符的索引值,否则返回 -1
a = '我爱大蟒蛇'
b = '大'
c = '蛇'
print('从"我爱大蟒蛇"中查找"大"所在位置', a.find(b))
# 指定子串中查找
print('从"爱大蟒"中查找"大"所在位置', a.find(b, 1, 3))
2.9 查找索引
- index()方法:检测字符串中是否包含某个字符或部分字符串,存在则返回子串首个字符的索引值,否则提示ValueError异常
a = '我爱大蟒蛇'
b = '大'
c = '蛇'
print('从"我爱大蟒蛇"中查找"大"所在位置', a.index(b))
2.10 序列拼接字符串
- join()方法:将一个序列的元素以指定的字符或字符串拼接成新的字符串
a = '#'
b = '-!'
myTuple = ('我', '爱', '大', '莽', '蛇')
myList = ['我', '爱', '大', '莽', '蛇']
print('元组拼接字符串:', a.join(myTuple))
print('列表拼接字符串:', b.join(myList))
元组拼接字符串: 我#爱#大#莽#蛇
列表拼接字符串: 我-!爱-!大-!莽-!蛇
2.11 分隔字符串
- split()方法:以指定的字符或字符串对字符串进行分隔处理
a = 'Hello World Python'
print('使用默认分隔符:', a.split())
print('使用o作为分隔符:', a.split("o"))
print('使用默认分隔符并只分隔一次:', a.split(" ", 1))
使用默认分隔符: ['Hello', 'World', 'Python']
使用o作为分隔符: ['Hell', ' W', 'rld Pyth', 'n']
使用默认分隔符并只分隔一次: ['Hello', 'World Python']
2.12 单个替换
- replace()方法:将字符串中已存在的字符或子字符串替换成新的字符串或子字符串
a = 'Hello,World,Python'
print('将字符串的","替换成"#":', a.replace(',', '#'))
print('只替换最左边的",":', a.replace(',', '#', 1))
2.13 类型检测
- isalnum():检测字符串是否由字母和数字共同组成
- isalpha():检测字符串是否只由字母组成
- isdigit():检查字符串是否只由数字组成