python 只循环目录_看完这篇文章,你的Python基础就差不多了

世界那么大,谢谢你来看我!!关注我你就是个网络、电脑、手机小达人

前言

本文是基于黑马程序员2019年的Python基础班的内容编写的,以2019年的资料为蓝本,2018年的资料为补充,还参考了一些网上的教程,旨在更好地总结Python基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点。学一门语言贵在坚持用它,不用就淡忘了,而记录下一篇文章也有助于日后快速回忆。全文分为两大部分,分别是Python基础语法和面向对象。

 注:想学习Python的小伙伴们进群:668041364领取从0到1完整学习资料 视频 源码 精品书籍 一个月经典笔记和99道练习题及答案

第一部分 Python基础语法

41c07575601c1e0bccf8fb28cc605dfd.png

第一部分 Python基础语法

1. 认识Python

1.1 Python 简介

Python 的创始人为吉多·范罗苏姆(Guido van Rossum)。

Python 的设计目标:

  • 一门简单直观的语言并与主要竞争者一样强大

  • 开源,以便任何人都可以为它做贡献

  • 代码像纯英语那样容易理解

  • 适用于短期开发的日常任务

Python 的设计哲学:

  • 优雅、明确、简单

Python 开发者的哲学是:用一种方法,最好是只有一种方法来做一件事

Python 是完全面向对象的语言,在 Python 中一切皆对象。

可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 C 或 C++ 编写,然后在 Python 程序中使用它们。

1.2. 第一个Python程序

执行 Python 程序的三种方式:

解释器、交互式运行、IDE运行

Python 是一个格式非常严格的程序设计语言。

python 2.x 默认不支持中文。

  • ASCII 字符只包含 256 个字符,不支持中文

  • Python 2.x 的解释器名称是 python

  • Python 3.x 的解释器名称是 python3

为了照顾现有的程序,官方提供了一个过渡版本 —— Python 2.6。

提示:如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法),建议

  • 先使用 Python 3.0 版本进行开发

  • 然后使用 Python 2.6、Python 2.7 来执行,并且做一些兼容性的处理

IPython 是一个 python 的 交互式 shell,比默认的 python shell 好用得多,它支持 bash shell 命令,适合于学习/验证 Python 语法或者局部代码。

集成开发环境(IDE,Integrated Development Environment)—— 集成了开发软件需要的所有工具,一般包括以下工具:

  • 图形用户界面

  • 代码编辑器(支持 代码补全/自动缩进)

  • 编译器/解释器

  • 调试器(断点/单步执行)

  • ……

c371227881a37ea8a443eb84d77b70db.png

PyCharm 是 Python 的一款非常优秀的集成开发环境

333d7caa2318485f79604b126012dae8.png

PyCharm运行工具栏

1.3. PyCharm 的设置

PyCharm 的 配置信息 是保存在 用户家目录下 的 .PyCharmxxxx.x 目录下的,xxxx.x 表示当前使用的 PyCharm 的版本号

1.3.1 恢复 PyCharm 的初始设置:

  1. 关闭正在运行的 PyCharm

  2. 在终端中执行以下终端命令,删除 PyCharm 的配置信息目录:

$ rm -r ~/.PyCharm2016.3
  1. 重新启动 PyCharm

1.3.2 PyCharm 安装和启动步骤:

  1. 执行以下终端命令,解压缩下载后的安装包

$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
  1. 将解压缩后的目录移动到 /opt 目录下,可以方便其他用户使用

/opt 目录用户存放给主机额外安装的软件

$ sudo mv pycharm-2017.1.3/ /opt/
  1. 切换工作目录

$ cd /opt/pycharm-2017.1.3/bin
  1. 启动 PyCharm

$ ./pycharm.sh

1.3.3 设置启动图标

  • 在专业版中,选择菜单 Tools / Create Desktop Entry... 可以设置任务栏启动图标

  • 注意:设置图标时,需要勾选 Create the entry for all users

  • 快捷方式文件

  • /usr/share/applications/jetbrains-pycharm.desktop

在 ubuntu 中,应用程序启动的快捷方式通常都保存在 /usr/share/applications 目录下

1.3.4 卸载之前版本的 PyCharm

要卸载 PyCharm 只需要做以下两步工作:

  1. 删除解压缩目录

$ sudo rm -r /opt/pycharm-2016.3.1/
  1. 删除家目录下用于保存配置信息的隐藏目录

$ rm -r ~/.PyCharm2016.3/

如果不再使用 PyCharm 还需要将 /usr/share/applications/ 下的 jetbrains-pycharm.desktop 删掉

1.4. 多文件项目的演练

  • 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件

  • 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件

  • 在 PyCharm 中,要想让哪一个 Python 程序能够执行,必须首先通过 鼠标右键的方式执行 一下

  • 对于初学者而言,在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试

  • 对于商业项目而言,通常在一个项目中,只有一个 可以直接执行的 Python 源程序

bc4861083a3381f93c94ce42669e193a.png

让选中的程序可以执行

2. 注释

  • 注释的作用

  • 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性

2.1 单行注释(行注释)

  • 以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用

print("hello python") # 输出 `hello python`

为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的说明文字;为了保证代码的可读性,注释和代码之间 至少要有 两个空格。

2.2 多行注释(块注释)

  • 要在 Python 程序中使用多行注释,可以用 一对 连续的 三个 引号(单引号和双引号都可以)

"""
这是一个多行注释
在多行注释之间,可以写很多很多的内容……
"""
print("hello python")

