前言 windows系统搭建
1.安装Python解释器
2.安装pycharm开发工具
更改中文:
打开Pycharm---File---Settings---Plugins---Chinese
关闭Pycharm,然后重启即刻
3.终端输入信息
终端输入Python进入Python交互式命令;
接下来即刻输入Python代码,如:print("Hello world")
镜像源配置好之后,自动从镜像源下载模块包
anaconda 模块下载路径在C盘,但是anacoda安装D盘,怎么解决:anaconda安装的目录只有读取权限,没有写入权限,需要给目录添加权限
第一章 变量和数值类型
1.1 变量
变量是用于找到存储在内存中的数据的标记,在程序运行过程中是可以发生改变的量,变量指向的数据是临时的,随着程序运行的结束而消亡。
1.1.1 语法:
变量名 = 变量值
变量名1 = 变量名2 = 变量值
变量名1, 变量名2, = 变量值1,变量值2 多重赋值
多重赋值的应用:交换变量
对于两个变量值进行交换,一般可以通过中间变量或者算数运算的方式进行,而下面方式的变量交换是Python语言独有的
变量解包(unpacking)是Python里的一种特殊赋值操作,允许把一个可迭代对象的所有元素一次性赋值给多个变量。详看后面讲解!
1.1.2 变量赋值 重理解
- 变量是首次赋值时即被创建, 变量被引用前也必须被赋值.Python中, 变量不能单独存在, 必须指向一个对象.
- 对x = expr 赋值语句,正确的理解是创建一个变量指向一个对象expr,一个变量只能够指向一个对象,但是一个值可以由多个变量指向
- 如x, y, z = expr 赋值语句, 就是创建多个变量来共同指向同一个对象expr. 当通过一个变量对对象进行更改时, 打印其它变量, 打印的值也会跟着发生更改.
- 对于任何没有变量指向的对象,Python将自动删除。一般而言,Python跟踪所有的值,并自动删除不再有变量指向的值。这称为垃圾收集,因此,Python程序员很少需要为删除值操作。例如:
rate = 0.4
rate = 0.8
此时,内存中值0.4会自动被删除
- 某些操作会隐式地进行赋值:
- 赋值出现在Python的许多上下文中.例如模块导入, 函数和类定义, for循环变量, 以及函数参数等都是隐式赋值运算.这些上下文都会在运行时把名称和对象引用相互绑定.
1.1.3 变量命名规则
1、遵循PEP8原则
- 对于普通变量,使用蛇形命名法,比如 max_value
- 对于常量,采用全大写字母,使用下划线连接,比如 MAX_VALUE
- 类命名:驼峰风格(FooClass)
- 函数命名:使用蛇形命名法,比如 max_value
- 如果变量标记为“仅内部使用”,为其增加下划线前缀,比如 _local_var
- 当名字与 Python 关键字冲突时,在变量末尾追加下划线,比如 class_
2、描述性强
3、尽量简短
在保证变量名的描述性较强的情况下,做到尽量简短,一般尽量不超过4个单词
4、匹配类型
- 匹配布尔数值类型变量名:变量名需要具有明确的“肯定”或者“否定”含义。is、has、allow等
- 如is_int(是否为整型)、allow_empty(是否允许有空值)
- 匹配int/float类型的变量名:对于一些名字,自动认定其为int、float类型
- 示意为数字的单词:port、age、radius、count、length等
- 以_id结尾的单词:user_id、host_id
- 别拿名词复数来作int类型变量名
1.1.4 变量类型注明
Python是动态类型语言,使用变量时不需要做任何类型声明(赋值即定义)。一方面,这是我们编写代码更加简洁容易,但是从另一方面来说,不用声明类型无疑降低了代码的可读性。为了提高代码的可读性,Python官方先后推出了两种方案。
- Sphinx格式的函数文档(docstring)
- 类型注解(Python3.6引入)
- 推荐使用类型注解,为Python的内置功能
函数文档和类型注解只是一种类型提示,不提供任何校验功能,要校验类型正确性,可以使用其他静态类型检验工具(如mypy)
1.2 标识符
标识符就是给类、接口、方法、变量、常量名,包名等起名字的字符序列。
1.2.1 命名规则
- 由字母,数字,下划线组成,数字不能开头
- 不能含空格,可以用下划线连接:student_name
- 不能和Python关键字和函数名重复,如:print
- 变量的编写既要简洁也要有描述性,并慎用小写l和大写O,容易和1,0混淆(严格区分大小写)
1.2.2 命名规范
- 函数名,文件名:全部小写,单词间用下划线_隔开
- hello_world.py, get_sum
- 类名:大驼峰(双驼峰)命名法。
- class HelloWorld
- 变量名:详看1.1.3变量命名
1.2.3 关键字
关键字就是Python赋予特殊含义的单词,其基本都是小写的。一般在编辑器中针对关键字,都会高亮提示。
1.3 代码规范
1.4 数值类型
查看数据类型函数:type()
python数据类型:
- 数值类型:
- 整数型int,浮点数型float,布尔型bool,复数类型complex)
- 容器类型:
- 字符串str、列表list、元组tuple、集合set、字典dict
1.4.1 整数型 int(正,负,0)
数字计算:+,-,*,/(除结果带小数),//(除取商),%(取余数),**(次方)
- 与其他大多数编程语言不同,Python允许整数具有无限的精度,只要内存空间允许,整数可以增长为任意位数的数字
- 可以使用“_“单下划线对位数进行分段,使位数较大的数值显示的更易阅读。如1_000_000表示1000000
- 可以使用十进制、十六进制、八进制和二进制来表示整数
- 十六进制表示:以0X或0x开头,接0-9和A-F。(大写或小写都行)
- 八进制表示:以0o或0O开头,接0-7(大写或小写都行)
- 二进制表示:以0b或0B开头,接0-1
- 所有这些字面量在程序代码中都产生一个整数对象,它们仅仅是特定值的不同语法表示而已,内置函数hex(I)、otc(I)和bin(I)把一个整数转换为这3种进制表示的字符串。并且int(str, base)根据每个给定的进制把一个运行时字符串转换为一个整数,并通过第二参数来确定转换后的数字的进制。
1.4.2 浮点数 float(正,负,0.0)
浮点数即带有小数的数值,所有适用于整数的运算都可用于浮点数,包括取余(%)和整除(//)
在Python中有两个特殊的浮点数:float(“inf”)和float(”-inf”),分别对应正无穷大和负无穷大,在简化边界处理逻辑、机器学习等场景能够用到
1.科学计数法e/E:10的正次方用e/E数字,10的负次方用e/E-数字
7.823E5=782300.0
7.823e-2=0.07823
科学计数法表示的数会被解释器认定为浮点数
2.溢出:
与整数不同,浮点数存在上限和下限,超出上限或者下限将会导致溢出错误,这意味着计算的结果太大或者太小,Python无法将其表示成浮点数。
3.精度有限:
在计算机语言中,数值是用二进制表示的,对于整数来说,二进制尚且能应对,但对于浮点数来说,计算机就做不到决定的精准。浮点数在标准CPython中采用C语言中的”双精度“(double precision)来实现,这个精度限制就是0.1+0.2为0.30…04的原因。
为了解决这个问题, Python 提供了一个内置模块: decimal。假如你的程序需要精确的浮点数计算,请考虑使用 decimal.Decimal 对象来替代普通浮点数,它在做四则运算时不会损失任何精度
4.省略0
当浮点数的整数部分是0时,可以省略这个0。如
.1
表示0.1
。1.4.3 布尔型 bool
布尔值 (True 和 False)是整数1和0的定制版, 会通过Python条件表达式的成立与否相应返回,成立返回True、不成立返回False
1、True和False是Python中每个对象的固有属性: 每个对象非真即假. 可以通过函数bool()来判断对象的真假.
对象 | 值 |
“spam” | True |
[] | false |
[1, 2] | True |
0.0 | False |
None | False |
2、布尔值也是数字:布尔类型作为整型子类,可直接作为0/1参与数值运算
思想:统计集合中符合某条件的元素个数,可以直接对这些元素进行条件判断,把元素转化为对应的True、False,再统计True个数即可。
1.4.4 复数 complex(了解)
复数是用公式z = x + iy表示的数,其中i是虚数单位,满足i^2 = -1,x为实部,y为虚部。复数也可以通过内置函数complex(real, imag)来创建
1.4.5 分数 fraction(了解)
分数显示保持了一个分子和一个分母,从而避免了浮点数运算的某些不精确性和局限性。与小数一样,分数的实现并不像浮点数靠近计算机的底层硬件。这意味着它们的性能不会像浮点数一样优秀。构建分数,需要通过fractions模块导入。
对于那些在内存中给定有限位数不能精确表示的值,浮点数的局限性就尤为明显。Fraction和Decimal都提供了得到精确结果的方式。但这需要付出一些速度和代码冗余度性的代价。
1.5 运算符
1.5.1 算数运算符
a, b = 10, 3
+ | 加 | a + b 输出结果 13 | ㅤ |
- | 减 | a - b 输出结果 7 | ㅤ |
* | 乘 | a * b 输出结果 30 | ㅤ |
/ | 除 | b / a 输出结果 3.3333333333333334 | 无论是否能整除,返回浮点数类型(小数会存在丢失精度问题) |
% | 取余 | b % a 输出结果 1 | 返回类型由被除数决定(a为浮点数,返回浮点数) |
** | 幂 | a**b 为1000 | ㅤ |
// | 取商 (向下取整) | a//b为3 | 返回类型由被除数决定 |
理解向下取整除法的含义:
1.5.2 比较运算符
设变量a为10,变量b为20:
== | 等于 | (a == b) 返回 False。 |
!= | 不等于 | (a != b) 返回 True。 |
> | 大于 | (a > b) 返回 False。 |
< | 小于 | (a < b) 返回 True。 |
>= | 大于等于 | (a >= b) 返回 False。 |
<= | 小于等于 | (a <= b) 返回 True。 |
1.5.3 赋值运算符
运算符 | 描述 | 实例 |
= | 简单的赋值运算符 | 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 |
注意 : 针对数值类型, c += a 和 c = c + a是等效的, 但是对于后面引用类型, 其实并不完全等效.
1.5.4 位运算符(了解)
位运算符是把数字看作二进制来进行计算,如下示例
a = 0011 1100
b = 0000 1101
& | 按位与运算符 | a&b = 0000 1100 |
| | 按位或运算符 | a|b = 0011 1101 |
^ | 按位异或运算符 | a^b = 0011 0001 |
~ | 按位取反运算符 | ~a = 1100 0011 |
<< | 左移动运算符 | a << 2 = 1111 0000 |
>> | 右移动运算符 | a >> 2 = 0000 1111 |
1.5.5 逻辑运算符
设变量 a 为 10, b为 20:
and | x and y | 布尔"与" - x为0返回0,否返回y | (a and b) 返回 20。 |
or | x or y | 布尔"或" - x不为0返回0,否返回y | (a or b) 返回 10。 |
not | not x | 布尔"非" - x为0返回1,1返回0 | not(a and b) 返回 False |
1.5.6 成员运算符
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
1.5.7 身份运算符
用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
1.5.8 拓展 逻辑运算符操作(面试需要了解)
注:
- 在对数值进行计算时,计算器是将其转换成二进制形式进行计数,然后在转化成十进制呈现给你看,这样就会存在精度问题。例如1.1用二进制表示是没法精确表示的,那么表达式(1.1 + 2.2 == 3.3)就会返回False。
- 在对不同的数据类型进行混合运算的时候,遵守混合类型向上转换原则:Python首先将被操作对象转化成表达式中最复杂的操作数类型,然后再对相同的类型的操作数进行数学运算(整数比浮点数简单,浮点数比复数简单)要记住这种混合类型转化仅适用于数值类型,一般来说,Python不会在其他的类型之间进行转化。例如字符串和整数相加就会报错。
- 运算符的重载和多态(了解):Python运算符可以被Python的类或C扩展类型所重载(即实现),从而能用于你自己创造的对象。再者,Python本身也自动重载了某些运算符,这样它能够根据所处理的内置对象的类型执行不同的操作。例如,“+”运算符用于数字是做加法,而用于字符串或列表对象是做拼接运算。实际上,“+”用在你自己定义的类的对象上时,可以进行你想要的任意操作。而这种特性通常称为多态(操作的意义由操作对象来决定)。
1.6 输入和输出
1.6.1 输入 input
输入函数: input()
- input()中放入提示提示信息, 告诉用户需要输入什么内容.
- input()会把用户输入的任何值都作为字符串类型返回.
1.6.2 输出 output
输出函数:
print()
- 一个命令打印多行数据,默认空格隔开
print("df","KO","JOO")
#输出df KO J00
- 一个命令实现同行输出,默认空格隔开
print("df","KO","JOO",sep=',')
#输出df,KO,JOO
- 多个命令实现同行输出 ,
print("王康","真棒",end="") print("你好")
#输出王康你好
注:sep = “ str”是在多个数据输出,以str将数据隔开。end = “str”是在有(两)多条print命令中,实现同行输出,print打印数据之间以str相隔
下面是字符串格式化输出的三种方式,占位符%形式是C语言输出分隔很少使用;format格式化是Python2.6新增,较流行;f前缀是Python3.6新增,大样推荐使用,使用f前缀的代码看起来更简洁直观。
1.6.2.2 占位符%格式化输出(了解)
语法:print(”格式化字符“%(变量1,变量2))
print(”格式化字符”%变量)
格式化字符类型:
(s,d,f等是转换说明符,说明字符串、整数、浮点数等格式输出)
- %s 表字符串(string)
- %c 表示字符
- %d 表十进制数 (%o八进制;%x十六进制;%e科学计数法浮点计数)
- %f 表小数(默认保留后六位,%.f保留后两位)
- %.1f 保留一位小数
- %% 表一个百分号
1.6.2.1 format格式化输出(掌握)
语法:
1.填充对齐
2.位数与进制转换
1.6.2.2 f前缀格式化输出(推荐使用)
f-string是字符串前面加上“f“,{}直接使用变量、表达式等
对于特殊字符需要转义成普通字符需要在字符串前面加\,而另一种方式是在字符串前面加r。相比单独添加反斜杠,前缀r能够对后面字符串要转义的字符全部起作用。
关于字符串相关更多用法,大样将会在后面章节单独讲解。
1.7 拓展
1.7.1 如何摆脱中英文切换问题
对于国内的程序员来说,经常需要切换中英文输入,这样会导致自己在编写代码过程中,很容易符号出错问题,把英文符号写成中文符号的问题。
对于讯飞输入法、搜狗输入法、windows自带输入法等,打开设置-找到设置“中文时使用英文符号”并勾选。然后切换其他输入法再切换回来即可。
1.7.2 pycharm相关快捷键
- 代码行操作
快捷键 | 含义 |
Ctrl+/ | 单行注释 |
ctrl + d | 快速向下复制一行. |
Ctrl + n | 搜索类 |
ctrl + alt + l | 格式化代码(也叫: 代码对齐) |
ctrl + alt + m | 选中代码快, 抽取为函数 |
shift + enter | 生成下一行,光标切换到下一行 |
Ctrl + y | 删除当前行(推荐Ctrl + x剪切替代) |
Ctrl + z | 撤销操作 |
Ctrl + h | 查看继承关系树 |
Ctrl + o | 编写类方法时调出魔术方法集 |
alter + shift + ↓ | 代码向下移动 |
alter + shift + ↑ | 代码向上移动 |
alter + shift + 鼠标左键 | 多行代码, 纵向对其选择(notepad++为alter + 鼠标左键) |
选中变量并按shift + F6 | 批量对变量进行替换,包括注释中的变量 |
- 文件相关操作
快捷键 | 含义 |
shift + F6 | 重命名文件 |
alter + ctrl + insert | 新建python脚本 |
- debug调试操作
快捷键 | 含义 |
f7 | 逐过程调试, 遇到函数进入函数源码 |
f8 | 逐行调试, 遇到函数不进入函数源码 |
f9 | 逐断点调试, 遇到断点才停 |
- 窗口调用
快捷键 | 含义 |
alt + 1 | 显示或隐藏 项目结构区窗口 |
alt + 4 | 显示或隐藏 控制台 |
- 自定义快捷键
在编写代码的过程中, 我有时候需要将光标左, 上, 下, 右移时, 此时我要按上下左右键会使我的手离开编写代码的核心区, 怎么办呢?可以在pycharm中重定义上下左右快捷键即可.
pycharm→ file → setting → keymap中, 搜索up, down, left, right然后添加快捷键
快捷键 | 含义 |
Ctrl + l | 向右移 |
Ctrl + i | 向上移 |
Ctrl + j | 向左移 |
Ctrl + k | 向下移 |
1.7.3 pycharm推荐插件
- Atom Material Icons
- ChatGPT
- Code Screenshots
- Material Theme UI
- Rainbow Brackets
- SonarLint
- Tabnine
- translation