当前位置: 首页 > article >正文

【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 等).


http://www.kler.cn/a/507834.html

相关文章:

  • 如何使用 useMemo 和 memo 优化 React 应用性能?
  • 贪心算法(题1)区间选点
  • CSS 样式 margin:0 auto; 详细解读
  • Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
  • 主链和Layer2之间资产转移
  • VLANIF配置之区别(Differences in VLANIF Configuration)
  • Docker 镜像加速的配置
  • thinkphp:实现压缩文件上传、解压、文件更名、压缩包删除功能,增加trycatch
  • MyBatis基于XML的详细使用-缓存
  • 用户中心项目教程(一)--Ant design pro初始化的学习和使用
  • 什么是.NET中的反射,它有哪些应用场景
  • 包装类和简单认识泛型
  • RPA赋能内容创作:打造小红书入门词语图片的全自动化流程
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
  • 【Mysql进阶知识】Mysql 程序的介绍、选项在命令行配置文件的使用、选项在配置文件中的语法
  • 甲骨实物高保真数据归国,AI助力古文释读,发现甲骨新图像
  • python(25) : 含有大模型生成的公式的文本渲染成图片并生成word文档(支持flask接口调用)
  • Linux 35.6 + JetPack v5.1.4之 pyCUDA升级
  • OpenAI与Axios合作扩展新闻行业AI应用
  • 设计模式(4)行为模式
  • 正则表达式 匹配特定字符后的所有字符
  • SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输
  • GORM(Go语言数据交互库)
  • Java ArrayList
  • Angular 19 新增的一些核心功能
  • 从零开始启动一个Vue项目