提示:

  1. 注释不是越多越好,对于一目了然的代码,不需要添加注释

  2. 对于 复杂的操作,应该在操作开始前写上若干行注释

  3. 对于 不是一目了然的代码,应在其行尾添加注释(为了提高可读性,注释应该至少离开代码 2 个空格)

  4. 绝不要描述代码,假设阅读代码的人比你更懂 Python,他只是不知道你的代码要做什么

2.3 代码规范:

  • Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档,其中第 8 篇文档专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8:

  • 文档地址:https://www.python.org/dev/peps/pep-0008/

  • 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/

3. 运算符

3.1 算数运算符

是完成基本的算术运算使用的符号,用来处理四则运算,而“+”和“*”还可以用来处理字符串。

运算符 描述 实例 + 加 10 + 20 = 30 - 减 10 - 20 = -10 * 乘 10 * 20 = 200 / 除 10 / 20 = 0.5 // 取整除 返回除法的整数部分(商) 9 // 2 输出结果 4 % 取余数 返回除法的余数 9 % 2 = 1 ** 幂 又称次方、乘方,2 ** 3 = 8 3.2 比较(关系)运算符

  • 运算符 描述 == 检查两个操作数的值是否 相等,如果是,则条件成立,返回 True != 检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True > 检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True < 检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True >= 检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True <= 检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True Python 2.x 中判断 不等于 还可以使用 <> 运算符

  • != 在 Python 2.x 中同样可以用来判断 不等于

3.3 赋值运算符

  • 在 Python 中,使用 = 可以给变量赋值。在算术运算时,为了简化代码的编写,Python 还提供了一系列的 与 算术运算符 对应的 赋值运算符,注意:赋值运算符中间不能使用空格。

运算符 描述 实例 = 简单的赋值运算符 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 3.4 身份运算符

身份运算符比较两个对象的内存位置。常用的有两个身份运算符,如下所述:

运算符 描述 示例 is 判断两个标识符是不是引用同一个对象 x is y,类似 id(x) == id(y) is not 判断两个标识符是不是引用不同对象 x is not y,类似 id(a) != id(b) 辨析

  • is 用于判断 两个变量引用的对象是否为同一个

  • == 用于判断 引用变量的值 是否相等

3.5 成员运算符

Python成员运算符测试给定值是否为序列中的成员。有两个成员运算符,如下所述:

运算符 描述 in 如果在指定的序列中找到一个变量的值,则返回true,否则返回false。not in 如果在指定序列中找不到变量的值,则返回true,否则返回false。3.6 逻辑运算符

运算符 逻辑表达式 描述 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 3.7 运算符优先级

  • 以下表格的算数优先级由高到最低顺序排列:

运算符 描述 ** 幂 (最高优先级) * / % // 乘、除、取余数、取整除 + - 加法、减法 <= < > >= 比较运算符 == != 等于运算符 = %= /= //= -= += *= **= 赋值运算符 is is not 身份运算符 in not in 成员运算符 not or and 逻辑运算符 程序执行原理

ad2f65ee3532110bcb68dc2f601d9268.png

Python程序执行示意图

  1. 操作系统会首先让 CPU 把 Python 解释器 的程序复制到 内存 中

  2. Python 解释器 根据语法规则,从上向下 让 CPU 翻译 Python 程序中的代码

  3. CPU 负责执行翻译完成的代码

Python 的解释器有多大?

  • 执行以下终端命令可以查看 Python 解释器的大小

# 1. 确认解释器所在位置
$ which python
# 2. 查看 python 文件大小(只是一个软链接)
$ ls -lh /usr/bin/python
# 3. 查看具体文件大小
$ ls -lh /usr/bin/python2.7

4. 变量

4.1 变量定义

  • 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建

  • 可以用 其他变量的计算结果 来定义变量

  • 变量名 只有在 第一次出现 才是 定义变量

变量名 = 值

使用交互式方式,如果要查看变量内容,直接输入变量名即可,不需要使用 print 函数

使用解释器执行,如果要输出变量的内容,必须要要使用 print 函数

4.2 变量的类型

  • 在 Python 中定义变量是 不需要指定类型(在其他很多高级语言中都需要),Python 可以根据 = 等号右侧的值,自动推导出变量中存储数据的类型

  • 数据类型可以分为 数字型 和 非数字型数字型

  • 整型 (int):Python3中的所有整数都表示为长整数。因此,长整数没有单独的数字类型。

  • 浮点型(float)

  • 布尔型(bool) :真 True 非 0 数 —— 非零即真,假 False 0。

  • 复数型 (complex):复数是由x + yj表示的有序对的实数浮点数组成,其中x和y是实数,j是虚数单位。

  • 非数字型:有些运算符还支持这些数据类型,详见4.4.5.3 运算符。

  • 字符串(str):加号(+)是字符串连接运算符,星号(*)是重复运算符。

  • 列表(list)

  • 元组(tuple)

  • 字典(dict)

提示:在 Python 2.x 中,整数 根据保存数值的长度还分为:

  • int(整数)

  • long(长整数)

  • 使用 type 函数可以查看一个变量的类型

In [1]: type(name)

不同类型变量之间的计算

  1. 数字型变量 之间可以直接计算

  • 在 Python 中,两个数字型变量是可以直接进行 算数运算的

  • 如果变量是 bool 型,在计算时

  • True 对应的数字是 1

  • False 对应的数字是 0

  1. 字符串变量 之间使用 + 拼接字符串

  2. 字符串变量 可以和 整数 使用 * 重复拼接相同的字符串

  3. 数字型变量 和 字符串 之间 不能进行其他计算

