参考视频和资料:黑马程序员python教程
一、你好Python
1.1 下载解释器
链接: Python官网
1.2 你好世界
print("hello world!!!")
1.3 python解释器
python解释器是python.exe程序
python一次运行多条语句可以先新建py文件,在cmd程序中使用python命令python d:\test.py
来使用。
1.4 PyCharm使用
1.5 pyc文件
C
是compiled
编译过 的意思
操作步骤
- 浏览程序目录会发现一个
__pycache__
的目录 - 目录下会有一个
hm_10_分隔线模块.cpython-35.pyc
文件,cpython-35
表示Python
解释器的版本 - 这个
pyc
文件是由 Python 解释器将 模块的源码 转换为 字节码Python
这样保存 字节码 是作为一种启动 速度的优化
字节码
-
Python
在解释源程序时是分成两个步骤的- 首先处理源代码,编译 生成一个二进制 字节码
- 再对 字节码 进行处理,才会生成 CPU 能够识别的 机器码
-
有了模块的字节码文件之后,下一次运行程序时,如果在 上次保存字节码之后 没有修改过源代码,Python 将会加载 .pyc 文件并跳过编译这个步骤
-
当
Python
重编译时,它会自动检查源文件和字节码文件的时间戳 -
如果你又修改了源代码,下次程序运行时,字节码将自动重新创建
二、Python基础语法
2.1 字面量
字面量:在代码中,被写下来的固定的值
2.2 注释
# 单行注释(可以跟在代码后面)
"""
多行注释(单引号双引号都可以)
"""
print("Hi") # 输出Hi
# 使用\行连接符可以将一行内容放在两行
name = "123" \
"123124"
2.3 变量
- 变量 和 数据 都是保存在 内存 中的
- 在
Python
中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 - 变量 和 数据 是分开存储的
- 数据 保存在内存中的一个位置
- 变量 中保存着数据在内存中的地址
- 变量 中 记录数据的地址,就叫做 引用
- 使用
id()
函数可以查看变量中保存数据所在的 内存地址
注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用
- 变量 不再 对之前的数据引用
- 变量 改为 对新赋值的数据引用
2.4 数据类型
类型 | 描述 | 说明 |
---|---|---|
string | 字符串类型 | 用“”括起来的数据 |
int | 整形(有符号) | 数字类型,存放整数,如10,-100等 |
float | 浮点型(有符号) | 数字类型,存放小数,如14.14 |
bool | 布尔类型 | Ture与False |
# 使用type来查看数据类型,type(数据或变量)
x = type(13)
print(x) # <class 'int'>
print(type(x)) #<class 'type'>
变量无类型,存储的数据有类型
2.5 类型转换
- 任何类型,都可以使用str()转换为字符串
- 字符串内必须真是数字,从可以将串转换为数字
- 浮点数转整数会损失精度,丢去小数部分
2.6 标识符
自己所使用的一系列名字,用于给变量、方法、函数等命名,称为标识符
-
内容限定
*标识符只可以有数字,字母,下划线,中文 数字不可以开头 不推荐使用中文*
-
大小写敏感
-
不可使用关键字
2.7 运算符
2.7.1 算术运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 |
% | 取余数 | 返回除法的余数 9 % 2 = 1 |
** | 幂 | 又称次方、乘方,2 ** 3 = 8 |
- 在 Python 中
*
运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
In [1]: "-" * 50
Out[1]: '----------------------------------------'
2.7.2 赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | 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 |
2.7.3 比较运算符
运算符 | 描述 |
---|---|
== | 检查两个操作数的值是否 相等,如果是,则条件成立,返回 True |
!= | 检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True |
> | 检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True |
< | 检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True |
>= | 检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True |
<= | 检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True |
2.7.4 逻辑运算符
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 只有 x 和 y 的值都为 True,才会返回 True 否则只要 x 或者 y 有一个值为 False,就返回 False |
or | x or y | 只要 x 或者 y 有一个值为 True,就返回 True 只有 x 和 y 的值都为 False,才会返回 False |
not | not x | 如果 x 为 True,返回 False 如果 x 为 False,返回 True |
2.7.5 身份运算符
身份运算符用于 比较 两个对象的 内存地址 是否一致 —— 是否是对同一个对象的引用
- 在
Python
中针对None
比较时,建议使用is
判断
运算符 | 描述 | 实例 |
---|---|---|
is | is 是判断两个标识符是不是引用同一个对象 | x is y,类似 id(x) == id(y) |
is not | is not 是判断两个标识符是不是引用不同对象 | x is not y,类似 id(a) != id(b) |
is
用于判断 两个变量 引用对象是否为同一个
==
用于判断 引用变量的值 是否相等
2.7.6 数据容器通用运算符
运算符 | Python 表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1, 2] + [3, 4] | [1, 2, 3, 4] | 合并 | 字符串、列表、元组 |
* | [“Hi!”] * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 重复 | 字符串、列表、元组 |
in | 3 in (1, 2, 3) | True | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 4 not in (1, 2, 3) | True | 元素是否不存在 | 字符串、列表、元组、字典 |
> >= == < <= | (1, 2, 3) < (2, 2, 3) | True | 元素比较 | 字符串、列表、元组 |
in
在对 字典 操作时,判断的是 字典的键in
和not in
被称为 成员运算符
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False | 3 in (1, 2, 3) 返回 True |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False | 3 not in (1, 2, 3) 返回 False |
注意:在对 字典 操作时,判断的是 字典的键
2.7.7 运算符优先级
运算符 | 描述 |
---|---|
** | 幂 (最高优先级) |
* / % // | 乘、除、取余数、取整除 |
+ - | 加法、减法 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
not or and | 逻辑运算符 |
2.8 字符串拓展
2.8.1 字符串定义
双引号定义法 | “我是字符串” |
---|---|
单引号定义法 | ‘我是字符串’ |
三引号定义法 | “”"我是字符串“”“ |
三引号与多行注释写法一样,支持换行,使用变量接受他作为字符串使用,不使用变量接受他就作为多行注释使用
# 在字符串内 包含双引号
name = '"程序员"'
print(name)
# 在字符串内 包含单引号
name = "'程序员'"
print(name)
# 使用转义字符 \ 解除引号的效用
name = "\"程序员\""
print(name)
name = '\'程序员\''
print(name)
2.8.2 字符串拼接
# 通过+拼接字符串
name = "新"
print("我是" + name + "青年")
age = 18
print("我是" + name + "青年,年龄:" + age)
# 这样会报错,无法和非字符串进行拼接,类型不一样
2.8.3 字符串格式化
方法 | 描述 |
---|---|
占位 | message="我是%s,我今年%d" % (name, age) |
快速格式化 | f“内容{变量}”,不理会精度与类型 |
%5.2f:宽度为5,两位小数
%.2f:不限宽度,两位小数
# 表达式格式化
print("1 * 1 = %d " % (1 * 1))
print(f"1 * 1 = {
1 * 1}")
2.8.4 字符串参与计算eval函数
# 基本的数学计算
In [1]: eval("1 + 1")
Out[1]: 2
# 字符串重复
In [2]: eval("'*' * 10")
Out[2]: '**********'
# 将字符串转换成列表
In [3]: type(eval("[1, 2, 3, 4, 5]"))
Out[3]: list
# 将字符串转换成字典
In [4]: type(eval("{'name': 'xiaoming', 'age': 18}"))
Out[4]: dict
2.8.5 字符串的编码与解码
st1.decode(encoding="utf-8", errors="strict")
str2.encode(encoding="utf-8", errors="strict")
2.9 输入输出数据
name = input("提示信息")
#输入结果以字符串类型存在
# 向控制台输出内容结束之后,不会换行
print("*", end="")
# 单纯的换行
print("")
转义字符 | 描述 |
---|---|
\\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
2.10 随机数random
- 在
Python
中,要使用随机数,首先需要导入 随机数 的 模块 —— “工具包”
import random
-
导入模块后,可以直接在 模块名称 后面敲一个
.
然后按Tab
键,会提示该模块中包含的所有函数 -
random.randint(a, b)
,返回[a, b]
之间的整数,包含a
和b
-
例如:
random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20
random.randint(20, 20) # 结果永远是 20
random.randint(20, 10) # 该语句是错误的,下限必须小于上限
三、判断与循环语句
3.1 判断语句
# 判断语句
age = int(input("年纪"))
if age >= 20:
print("很好")
elif age >=15:
print("还好")
else:
print("略好")
Python使用缩进判断代码块的归属关系
if-elif-else之间是互斥顺序的,执行了一个就不会执行后面的判断语句
3.2 循环语句
3.2.1 while循环
#while循环通过条件来判断是否需要继续执行
# 请规划循环终止条件
# 可以嵌套使用,需要注意缩进层次
while 条件:
条件满足做的事情
3.2.2 for循环
# for循环是一种轮询机制,对一批内容进行逐个处理
for 临时变量 in 待处理数据集:
执行事件
# 从数据集逐个取出数据赋值给临时变量
# 完整for循环
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,循环结束后,会执行的代码
3.2.3 range语句
range语句用来获得一个数据序列
for i in range(