本篇中我们将开始一个新内容的学习:Python

        相比于C++那种强调性能与规范的开发模式,python则是一个强调开发效率的语言。作为解释形语言的一部分,尽管它并没有C++那样极致的性能,但是作为一门胶水语言,python具有很低的学习成本和很高的开发效率,在web、脚本、数据分析、AI领域广泛使用。

        而下图所示的就是最新的2025年8月常用编程语言排行榜。

        接下来就让我们一起来学习这门编程语言吧!。

        相关代码已经上传至作者的个人gitee:楼田莉子/Python 学习喜欢请点个赞谢谢。

python的介绍

        python的来源

        吉多·范罗苏姆(Guido van Rossum) 是一个荷兰程序员(人称龟叔, 名字前三个字母是 Gui)
。龟叔在 1989 年圣诞节的时候(当时 33 岁), 因为在家里待着无聊, 为了打发时间, 开始了 Python 的开发.第一个正式版本发布于 1991 年.

        python的应用

  1. 数据科学与人工智能(AI)

    • 为什么? 拥有无比强大的生态库(NumPy, Pandas, Matplotlib)。在机器学习和深度学习领域,Scikit-learn, TensorFlow, PyTorch 等框架几乎成为了行业标准。

    • 做什么? 数据分析、预测模型、图像识别、自然语言处理(ChatGPT就大量使用Python)、推荐系统等。

  2. Web开发

    • 为什么? 拥有Django(功能全面,好比“开箱即用的航母”)和Flask(轻量灵活,好比“灵活的乐高积木”)等优秀框架。

    • 做什么? 快速构建从个人博客到大型电商平台的各种网站和后端API服务。

  3. 自动化与运维

    • 为什么? 语法简单,编写速度快,被誉为“胶水语言”。

    • 做什么? 写一个简单的脚本,就能自动处理Excel表格、批量重命名文件、自动发送邮件、管理服务器等,将人们从重复性劳动中解放出来。

  4. 网络爬虫

    • 为什么? 库生态丰富,Requests 用于获取网页,BeautifulSoup 和 Scrapy 用于解析数据,非常简单高效。

    • 做什么? 自动化地从网站上收集、分析和存储所需的数据。

  5. 教育与科学计算

    • 为什么? 语法接近自然英语,可读性强,非常适合编程初学者建立逻辑思维。科学家们也常用它来进行模拟和计算。

  6. 其他领域

    • 游戏开发(Pygame)、图形界面(GUI)开发(Tkinter, PyQt)、嵌入式开发(MicroPython)等,也能看到Python的身影。

        python的优缺点

        优点(为什么选择Python?)
  • 👍 语法简单,易学易读: 代码就像在读英语,强制缩进的规则使得代码非常整洁规范,对初学者极其友好。

  • 👍 功能强大,生态丰富: 正如上文所说,它有海量的第三方库(PyPI),你想实现的绝大多数功能,可能都已经有人为你写好了库,“人生苦短,我用Python”正是由此而来。

  • 👍 解释型语言,平台无关: 写好的代码可以在Windows、macOS、Linux等系统上直接运行,无需修改(前提是安装了解释器)。

        缺点(Python的痛点)
  • 👎 运行速度相对较慢: 作为解释型语言,它的执行效率通常低于C++、Java等编译型语言。但这对于大多数现代应用(如网络服务、数据分析)来说并非核心瓶颈,且可以通过使用C库或JIT(即时编译)等技术来优化。

  • 👎 全局解释器锁(GIL): 这限制了Python在多线程环境下的CPU性能,使得多线程并不能充分利用多核CPU。对于CPU密集型的多任务,通常需要通过多进程来解决。

  • 👎 不适合移动端和游戏开发: 在移动应用(iOS/Android)和大型3D游戏开发领域,Python并非主流选择。