从键盘获取输入信息:input

  • 在 Python 中可以使用 input 函数从键盘等待用户的输入

  • 用户输入的 任何内容 Python 都认为是一个 字符串

字符串变量 = input("提示信息:")

类型转换函数

 函数 说明 int(x) 将 x 转换为一个整数 float(x) 将 x 转换到一个浮点数 str(x) 将对象x转换为字符串表示形式 tuple(s) 将s转换为元组 list(s) 将s转换为列表 price = float(input("请输入价格:"))

格式化输出:print

  • 如果希望输出文字信息的同时,一起输出 数据,就需要使用到 格式化操作符

  • % 被称为 格式化操作符,专门用于处理字符串中的格式

  • 包含 % 的字符串,被称为 格式化字符串

  • % 和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符

  • 格式化字符 含义 %s 字符串 %d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全 %f 浮点数,%.2f 表示小数点后只显示两位 %% 输出 % 语法格式如下:

print("格式化字符串" % 变量1)
print("格式化字符串" % (变量1, 变量2...))

4.3 变量的命名

4.3.1 标识符和关键字

标示符就是程序员定义的 变量名、函数名

  • 标示符可以由 字母、下划线 和 数字 组成

  • 不能以数字开头

  • 不能与关键字重名

关键字 就是在 Python 内部已经使用的标识符

  • 关键字 具有特殊的功能和含义

  • 开发者 不允许定义和关键字相同的名字的标识符

  • 通过以下命令可以查看 Python 中的关键字

In [1]: import keyword
In [2]: print(keyword.kwlist)

4.3.2 变量的命名规则

命名规则 可以被视为一种 惯例,并无绝对与强制

目的是为了 增加代码的识别和可读性

注意 Python 中的 标识符 是 区分大小写的

  1. 在定义变量时,为了保证代码格式,= 的左右应该各保留一个空格

  2. 在 Python 中,如果 变量名 需要由 二个 或 多个单词 组成时,可以按照以下方式命名:每个单词都使用小写字母,单词与单词之间使用 _下划线 连接,例如:first_name、last_name、qq_number、qq_password。

当然,还有驼峰命名法:

小驼峰式命名法:第一个单词以小写字母开始,后续单词的首字母大写,例如:firstName、lastName。

大驼峰式命名法,每一个单词的首字母都采用大写字母,例如:FirstName、LastName、CamelCase 。

4.4 高级变量类型

在 Python 中,所有 非数字型变量 都支持以下特点:

1. 都是一个 序列 sequence,也可以理解为 容器

2. 取值 []

3. 遍历 for in

4. 计算长度len、最大/最小值max/min、比较、删除del

5. 链接 + 和 重复 *

6. 切片

4.4.1 列表(list)

  • List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组,专门用于存储 一串 信息,列表用 [] 定义,数据 之间使用 , 分隔,列表的 索引 从 0 开始。

索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标

注意:从列表中取值时,如果 超出索引范围,程序会报错

name_list = ["zhangsan", "lisi", "wangwu"]

c51696f002636d13612e2f8cb9cf14bb.png

列表示意图

del 关键字

  • 使用 del 关键字(delete) 同样可以删除列表中元素

  • del 关键字本质上是用来 将一个变量从内存中删除的

  • 如果使用 del 关键字将变量从内存中删除,后续的代码就不能再使用这个变量了

In [1]: l = [1,2,3,4]
In [2]: del l[1]
In [3]: l[1]
Out[3]: 3

在日常开发中,要从列表删除数据,建议 使用列表提供的方法

函数与方法

  • 函数 封装了独立功能,可以直接调用

函数名(参数)

函数需要死记硬背

  • 方法 和函数类似,同样是封装了独立的功能

  • 方法 需要通过 对象 来调用,表示针对这个 对象 要做的操作

对象.方法名(参数)

在变量后面输入 .,然后选择针对这个变量要执行的操作,记忆起来比函数要简单很多

循环遍历

  • 遍历 就是 从头到尾 依次 从 列表 中获取数据,在 循环体内部 针对 每一个元素,执行相同的操作。

  • 在 Python 中为了提高列表的遍历效率,使用 for 就能够实现迭代遍历。

# for 循环内部使用的变量 in 列表
for name in name_list:
循环内部针对列表元素进行操作
print(name)

0fd097af80e0d5b7d26c6cff68827dc2.png

for-in循环流程图

  • 尽管 Python 的 列表 中可以 存储不同类型的数据

  • 但是在开发中,更多的应用场景是

  1. 列表 存储相同类型的数据

  2. 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作

4.4.2 元组(tuple)

  • Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改元组 表示多个元素组成的序列

  • 元组 在 Python 开发中,有特定的应用场景

  • 用于存储 一串 信息,数据 之间使用 , 分隔

  • 元组用 () 定义,元组的 索引 从 0 开始,索引 就是数据在 元组 中的位置编号。

info_tuple = ("zhangsan", 18, 1.75)

创建空元组:

info_tuple = ()

元组中 只包含一个元素 时,需要 在元素后面添加逗号:

info_tuple = (50, )

6c0864da192ec87811979dffdc770e74.png

元组示意图

  • 在 Python 中,可以使用 for 循环遍历所有非数字型类型的变量:列表、元组、字典以及 字符串

  • 提示:在实际开发中,除非 能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多

  • 在开发中,更多的应用场景是:

  • 函数的 参数 和 返回值,一个函数可以接收 任意多个参数,或者 一次返回多个数据

  • 格式字符串,格式化字符串后面的 () 本质上就是一个元组

  • 让列表不可以被修改,以保护数据安全

