【Python】第二弹---深入理解编程基础:从常量、变量到注释的全面解析
✨个人主页: 熬夜学编程的小林
💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【MySQL】【Python】
目录
1、常量和表达式
2、变量和类型
2.1、变量是什么
2.2、变量的语法
2.3、变量的类型
2.4、动态类型特性
3、注释
3.1、注释是什么
3.2、注释的语法
3.3、注释的规范
1、常量和表达式
我们可以把 Python 当成一个计算器, 来进行一些算术运算.
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
注意:
- print 是一个 Python 内置的 函数, 这个稍后详细介绍.
- 可以使用 + - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减.
- 运算符和数字之间, 可以没有空格, 也可以有多个空格. 但是一般习惯上写一个空格(比较美观).
PS: 美观是否重要?
形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为 表达式的返回值
其中 1 , 2 , 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符.
注意: 熟悉 C / Java 的同学可能认为, 2 / 3 结果为 0 (小数部分被截断). 但是在 Python 中得到的结果则是一个小数. 更符合日常使用的直觉.
示例
- 给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的平均数.
print( (67.5 + 89.0 + 12.9 + 32.2) / 4 )
整数除以整数的结果是我们数学中的小数。
2、变量和类型
2.1、变量是什么
有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用到 变量.
示例
- 给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的方差.
PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)
在这个代码中, 就需要先计算这四个数字的平均值, 然后再计算方差. 这就需要把计算的平均值使用 变量保存起来.
# 平均数
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
# 每一项减去平均值,并平方 a ** b <=>a的b次方
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg)** 2
# 前面的值除以
result = total / 3
print(result)
注意:
- avg, total, result 均为变量.
- ** 在 Python 中表示乘方运算. ** 2 即为求平方.
就像计算器中的 M 键功能类似, 通过变量就可以保存计算过程中的中间结果.
只不过, 计算器一般只能保存一个数据, 而在 Python 代码中, 可以创建任意多的变量, 来随心所欲的保存很多很多的数据.
变量可以视为是一块能够容纳数据的空间. 这个空间往往对应到 "内存" 这样的硬件设备上.
PS: 我们可以把内存想像成是一个宿舍楼, 这个宿舍楼上有很多的房间. 每个房间都可以存放数据.
衡量内存的一个重要指标就是内存空间的大小, 比如我的电脑内存是 16GB. 这个数字越大, 意味着
内存的存储空间就越大, 能够存放的数据(变量) 就越多.
2.2、变量的语法
(1) 定义变量
a = 10
创建变量的语句非常简单, 其中
- a 为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分.
- = 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中.
注意: 变量的名字要遵守一定规则
[硬性规则(务必遵守)].
- 变量名由数字字母下划线构成.
- 数字不能开头.
- 变量名不能和 "关键字" 重复.
- 变量名大小写敏感. num 和 Num 是两个不同的变量名.
软性规则(建议遵守)
- 变量名使用有描述性的单词来表示, 尽量表达出变量的作用.
- 一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰.
- 当变量名包含多个单词的时候, 建议使用 "驼峰命名法". 形如 totalCount , personInfo 这种, 除了首个单词外, 剩余单词首字母大写.
数学上, 变量通常使用 x, y, z 这种简单的英文字母或者拉丁字母表示. 但是在编程中不建议这样使
用.
原因是编程中, 一个程序里通常会同时创建出很多个变量. 如果只是使用单个字母表示, 在变量多了的时候, 就很难记住哪个变量是干啥的, 从而给维护程序带来了一定的困难. 因此我们更建议使用带有明确描述性的名字, 来表示变量的用途.
(2) 使用变量
- 读取变量的值
a = 10
print(a)
使用print()函数直接读取变量的值。
- 修改变量的值
a = 20 # 修改变量的值
print(a) # 读取变量的值
注意: 在 Python 中, 修改变量也是使用 = 运算, 看起来和定义变量没有明显区别.
- 当然, 也可以用一个变量的值赋给另外一个变量.
# 创建变量
a = 10
b = 20# 使用变量修改a的值
a = b
print(a)
print(b)
经过变量修改值之后,a,b均为20.
2.3、变量的类型
变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 "类型"这样的概念.
注意: 和 C++ / Java 等语言不同, Python 变量的类型不需要显式指定, 而是在赋值的时候确定的.
(1) 整数
a = 10
print(type(a)) # 打印变量类型
PS: type 和 print 类似, 也是 python 内置的函数. 可以使用 type 来查看一个变量的类型.
注意: 和 C++ / Java 等语言不同, Python 的 int 类型变量, 表示的数据范围是没有上限的. 只要内存足够大, 理论上就可以表示无限大小的数据.
(2) 浮点数(小数)
a = 0.5
print(type(a))
注意: 和 C++ / Java 等语言不同, Python 的小数只有 float 一种类型, 没有 double 类型. 但是实际上Python 的 float 就相当于 C++ / Java 的 double, 表示双精度浮点数.
PS: 关于单精度浮点数和双精度浮点数的问题, 我们此处不做过多讨论. 大家只要知道, 相比于单精度浮点数, 双精度浮点数占用的内存空间更多, 同时表示的数据精度更高即可(大概精确到小数点后15 位).
(3) 字符串
a = 'hello'
print(type(a))
使用 ' ' 或者 " " 引起来的, 称为 字符串. 可以用来表示文本.
注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别. 'hello' 和 "hello" 是
完全等价的.
- 可以使用 len 函数来获取字符串的长度.
a = 'hello'
print(len(a)) # 计算a字符串长度
- 可以使用 + 针对两个字符串进行拼接.
a = 'hello'
b = 'world'
print(a + b) # 拼接两个字符串
此处是两个字符串相加. 不能拿字符串和整数/浮点数相加.
字符串作为开发中最常用到的数据类型, 支持的操作方式也是非常丰富的. 此处暂时不详细展开.
(4) 布尔
布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假).
PS: 布尔类型也是数学上的一个概念. 我们初中就学过一个概念叫做 "命题" , 进一步的就可以判定
命题的真假.
例如:
- 汤老湿真帅! (真命题)
- 汤老湿是个妹子 (假命题)
a = True
print(type(a)) # 打印变量的类型
b = False
print(type(b))
布尔类型在咱们后续进行逻辑判断的时候, 是非常有用的.
(5) 其他
除了上述类型之外, Python 中还有 list, tuple, dict, 自定义类型 等等. 我们后续再介绍.
为什么要有这么多类型?
(1) 类型决定了数据在内存中占据多大空间.
例如 float 类型在内存中占据 8 个字节.
- PS: 计算机里面使用二进制来表示数据. 也就是每个位只能表示 0 或者 1.
- 1 个二进制位, 就称为是一个 "比特", 8 个二进制位, 就称为一个 "字节" (Byte)
- 一个 float 变量在内存中占据 8 个字节空间, 也就是 64 个二进制位.
- 我的电脑有 16GB 的内存空间, 也就是一共有 1024 * 1024 * 1024 * 8 这么多的二进制位.、
(2) 类型其实约定了能对这个变量做什么样的操作.
例如 int / float 类型的变量, 可以进行 + - * / 等操作
而 str 类型的变量, 只能进行 + (并且行为是字符串拼接), 不能进行 - * / , 但是还能使用 len 等其他操作.
总结:
类型系统其实是在对变量进行 "归类". 相同类型的变量(数据) 往往具有类似的特性和使用规则.
2.4、动态类型特性
在 Python 中, 一个变量是什么类型, 是可以在 "程序运行" 过程中发生变化的. 这个特性称为 "动态类型" .
a = 10 # int类型
print(type(a))
a = 'hello' # str类型
print(type(a))
在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str.
- C++/Java 这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 "静态类型".
动态类型特性是一把双刃剑.
- 对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型).
- 对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解).
3、注释
3.1、注释是什么
注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑.
PS: 写代码是一件比较烧脑的事情, 读代码同样也非常烧脑. 相比于一板一眼的代码, 一些口语化的
描述能更好的帮助程序猿理解程序.
# 计算 4 个数字 67.5, 89.0, 12.9, 32.2 的方差
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg)
** 2
result = total / 3
print(result)
形如上述代码, 如果没有注释, 直接阅读, 是不容易 get 到代码的含义是计算方差. 但是通过加了一行注释解释一下, 就让人一目了然了.
- PS: 代码的第一目标是容易理解, 第二目标才是执行正确.
- 写注释不光是为了方便别人来理解, 也是方便三个月之后的自己理解.
一个反例: 早些年医生的手写处方
3.2、注释的语法
Python 中有两种风格的注释.
(1) 注释行
使用 # 开头的行都是注释.
# 这是一行注释.
(2) 文档字符串
使用三引号引起来的称为 "文档字符串", 也可以视为是一种注释.
- 可以包含多行内容,
- 一般放在 文件/函数/类 的开头.
- """ 或者 ''' 均可 (等价).
"""
这是文档字符串
这是文档字符串
"""
3.3、注释的规范
- 1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新.
- 2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论.
- 3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论.
- 4. 积极向上: 注释中不要包含负能量(例如 领导 SB 等).
相关文章:

【Python】第二弹---深入理解编程基础:从常量、变量到注释的全面解析
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、常量和表达式 2、变量和类型 2.1、变量是什么 2.2、变量的语法 2.3、变量的类型 2.4、动态类型特…...

[BrainShadow-V1] VR头戴设备统计报告
Brain-Shadow-V1 EventVR headsetsReported byXiao enDate2025/01/15Version1.0 HTC Vive Pro 2 Pro HTC Vive Pro 2 是一款高端虚拟现实头显,配备双 2.5K 显示屏,组合分辨率达到 48962448,提供 120 的视场角和 120Hz 的刷新率。该设备支持…...

跨境电商使用云手机用来做什么呢?
随着跨境电商的发展,越来越多的卖家开始尝试使用云手机来协助他们的业务,这是因为云手机具有许多优势。那么,具体来说,跨境电商使用云手机可以做哪些事情呢? (一)实现多账号登录和管理 跨境电商…...

DAY23 使用具有通用性的队列
1.初始化数组 //Initialize arrays.int tempLength getNumNodes();valuesArray new char[tempLength];indicesArray new int[tempLength];int i 0;2.初始化队列 创建了一个名为tempQueue的CircleObjectQueue对象,即一个循环对象队列。 将当前对象(即…...

汽车网络信息安全-ISO/SAE 21434解析(上)
目录 概述 第四章-概述 1. 研究对象和范围 2. 风险管理 第五章-组织级网络安全管理 1. 网络安全治理(cybersecurity governance) 2. 网络安全文化(cybersecurity culture) 3. 信息共享(Information Sharing) 4. 管理体系…...
通用查询类接口开发的另类思路
文章目录 一、需求概述二、开发方式1、传统开发方式2、将接口视为资源文件1.)springmvc工程2.)springboot工程3.)nginx代理 三、接口数据如何更新1、原始数据文件生成接口数据1.)定义启动类2.)启动监听3.)文…...
uc/os-II 原理及应用(八) 系统裁减以及移植到51单片机-下
现在说明几个重要的点, OSStartHighRdy 的作用就是把任务栈复制到系统栈上面,再利用RET的时候会从系统栈上到一个地址放到PC寄存器上来实现任务运行。OSCtxSw是任务切换,把系统栈全部备份到当前任务栈映射上,然后改OSTCBCur,调用…...
职场沟通与行为
职场沟通与行为 引言 在职场上,你是否曾遇到过困惑的沟通?是否对同事的行为有过疑虑?这不仅是个别现象,而是我们这个时代工作文化中的普遍问题。许多职场的摩擦,来自沟通不畅或是行为不当。那么,如何才能…...

【tailscale 和 ssh】当服务器建立好节点,但通过客户端无法通过 ssh 连接
背景 当服务器建立好节点,一切显示正常但通过客户端无法通过 vs code 中的 ssh 连接到服务器 问题解决 因为服务器是重装过的,所以忘记在服务器上下载 ssh 了。。。安装完成并启动 SSH 服务后便可正常连接! sudo apt update sudo apt in…...

Spark 之 Aggregate
Aggregate 参考链接: https://github.com/PZXWHU/SparkSQL-Kernel-Profiling完整的聚合查询的关键字包括 group by、 cube、 grouping sets 和 rollup 4 种 。 分组语句 group by 后面可以是一个或多个分组表达式( groupingExpressions )。 聚合查询还支持 OLAP 场景下的多…...

【JSqlParser】Java使用JSqlParser解析SQL语句总结
简述 Java解析SQL语句有很多工具都可以做到,比如Mybatis、Druid、目前用来用去最全面的仍然是Jsqlparser,它是一个Github上的开源项目,JSqlParser是一个用于解析SQL语句的Java库,它可以帮助开发者分析和操作SQL语句的结构。无论是…...
Linux下的dev,sys和proc(TODO)
(TODO) 还有一个sysfs 在 Linux 系统中,/dev、/sys 和 /proc 是三个特殊的虚拟文件系统目录,它们各自有特定的用途,主要用于与设备和内核交互。以下是它们的详细区别和功能说明: 1. /dev(Devi…...

【Unity3D】利用Hinge Joint 2D组件制作绳索效果
目录 一、动态绳索 (可移动根节点) 二、静态绳索 三、利用Skinning Editor(Unity2022.3.15f1正常使用) 四、注意事项 一、动态绳索 (可移动根节点) 动态绳索 DynamicRope空物体 Anchor和whitecircle是相同位置的物体ÿ…...

Springer Nature——Applied Intelligence 投稿指南
投稿系统:Editorial Manager (Manuscript and Peer Review) : 使用Editorial Manager 投稿系统的期刊列表:期刊列表 期刊主页:Spring Nature 主页 投稿主页:Spring Nature Submit SystemSubmission Guidelines: Official Submissi…...

数据结构、数据类型、数字编码、字符编码:保姆级图文详解
文章目录 前言1、数据结构分类1.1、逻辑结构:线性与非线性1.2、物理结构:连续与分散1.3、数据结构的实现方式1.4、数据结构的选择依据 2、基本数据类型2.1、定义与分类2.2、存储形式 3、数字编码3.1、原码、反码与补码3.2、浮点数编码3.3、整数与浮点数区…...

DM适配连接kettle迁移工具(资源库+数据源配置)
适配改造介绍及说明 本次修改基于8.2.0.0版本调整,在该源码基础上进行DM的适配,已支持DM为资源库的配置以及相关数据迁移。kettle资源库是Kettle ETL工具内置的一个资源库。配置好的数据库可以直接缓存到资源库当中;创建、编辑好的转换/作业…...

WINFORM - DevExpress -> alertControl1提示信息框
第一个按钮为常规按钮, 单击触发 ButtonClick 事件. 第二个按钮有选中和未选中状态. 单击触发 ButtonDownChanged 事件。 if (e.ButtonName "alertButton2") { } 在dev用户界面中进行提示(usecontrolwinform) AlertInfo info new AlertInfo("提示",…...

STM32-串口-UART-Asynchronous
一,发送数据 #include "stdio.h" uint8_t hello[]"Hello,blocking\r\n"; HAL_UART_Transmit(&huart1,hello,sizeof(hello),500); 二,MicroLIB-printf(" hello\r\n") #include "stdio.h" #ifdef __GNUC…...

Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年1月15日13点14分 目录 1. 基于域名的虚拟主机 …...
Shell控监Kafka积压
1、获取Kafka消息堆积情况 vi check-kafka-lag.sh #!/bin/bashTOPIC"total_random" GROUP_ID"etl-dw" BOOTSTRAP_SERVER"node-01:9092,node-02:9092,node-03:9092"# 检查第一个参数是否为数字 if ! [[ $1 ~ ^[0-9]$ ]]; thenecho &…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...