搭建python环境

        要想能够进行 Python 开发, 就需要搭建好 Python 的环境.需要安装的环境主要是两个部分:

        运行环境: Python

        开发环境: PyCharm

        安装python

        官网链接:欢迎来到 Python.org

        其中我们会发现有稳定版本和预先版本。推荐稳定版本

        注意: Python 的版本在持续迭代更新中. 同学们看到的版本不一定和我这里完全一致, 但是基本不影响学习使用.

        关于 Python 版本的补充

        现在主流使用的 Python 版本是 Python 3 系列. 但是同学们以后在公司中, 接触到一些比较老的项目, 可能还在使用 Python 2 .

        3 系列 和 2 系列 之间的语法还是存在不小差别的. 我们学习的内容主要是依据 Python 3 系列为主

        下载好后双击安装即可。

        python安装好后可以点击.exe就可以在控制台进行书写

        直接输入

print("hello world");

        可以看到如下效果

        不过这样是不适合做项目的,因此我们需要python的编辑器:pycharm

        安装pycharm

        虽然通过交互式解释器可以执行 Python 代码了, 但是代码写起来并不方便. 就需要更专业的开发工具来编写 Python 代码.

        目前业界常用的 Python 开发工具, 主要有下列选项:

        其中最主流的开发工具就是 PyCharm 和 VS Code 了. 

        两者之间的区别在此

特性 PyCharm (专业版) VSCode
定位 专业的Python IDE 轻量级代码编辑器(通过插件强化)
开箱即用 ⭐⭐⭐⭐⭐(极致) ⭐⭐(需要配置)
资源占用 高(重型) 低(轻量)
智能补全/导航 极强(深度理解Python) 很强(依赖Pylance等插件)
多语言支持 良好(但核心是Python) 极好(一站式解决所有语言)
定制化程度 极高(一切皆可配置)
价格 社区版免费,专业版付费 完全免费

        本期我们来介绍pycharm的安装

        pycharm官网:PyCharm: The only Python IDE you need

        下载安装后双击安装即可

        运行hello world 

        基本配置

        (1)字体大小设置

        PyCharm 默认的字体比较小, 看起来很费眼睛.

        可以设置大一点.选择 File -> Settings

                

        找到 Editor -> Font, 把字体 Size 和 Line height 都适当调整.

        Size 表示字体大小. 数字越大文字越大.

        Line height 表示行高, 数字越大则两行文字之间的间隔就越大.

python的基础语法

        常量和表达式

print(1+2-3)
print(1+2*3)
print(1+2/3)

        结果为:

        形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为 表达式的返回值

其中 1 , 2 , 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符.

        在之前学习C++的时候我们直到int类型进行触发的时候默认是把小数位取出,比如C/C++中2/3结果为0,但是在python中为0.6666665.这点要注意

        变量

        有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用到 变量.
        变量可以视为是一块能够容纳数据的空间. 这个空间往往对应到 "内存" 这样的硬件设备上.

        

        1、定义变量

int a=10

        创建变量的语句非常简单, 其中

        a 为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分.

        = 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中.

        注意: 变量的名字要遵守一定规则.

        硬性规则(务必遵守)

        变量名由数字字母下划线构成.数字不能开头.

        变量名不能和 "关键字" 重复.

        变量名大小写敏感. num 和 Num 是两个不同的变量名.

        软性规则(建议遵守)

        变量名使用有描述性的单词来表示, 尽量表达出变量的作用
        一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰

        变量名含多个单词的时候建议使用驼峰命名法。

#读取变量的值
a = 10
print(a)
#修改变量的值
a = 20
print(a)

        注意: 在 Python 中, 修改变量也是使用 = 运算, 看起来和定义变量没有明显区别.

        2、变量的类型

        变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 "类型"这样的概念
        注意: 和 C++ / Java 等语言不同, Python 变量的类型不需要显式指定, 而是在赋值的时候确定的.

        
        整数
a = 10
print(type(a))

      结果:

  

        type()是一个内置函数,可以使用 type 来查看一个变量的类型.
        注意: 和 C++ / Java 等语言不同, Python 的 int 类型变量, 表示的数据范围是没有上限的. 只要内存足够大,理论上就可以表示无限大小的数据.

        浮点数
a = 0.5
print(type(a))

        结果为:


        注意: 和 C++ / Java 等语言不同, Python 的小数只有 float 一种类型, 没有 double 类型. 但是实际上Python 的 float 就相当于 C++ / Java 的 double, 表示双精度浮点数.

        字符串