元组和列表之间的转换

  • 使用 list 函数可以把元组转换成列表

list(元组)
  • 使用 tuple 函数可以把列表转换成元组

tuple(列表)

4.4.3 字典(dict)

dict(字典) 是 除列表以外 Python 之中 最灵活 的数据类型。

字典同样可以用来 存储多个数据,通常用于存储 描述一个 物体 的相关信息

  • 和列表的区别:

  • 列表 是 有序 的对象集合

  • 字典 是 无序 的对象集合

  • 字典用 {} 定义。

  • 字典使用 键值对 存储数据,键值对之间使用逗号 , 分隔:

  • 键 key 是索引

  • 值 value 是数据

  • 键 和 值 之间使用冒号 : 分隔

  • 键必须是唯一的

  • 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组

xiaoming = {"name": "小明",
"age": 18,
"gender": True,
"height": 1.75}

06fdc622d3cbb9b47118895567891cd3.png

字典示意图

  • 字典的遍历 就是 依次 从 字典 中获取所有键值对:

# for 循环内部使用的 `key 的变量` in 字典
for k in xiaoming:
print("%s: %s" % (k, xiaoming[k]))

提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多

  • 尽管可以使用 for in 遍历 字典

  • 但是在开发中,更多的应用场景是:

  • 使用 多个键值对,存储 描述一个 物体 的相关信息 —— 描述更复杂的数据信息

  • 将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理

card_list = [{"name": "张三",

"qq": "12345",

"phone": "110"},

{"name": "李四",

"qq": "54321",

"phone": "10086"}

]

4.4.4 字符串(str)

  • 字符串 就是 一串字符,是编程语言中表示文本的数据类型

  • 在 Python 中可以使用 一对双引号 " 或者 一对单引号 ' 定义一个字符串

  • 虽然可以使用 " 或者 ' 做字符串的转义,但是在实际开发中:

  • 如果字符串内部需要使用 ",可以使用 ' 定义字符串

  • 如果字符串内部需要使用 ',可以使用 " 定义字符串

  • 可以使用 索引 获取一个字符串中 指定位置的字符,索引计数从 0 开始

  • 也可以使用 for 循环遍历 字符串中每一个字符

大多数编程语言都是用 " 来定义字符串

string = "Hello Python"
for c in string:
print(c)

17144b17cc7a196bbfabbf5bd7fad0c8.png

字符串示意图

提示:在 python 中对字符串操作,内置提供的方法足够多,使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!

1) 判断类型 - 9

方法 说明 string.isspace() 如果 string 中只包含空格,则返回 True string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True string.isdecimal() 如果 string 只包含数字则返回 True,全角数字 string.isdigit() 如果 string 只包含数字则返回 True,全角数字、⑴、\u00b2 string.isnumeric() 如果 string 只包含数字则返回 True,全角数字,汉字数字 string.istitle() 如果 string 是标题化的(每个单词的首字母大写)则返回 True string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True 2) 查找和替换 - 7

方法 说明 string.startswith(str) 检查字符串是否是以 str 开头,是则返回 True string.endswith(str) 检查字符串是否是以 str 结束,是则返回 True string.find(str, start=0, end=len(string)) 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 string.rfind(str, start=0, end=len(string)) 类似于 find(),不过是从右边开始查找 string.index(str, start=0, end=len(string)) 跟 find() 方法类似,不过如果 str 不在 string 会报错 string.rindex(str, start=0, end=len(string)) 类似于 index(),不过是从右边开始 string.replace(old_str, new_str, num=string.count(old)) 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 3) 大小写转换 - 5

方法 说明 string.capitalize() 把字符串的第一个字符大写 string.title() 把字符串的每个单词首字母大写 string.lower() 转换 string 中所有大写字符为小写 string.upper() 转换 string 中的小写字母为大写 string.swapcase() 翻转 string 中的大小写 4) 文本对齐 - 3

方法 说明 string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 5) 去除空白字符 - 3

方法 说明 string.lstrip() 截掉 string 左边(开始)的空白字符 string.rstrip() 截掉 string 右边(末尾)的空白字符 string.strip() 截掉 string 左右两边的空白字符 6) 拆分和连接 - 5

方法 说明 string.partition(str) 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面) string.rpartition(str) 类似于 partition() 方法,不过是从右边开始查找 string.split(str="", num) 以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ' ', ' ', ' ' 和空格 string.splitlines() 按照行(' ', ' ', ' ')分隔,返回一个包含各行作为元素的列表 string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 字符串的切片

  • 切片 方法适用于 字符串、列表、元组切片 使用 索引值 来限定范围,从一个大的 字符串 中 切出 小的 字符串

  • 列表 和 元组 都是 有序 的集合,都能够 通过索引值 获取到对应的数据

  • 字典 是一个 无序 的集合,是使用 键值对 保存数据

354703df6e2f2502327fbd55ee3b5881.png

字符串索引示意图

字符串[开始索引:结束索引:步长]

注意:

  • 指定的区间属于 左闭右开 型 [开始索引, 结束索引) => 开始索引 <= 范围 < 结束索引从 起始 位开始,到 结束位的前一位 结束(不包含结束位本身)

  1. 从头开始,开始索引 数字可以省略,冒号不能省略

  2. 到末尾结束,结束索引 数字可以省略,冒号不能省略

  3. 步长默认为 1,如果连续切片,数字和冒号都可以省略