a = 'hello'
print(type(a))

        使用 ' ' 或者 " " 引起来的, 称为 字符串. 可以用来表示文本.
        结果为:

        

        注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别. 'hello' 和 "hello" 是完全等价的.

        可以使用 len 函数来获取字符串的长度.

#求字符串长度
a = 'hello'
print(len(a))

        结果为:

        

        可以发现,python中字符串是没有'\0'的

        可以使用 + 针对两个字符串进行拼接

#字符串拼接
a = 'hello'
b = 'world'
print(a + b)

        此处是两个字符串相加. 不能拿字符串和整数/浮点数相加.

        字符串作为开发中最常用到的数据类型, 支持的操作方式也是非常丰富的

        布尔类型

        布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假).

        PS: 布尔类型也是数学上的一个概念. 我们初中就学过一个概念叫做 "命题" , 进一步的就可以判定命题的真假.

a = True
print(type(a))
b = False
print(type(b))

        结果为:

        

        3、容器类型

        python中也存在类似于C++的容器类型

C++ STL 容器 Python 等效类型 核心功能与特点
std::vector list 动态数组 。支持索引访问、追加(append)、插入(insert)、弹出(pop)。与vector不同,Python列表可存放不同类型对象
std::list collections.deque 双端队列。适合在队列两端进行高效的插入和删除(时间复杂度O(1)),但在中间位置的操作效率相对较低。
std::deque collections.deque 双端队列。同样适用于在队列两端进行高效的插入和删除。
std::stack list (利用方法模拟) 。通常使用列表的append()(压栈)和pop()(弹栈)来模拟后进先出(LIFO)的栈行为。
std::queue collections.deque 队列。使用dequeappend()(入队)和popleft()(出队)来模拟先进先出(FIFO)的队列行为。
std::priority_queue heapq (模块) 优先队列)。heapq是一个基于列表的二叉堆模块,提供最小堆实现。使用heapq.heappush()heapq.heappop()等方法操作。
std::set set 无序集合 。存储唯一不可变的元素,支持交集(&)、并集(|)、差集(-)等数学运算 。
std::multiset collections.Counter 多重集合(或计数器)。Counterdict的子类,用于计数可哈希对象。它自动处理元素的计数,非常适合需要统计元素频率的场景。
std::map dict 字典关联数组)。存储键值对(key-value pairs),键必须是可哈希的类型(通常为不可变类型)。
std::unordered_map dict 字典。在Python中,普通的dict自Python 3.7起就保持插入顺序 ,但其本质是通过哈希表实现,因此查找、插入、删除操作的平均时间复杂度为O(1)。
std::unordered_set set 无序集合。如前所述,Python的set是基于哈希表实现的无序集合,用于存储唯一元素 。

        为什么要有这么多类型?

        (1) 类型决定了数据在内存中占据多大空间.

        例如 float 类型在内存中占据 8 个字节.

        PS: 计算机里面使用二进制来表示数据. 也就是每个位只能表示 0 或者 1.

        1 个二进制位, 就称为是一个 "比特", 8 个二进制位, 就称为一个 "字节" (Byte)

        一个 float 变量在内存中占据 8 个字节空间, 也就是 64 个二进制位.

        我的电脑有 16GB 的内存空间, 也就是一共有 1024 * 1024 * 1024 * 8 这么多的二进制位.

        (2) 类型其实约定了能对这个变量做什么样的操作.

        例如 int / float 类型的变量, 可以进行 + - * / 等操作

        而 str 类型的变量, 只能进行 + (并且行为是字符串拼接), 不能进行 - * / , 但是还能使用 len 等其他操作。

        总结: 类型系统其实是在对变量进行 "归类". 相同类型的变量(数据) 往往具有类似的特性和使用规则.

        动态类型特性

        在 Python 中, 一个变量是什么类型, 是可以在 "程序运行" 过程中发生变化的. 这个特性称为 "动态类型"

a = 10
print(type(a))
a = 'hello'
print(type(a))

        结果为:

        我们观察到,在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str.

        C++/Java 这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 "静态类型".

        动态类型特性是一把双刃剑.

        对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型).

        对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解).

        注释

        注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑.

        PS: 写代码是一件比较烧脑的事情, 读代码同样也非常烧脑. 相比于一板一眼的代码, 一些口语化的描述能更好的帮助程序猿理解程序

        注释的语法

        (1) 注释行

使用 # 开头的行都是注释

# 这是一行注释.

        (2) 文档字符串

        使用三引号引起来的称为 "文档字符串", 也可以视为是一种注释.

        可以包含多行内容,

        一般放在 文件/函数/类 的开头. """ 或者 ''' 均可 (等价).

"""
这是文档字符串
这是文档字符串
"""

        输入输出

        程序需要和用户进行交互.

        用户把信息传递给程序的过程, 称为 "输入".程序把结果展示给用户的过程, 称为 "输出".

        输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串.

        输入输出的最常见方法是图形化界面. 如我们平时用到的 QQ, 浏览器, steam 等, 都不需要用户输入命令,而只是通过鼠标点击窗口点击按钮的方式来操作.

        控制台输出        

        python中我们用print进行输出

print('hello')

        实际运用中我们通常需要多种类型输出

num = 10
print(f'num = {num}')

        注意:

        使用 f 作为前缀的字符串, 称为 f-string

        里面可以使用 { } 来内嵌一个其他的变量/表达式.

        控制台输入

        python中可以使用input进行控制台输入

num = 0
num = input('请输入一个整数: ')
print(f'你输入的整数是 {num}')

        

        注意:

        input 的参数相当于一个 "提示信息", 也可以没有.

        input 的返回值就是用户输入的内容. 是字符串类型.

a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
print(f'a + b = {a + b}')

        

        此处为字符串拼接,如果要计算要先转换类型

a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
a = int(a)
b = int(b)
print(f'a + b = {a + b}')

        

        运算符

        算术运算符

运算符 名称 功能描述 示例 结果
+ 加法 对两个操作数进行相加 5 + 3 8
- 减法 从左操作数减去右操作数 10 - 4 6
* 乘法 将两个操作数相乘 7 * 6 42
/ 除法 左操作数除以右操作数,返回浮点数 15 / 4 3.75
// 整除 左操作数除以右操作数,返回整数部分 15 // 4 3
% 取模 左操作数除以右操作数,返回余数 15 % 4 3
** 幂运算 左操作数的右操作数次幂 2 ** 3 8
+ (一元) 正号 保持操作数的符号不变 +5 5
- (一元) 负号 改变操作数的符号 -5 -5

        注意1: / 中不能用 0 作为除数. 否则会 抛出异常

        异常 是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 "意外情况", 导致程序不能继续往下执行了.

        注意2: ** 是求乘方. 不光能算整数次方, 还能算小数次方

print(4 ** 2)    #16
print(4 ** 0.5)    #2


        注意3: // 是取整除法(也叫地板除). 整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整. 不是四舍五入

print(7 // 2) #3
print(-7 // 2)#-4

        关系运算符

运算符 名称 功能描述 示例 结果
== 等于 检查两个操作数的值是否相等 5 == 5 True
!= 不等于 检查两个操作数的值是否不相等 5 != 3 True
> 大于 检查左操作数是否大于右操作数 5 > 3 True
< 小于 检查左操作数是否小于右操作数 5 < 3 False
>= 大于等于 检查左操作数是否大于或等于右操作数 5 >= 5 True
<= 小于等于 检查左操作数是否小于或等于右操作数 5 <= 3 False
is 对象标识相等 检查两个操作数是否引用同一个对象 a is b 取决于对象标识
is not 对象标识不等 检查两个操作数是否引用不同对象 a is not b 取决于对象标识

        (1) 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False
        (2) 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较.

a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

        结果为:

        

        (3) 对于浮点数来说, 不要使用 == 判定相等.

print(0.1 + 0.2 == 0.3)

        结果为:

        
        注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差

print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

        

       正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围

a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.000001)

        实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可

        逻辑运算符

运算符 名称 功能描述 示例 结果 计算规则
and 逻辑与 如果两个操作数都为真,则结果为真 True and False False 返回第一个假值或最后一个真值
or 逻辑或 如果任一操作数为真,则结果为真 True or False True 返回第一个真值或最后一个假值
not 逻辑非 反转操作数的逻辑状态 not True False 返回操作数的相反布尔值

        特殊写法

        a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同

        关于短路求值

        和其他编程语言类似, Python 也存在短路求值的规则.

        对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行.对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行.

print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)

        结果为:

        赋值运算符

运算符 名称 功能描述 示例 等价于
= 简单赋值 将右操作数的值赋给左操作数 x = 5 x = 5
+= 加法赋值 将右操作数加到左操作数 x += 3 x = x + 3
-= 减法赋值 从左操作数减去右操作数 x -= 3 x = x - 3
*= 乘法赋值 将左操作数乘以右操作数 x *= 3 x = x * 3
/= 除法赋值 将左操作数除以右操作数 x /= 3 x = x / 3
//= 整除赋值 将左操作数整除右操作数 x //= 3 x = x // 3
%= 取模赋值 将左操作数对右操作数取模 x %= 3 x = x % 3
**= 幂赋值 将左操作数的右操作数次幂 x **= 3 x = x ** 3
&= 按位与赋值 将左操作数与右操作数按位与 x &= 3 x = x & 3
|= 按位或赋值 将左操作数与右操作数按位或 x |= 3 x = x | 3
^= 按位异或赋值 将左操作数与右操作数按位异或 x ^= 3 x = x ^ 3
<<= 左移位赋值 将左操作数左移右操作数指定的位数 x <<= 2 x = x << 2
>>= 右移位赋值 将左操作数右移右操作数指定的位数 x >>= 2 x = x >> 2

        注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符. Python 中则不支持这种运算. 如果需要使用, 则直接使用 += 1 或者 -= 1

        ++ -- 最大的问题就是容易分不清前置和后置的区别. 这一点 Python 语法在设计的时候就进行

了规避, 避免出现这种不直观, 并且容易混淆的语法.

科普:字符串比较大小是按照“字典序”比的

        什么是“字典序”?

字典序(Lexicographical Order),又称词典序字母序,是一种基于字符在特定字符集(如ASCII、Unicode)中出现的先后顺序来比较字符串大小的方法。

它的核心规则可以概括为:从左到右,逐个字符比较,直到分出大小,或直到一个字符串结束。   

        字典序的详细比较规则

我们可以将比较过程分解为以下几步,这个表格清晰地展示了整个决策流程:

比较步骤 规则描述 示例:比较 "apple" 和 "banana"
1. 逐字符比较 从两个字符串的第一个字符开始,逐个比较对应位置上的字符。 比较第1位:'a' vs 'b'
2. 决定大小 如果在某个位置,两个字符不同,则根据这两个字符的编码值(如ASCII码)大小决定整个字符串的大小。此位置之后的所有字符不再重要。 'a' (97) < 'b' (98),所以 "apple" < "banana"
3. 处理前缀 如果比较完所有对应字符都相同,但一个字符串比另一个更短,则较短的字符串被视为更小。 比较 "cat" 和 "catalog":前3字符相同,但 "cat" 更短,所以 "cat" < "catalog"
4. 完全相等 只有当两个字符串长度相同,且每个对应位置的字符都完全一样时,两个字符串才相等。 "hello" == "hello"

核心要点与常见误区

  1. 基于编码,而非语言
    比较的依据是字符在计算机中的编码值(如ASCII码、Unicode码点),而不是我们口语中的字母表顺序。

    • 数字 < 大写字母 < 小写字母

      • 例如:'9' (57) < 'A' (65) < 'Z' (90) < 'a' (97) < 'z' (122)

      • 所以:"999" < "ABC" < "abc"

  2. 大小写敏感
    由于大写字母和小写字母的编码值不同,所以字典序是区分大小写的。

    • "A" (65) < "a" (97),所以 "Apple" < "apple"

  3. 长度不是第一优先级
    很多人误以为更长的字符串就更大,这是不对的。只有在前面所有字符都相同的情况下,长度才起作用。

    • "z" (122) > "aa" (97, 97) // 因为第一个字符 'z' > 'a',直接得出结果,不再看长度。

        本期python的内容到这里就结束啦,感谢各位的观看,喜欢请点个赞谢谢

封面图自取:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