索引的顺序和倒序

  • 在 Python 中不仅支持 顺序索引,同时还支持 倒序索引

  • 所谓倒序索引就是 从右向左 计算索引:最右边的索引值是 -1,依次递减。

num_str = "0123456789"
# 1. 截取从 2 ~ 5 位置 的字符串
print(num_str[2:6])
# 2. 截取从 2 ~ `末尾` 的字符串
print(num_str[2:])
# 3. 截取从 `开始` ~ 5 位置 的字符串
print(num_str[:6])
# 4. 截取完整的字符串
print(num_str[:])
# 5. 从开始位置,每隔一个字符截取字符串
print(num_str[::2])
# 6. 从索引 1 开始,每隔一个取一个
print(num_str[1::2])
# 倒序切片
# -1 表示倒数第一个字符
print(num_str[-1])
# 7. 截取从 2 ~ `末尾 - 1` 的字符串
print(num_str[2:-1])
# 8. 截取字符串末尾两个字符
print(num_str[-2:])
# 9. 字符串的逆序(面试题)
print(num_str[::-1])

4.4.5 公共方法和变量的高级应用

4.4.5.1 内置函数

Python 包含了以下内置函数:

函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 max(item) 返回容器中元素最大值 如果是字典,只针对 key 比较 min(item) 返回容器中元素最小值 如果是字典,只针对 key 比较 cmp(item1, item2) 比较两个值,-1 小于 / 0 相等 / 1 大于 Python 3.x 取消了 cmp 函数 注意:字符串 比较符合以下规则:"0" < "A" < "a"。

4.4.5.2 切片

  • 描述 Python 表达式 结果 支持的数据类型 切片 "0123456789"[::-2] "97531" 字符串、列表、元组 切片 使用 索引值 来限定范围,从一个大的 字符串 中 切出 小的 字符串

  • 列表 和 元组 都是 有序 的集合,都能够 通过索引值 获取到对应的数据

  • 字典 是一个 无序 的集合,是使用 键值对 保存数据

4.4.5.3 运算符

运算符 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 被称为 成员运算符

4.4.5.4 内置函数完整的 for 循环语法

  • 在 Python 中完整的 for 循环 的语法如下:

for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,循环结束后,会执行的代码

应用场景:

  • 在 迭代遍历 嵌套的数据类型时,例如 一个列表包含了多个字典

  • 需求:要判断 某一个字典中 是否存在 指定的 值

  • 如果 存在,提示并且退出循环

  • 如果 不存在,在 循环整体结束 后,希望 得到一个统一的提示

4.4.5.5 变量的引用

  • 变量 和 数据 都是保存在 内存 中的

  • 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的

在 Python 中:变量 和 数据 是分开存储的,数据 保存在内存中的一个位置,变量 中保存着数据在内存中的地址,就叫做 引用,使用 id() 函数可以查看变量中保存数据所在的 内存地址。

注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用

  • 变量 不再 对之前的数据引用

  • 变量 改为 对新赋值的数据引用

在 Python 中,变量的名字类似于 便签纸 贴在 数据 上:

  • 定义一个整数变量 a,并且赋值为 1

代码 图示 a = 1

5d4920296bd52c27a2e7ff3a8b925064.png

  • 将变量 a 赋值为 2

代码 图示 a = 2

a83dab0d7e31515bd2efc5c9efec6591.png

80f4ceb48fe7f31ee244fc801bc32d1f.png

  • 定义一个整数变量 b,并且将变量 a 的值赋值给 b

代码 图示 b = a

89b0cf9648fe9874ee5bde9456a9da03.png

在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的

def test(num):
print("-" * 50)
print("%d 在函数内的内存地址是 %x" % (num, id(num)))
result = 100
print("返回值 %d 在内存中的地址是 %x" % (result, id(result)))
print("-" * 50)
return result
a = 10
print("调用函数前 内存地址是 %x" % id(a))
r = test(a)
print("调用函数后 实参内存地址是 %x" % id(a))
print("调用函数后 返回值内存地址是 %x" % id(r))

ffa138b53e8044d328baf9f2349f1ff4.png

结果

4.4.5.6 可变和不可变类型

  • 不可变类型,内存中的数据不允许被修改:

  • 数字类型 int, bool, float, complex, long(2.x)

  • 字符串 str

  • 元组 tuple

  • 可变类型,内存中的数据可以被修改:

  • 列表 list

  • 字典 dict

注意:字典的 key 只能使用不可变类型的数据

注意

  1. 可变类型的数据变化,是通过 方法 来实现的

  • 如果给一个可变类型的变量,赋值了一个新的数据,引用会修改变量 不再 对之前的数据引用

  • 变量 改为 对新赋值的数据引用

哈希 (hash)

  • Python 中内置有一个名字叫做 hash(o) 的函数:接收一个 不可变类型 的数据作为 参数,返回 结果是一个 整数。

  • 哈希 是一种 算法,其作用就是提取数据的 特征码(指纹),相同的内容 得到 相同的结果,不同的内容 得到 不同的结果。

  • 在 Python 中,设置字典的 键值对 时,会首先对 key 进行 hash 已决定如何在内存中保存字典的数据,以方便 后续 对字典的操作:增、删、改、查:键值对的 key 必须是不可变类型数据,键值对的 value 可以是任意类型的数据。

4.4.5.7 局部变量和全局变量

  • 局部变量 是在 函数内部 定义的变量,只能在函数内部使用;函数执行结束后,函数内部的局部变量,会被系统回收;不同的函数,可以定义相同的名字的局部变量,但是 彼此之间 不会产生影响;局部变量一般临时 保存 函数内部需要使用的数据。

  • 全局变量 是在 函数外部定义 的变量(没有定义在某一个函数内),所有函数 内部 都可以使用这个变量。

提示:在其他的开发语言中,大多 不推荐使用全局变量 —— 可变范围太大,导致程序不好维护!

注意:函数执行时,需要处理变量时 会:

  1. 首先 查找 函数内部 是否存在 指定名称 的局部变量,如果有,直接使用

  2. 如果没有,查找 函数外部 是否存在 指定名称 的全局变量,如果有,直接使用

  3. 如果还没有,程序报错!

注意:函数不能直接修改全局变量的引用,如果要修改,必须要用global声明该变量是全局变量。

num = 10
def demo1():
print("demo1" + "-" * 50)
# global 关键字,告诉 Python 解释器 num 是一个全局变量
global num
# 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")

注意:为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前应该增加 g_ 或者 gl_ 的前缀。

5. 判断(分支)

5.1 if 语句语法

1、if 判断语句基本语法:

if 要判断的条件:
条件成立时,要做的事情
……

注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格

  • 在 Python 开发中,Tab 和空格不要混用!

2、如果需要在 不满足条件的时候,做某些事情,该如何做呢?

if 要判断的条件:
条件成立时,要做的事情
……
else:
条件不成立时,要做的事情
……
  • 在程序开发中,通常 在判断条件时,会需要同时判断多个条件,只有多个条件都满足,才能够执行后续代码,这个时候需要使用到 逻辑运算符。

  • Python 中的 逻辑运算符 包括:与 and/或 or/非 not 三种

条件1 and 条件2 :两个条件同时满足,返回 True
条件1 or 条件2:两个条件只要有一个满足,返回 True
not 条件:非,不是

3、如果希望 再增加一些条件,条件不同,需要执行的代码也不同 时,就可以使用 elif :

if 条件1:
条件1满足执行的代码
……
elif 条件2:
条件2满足时,执行的代码
……
elif 条件3:
条件3满足时,执行的代码
……
else:
以上条件都不满足时,执行的代码
……

注意

  • elif 和 else 都必须和 if 联合使用,而不能单独使用

  • 可以将 if、elif 和 else 以及各自缩进的代码,看成一个 完整的代码块

4、在开发中,使用 if 进行条件判断,如果希望 在条件成立的执行语句中 再 增加条件判断,就可以使用 if 的嵌套:

if 条件 1:
条件 1 满足执行的代码
……
if 条件 1 基础上的条件 2:
条件 2 满足时,执行的代码
……
# 条件 2 不满足的处理
else:
条件 2 不满足时,执行的代码
# 条件 1 不满足的处理
else:
条件1 不满足时,执行的代码
……

5.2 if语句的应用

5.2.1 随机数的处理

  • 在 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) # 该语句是错误的,下限必须小于上限

5.2.2 石头剪刀布

# 导入随机工具包
# 注意:在导入工具包的时候,应该将导入的语句,放在文件的顶部
# 因为,这样可以方便下方的代码,在任何需要的时候,使用工具包中的工具
import random
# 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)
player = int(input("请输入您要出的拳 石头(1)/剪刀(2)/布(3):"))
# 电脑 随机 出拳 —— 先假定电脑只会出石头,完成整体代码功能
computer = random.randint(1, 3)
print("玩家选择的拳头是 %d - 电脑出的拳是 %d" % (player, computer))
# 比较胜负
# 1 石头 胜 剪刀
# 2 剪刀 胜 布
# 3 布 胜 石头
# if (()
# or ()
# or ()):
if ((player == 1 and computer == 2)
or (player == 2 and computer == 3)
or (player == 3 and computer == 1)):
print("欧耶,电脑弱爆了!")
# 平局
elif player == computer:
print("真是心有灵犀啊,再来一盘")
# 其他的情况就是电脑获胜
else:
print("不服气,我们决战到天明!")

6. 循环

6.1 程序执行的三大流程

在程序开发中,一共有三种流程方式:

  • 顺序 —— 从上向下,顺序执行代码

  • 分支 —— 根据条件判断,决定执行代码的 分支

  • 循环 —— 让 特定代码 重复 执行

7a5357d3e9782f5d3fcb681340d0d69d.png

程序执行的三大流程

6.2 while 循环基本使用

while 语句基本语法:

初始条件设置 —— 通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件(计数器 + 1)

由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序将陷入死循环而无法终止!

计数器 +1 :可以通过赋值运算符简化代码的编写。

常见的计数方法有两种,可以分别称为:

  • 自然计数法(从 1 开始)—— 更符合人类的习惯

  • 程序计数法(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数

因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始

6.3 break 和 continue

break 和 continue 是专门在循环中使用的关键字

  • break :某一条件满足时,退出循环,不再执行后续的代码

  • continue :某一条件满足时,不执行后续的代码直接进入下一次循环

  • break 和 continue 只针对 当前所在循环 有效

6.4 while 循环嵌套

  • while 嵌套就是:while 里面还有 while,每一次循环中还要做完一个循环。

while 条件 1:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
while 条件 2:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件 2
处理条件 1

示例:

"""
打印 9 行小星星:
*
**
***
****
*****
******
*******
********
*********
"""
# 定义起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定义起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = "",表示输出结束后,不换行
# " " 可以在控制台输出一个制表符,协助在输出文本时对齐
print("%d * %d = %d" % (col, row, row * col), end=" ")
# 列数 + 1
col += 1
# 一行打印完成的换行
print("")
# 行数 + 1
row += 1

字符串中的转义字符

  • 在控制台输出一个 制表符,协助在输出文本时 垂直方向 保持对齐

  • 在控制台输出一个 换行符

制表符 的功能是在不使用表格的情况下在 垂直方向 按列对齐文本

转义字符 描述 \ 反斜杠符号 ' 单引号 " 双引号 换行 横向制表符 回车 7. 函数

7.1 函数的基本使用

所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用。在开发程序时,使用函数可以提高编写的效率以及代码的 重用,函数的使用包含两个步骤:

1. 定义函数 —— 封装 独立的功能

2. 调用函数 —— 享受 封装 的成果

  • 定义函数:

def 函数名():
函数封装的代码
……
  • 函数调用:通过 函数名() 即可完成对函数的调用。

PyCharm 的调试工具:

  • F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行

  • F7 Step Into 可以单步执行代码,如果是函数,会进入函数内部

  • 函数的文档注释

  • 在开发中,如果希望给函数添加注释,应该在 定义函数 的下方,使用 连续的三对引号,在 连续的三对引号 之间编写对函数的说明文字,在 函数调用 位置,使用快捷键 CTRL + Q 可以查看函数的说明信息。

注意:因为 函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留 两个空行

7.2 函数的参数

7.2.1 形参和实参

  • 在函数名的后面的小括号内部填写 参数,多个参数之间使用逗号 , 分隔。

  • 函数的参数,增加函数的 通用性,针对 相同的数据处理逻辑,能够 适应更多的数据**:

  • 形参:定义 函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用。

  • 实参:调用 函数时,小括号中的参数,是用来把数据传递到 函数内部 用的。

def sum_2_num(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum_2_num(50, 20)

7.2.2 可变和不可变参数

问题 1:在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量?—— 不会!

  • 无论传递的参数是 可变 还是 不可变只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量的引用,不会影响到 外部变量的引用

问题 2:如果传递的参数是 可变类型,在函数内部,使用 方法 修改了数据的内容,同样会影响到外部的数据,例如列表变量调用 += 本质上是在执行列表变量的 extend 方法。

7.2.2 缺省参数

定义函数时,可以给 某个参数 指定一个默认值,具有默认值的参数就叫做 缺省参数,* 调用函数时,如果没有传入 缺省参数 的值,则在函数内部使用定义函数时指定的 参数默认值,将常见的值设置为参数的缺省值,从而 简化函数的调用。例如:对列表排序的方法:

gl_num_list = [6, 3, 9]
# 默认就是升序排序,因为这种应用需求更多
gl_num_list.sort()
print(gl_num_list)
# 只有当需要降序排序时,才需要传递 `reverse` 参数
gl_num_list.sort(reverse=True)
print(gl_num_list)
  • 在参数后使用赋值语句,可以指定参数的缺省值

def print_info(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text))

提示

  1. 缺省参数,需要使用 最常见的值 作为默认值!

  2. 如果一个参数的值 不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递!

注意

  1. 必须保证 带有默认值的缺省参数 在参数列表末尾

  2. 在 调用函数时,如果有 多个参数,需要指定参数名,这样解释器才能够知道参数的对应关系!

7.2.3 多值参数

有时可能需要 一个函数 能够处理的参数 个数 是不确定的,这个时候,就可以使用 多值参数。

  • python 中有 两种 多值参数:

  • 参数名前增加 一个 * 可以接收 元组

  • 参数名前增加 两个 ** 可以接收 字典

  • 一般在给多值参数命名时,习惯使用以下两个名字

  • *args —— 存放 元组 参数,前面有一个 *

  • **kwargs —— 存放 字典 参数,前面有两个 **

def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
print("-"*20)
demo(1,(2,3,4,5),{"name":"小明", "age":18, "gender":True})
print("-"*20)
demo(1,(2,3,4,5), name="小明", age=18, gender=True)

803817e0bb3714f7daf2d22e38b873f7.png

结果

元组和字典的拆包

  • 在调用带有多值参数的函数时,如果希望:

  • 将一个 元组变量,直接传递给 args

  • 将一个 字典变量,直接传递给 kwargs

  • 就可以使用 拆包,简化参数的传递,拆包 的方式是:

  • 在 元组变量前,增加 一个 *

  • 在 字典变量前,增加 两个 *

def demo(*args, **kwargs):
print(args)
print(kwargs)
# 需要将一个元组变量/字典变量传递给函数对应的参数
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}
# 会把 num_tuple 和 xiaoming 作为元组传递个 args
# demo(gl_nums, gl_xiaoming)
demo(*gl_nums, **gl_xiaoming)

7.3 函数的返回值

  • 在函数中使用 return 关键字可以返回结果,调用函数一方,可以 使用变量 来 接收函数的返回结果。

注意:return 表示返回,后续的代码都不会被执行

def sum_2_num(num1, num2):
"""对两个数字的求和"""
return num1 + num2
# 调用函数,并使用 result 变量接收计算结果
result = sum_2_num(10, 20)
print("计算结果是 %d" % result)

e2a14c09514fb9bd7cd02a2a892be9d9.png

函数参数和返回值

技巧

  • 在 Python 中,可以 将一个元组 使用 赋值语句 同时赋值给 多个变量

  • 注意:变量的数量需要和元组中的元素数量保持一致

# Python 专有,利用元组交换两个变量的值
a, b = b, a

7.4 函数的嵌套调用

  • 一个函数里面 又调用 了 另外一个函数,这就是 函数嵌套调用。

def test1():

print("*" * 50)

print("test 1")

print("*" * 50)

def test2():

print("-" * 50)

print("test 2")

test1()

print("-" * 50)

test2()

提示:工作中针对需求的变化,应该冷静思考,不要轻易修改之前已经完成的,能够正常执行的函数!

7.5 函数的递归

函数调用自身的 编程技巧 称为递归

特点:一个函数 内部 调用自己

代码特点:

  1. 函数内部的 代码 是相同的,只是针对 参数 不同,处理的结果不同

  2. 当 参数满足一个条件 时,函数不再执行,通常被称为递归的出口,否则 会出现死循环!

案例 —— 计算数字累加:

需求:

  1. 定义一个函数 sum_numbers

  2. 能够接收一个 num 的整数参数

  3. 计算 1 + 2 + ... num 的结果

def sum_numbers(num):
if num == 1:
return 1
# 假设 sum_numbers 能够完成 num - 1 的累加
temp = sum_numbers(num - 1)
# 函数内部的核心算法就是 两个数字的相加
return num + temp
print(sum_numbers(2))

7.6 在模块中定义函数

模块是 Python 程序架构的一个核心概念

模块 就好比是 工具包,要想使用这个工具包中的工具,就需要 导入 import 这个模块, 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块,在模块中定义的 全局变量 、 函数都是模块能够提供给外界直接使用的工具。

  • 可以 在一个 Python 文件 中 定义 变量 或者 函数

  • 然后在 另外一个文件中 使用 import 导入这个模块

  • 导入之后,就可以使用 模块名.变量 / 模块名.函数 的方式,使用这个模块中定义的变量或者函数

模块可以让 曾经编写过的代码 方便的被 复用!

模块名也是一个标识符,如果在给 Python 文件起名时,以数字开头 是无法在 PyCharm 中通过导入这个模块的。

Pyc 文件

C 是 compiled 编译过 的意思。

  • 浏览程序目录会发现一个 __pycache__ 的目录。

  • 目录下会有一个 hm_10_分隔线模块.cpython-35.pyc 文件,cpython-35 表示 Python 解释器的版本。

  • 这个 pyc 文件是由 Python 解释器将 模块的源码 转换为 字节码。

Python 这样保存 字节码 是作为一种启动 速度的优化。

  • 什么是字节码?

  • Python 在解释源程序时是分成两个步骤的:

  1. 首先处理源代码,编译 生成一个二进制 字节码。

  2. 再对 字节码 进行处理,才会生成 CPU 能够识别的 机器码。

  • 有了模块的字节码文件之后,下一次运行程序时,如果在 上次保存字节码之后 没有修改过源代码,Python 将会加载 .pyc 文件并跳过编译这个步骤。

  • 当 Python 重编译时,它会自动检查源文件和字节码文件的时间戳。

  • 如果你又修改了源代码,下次程序运行时,字节码将自动重新创建。

8. 文件、异常、模块和包

8.1 文件

8.1.1 文件的概念

  • 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据

  • 长期存储设备包括:硬盘、U 盘、移动硬盘、光盘...

文件的作用:将数据长期保存下来,在需要的时候使用

文件的存储方式:在计算机中,文件是以 二进制 的方式保存在磁盘上的

文本文件:可以使用 文本编辑软件 查看,本质上还是二进制文件

二进制文件:保存的内容 不是给人直接阅读的,而是 提供给其他软件使用的,例如:图片文件、音频文件、视频文件等等,二进制文件不能使用 文本编辑软件 查看

8.1.2 文件的基本操作

f469d7cf66d3481506318a50d1928bba.png

6db8c3ab937856cb295cb0e54707653f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道了。针对你的问题,我可以为你提供一些关于 Python 虚拟环境和环境变量配置的基础知识。 Python 虚拟环境可以帮助你在同一个机器上管理多个 Python 项目的依赖和版本。虚拟环境可以隔离不同项目中的 Python 包,避免它们之间的冲突。在 Python 3.3 之后的版本中,Python 自带了 venv 模块,可以用来创建虚拟环境。 以下是在 Linux 或 Mac OS 上创建虚拟环境的步骤: 1. 打开终端,进入你的项目目录,创建一个新的虚拟环境。可以使用以下命令: ``` python3 -m venv env ``` 其中,env 是你要创建的虚拟环境的名称。这个命令会在当前目录下创建一个名为 env 的文件夹,并在其中创建虚拟环境。 2. 激活虚拟环境。可以使用以下命令: ``` source env/bin/activate ``` 3. 现在,你可以在虚拟环境中安装你的 Python 包了。例如,安装 Flask: ``` pip install Flask ``` 4. 在虚拟环境中退出时,可以使用以下命令: ``` deactivate ``` 现在,关于环境变量的配置,请按照以下步骤进行: 1. 打开终端,进入你的项目目录。 2. 编辑一个名为 .env 的文件,添加你要设置的环境变量。例如: ``` MY_VAR=hello ``` 3. 在你的 Python 代码中,可以使用以下方式获取环境变量的值: ```python import os my_var = os.environ.get('MY_VAR') print(my_var) # 输出 'hello' ``` 这样,你就可以在 Python 代码中使用环境变量了。 希望这些信息能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值