
注释、输入与输出、变量
更新: 2025/2/24 字数: 0 字 时长: 0 分钟
注释
注释:对代码进行注解说明的文字。它不会参与代码的运行,也就不会对代码的功能产生任何影响。
注释语法
在 Python 中,注释分为“单行注释”和“多行注释”两类,具体语法如下:
单行注释:在 Python 中使用
#
表示单行注释,可以放在被注释代码行之上,也可以放在被注释代码之后两个空格的位置。多行注释:Python 中使用三个英文单引号
'
或三个英文双引号"
表示多行注释(建议使用双引号)。
# 这是单行注释
Python代码
Python代码 # 这是单行注释
'''
这是使用三个单引号的多行注释
这是使用三个单引号的多行注释
这是使用三个单引号的多行注释
'''
"""
这是使用三个双引号的多行注释
这是使用三个双引号的多行注释
这是使用三个双引号的多行注释
"""
重要
在 Python 代码中,所有的标点符号都必须是在英文输入状态下输入。在注释中,所有的标点符号既可以在英文输入状态下输入,也可以在中文状态下输入。
注释规范
最后,讲解一下注释的使用规范,大概有这么以下三点:
- 好的代码和好的程序员,都应该对代码进行注释,这一点很重要。
- 对于复杂的代码,应该在操作开始前或者在代码之后写上相应的注释。
- 对于一目了然的代码,就不需要添加注释,因为一般阅读 Python 代码的人都了解 Python 的语法。
提醒
注释不是描述代码做什么,而是对复杂代码进行备注说明。
输入与输出
输入与输出是计算机与外部世界(如用户、设备、文件系统等)进行交互的核心机制之一,因为有了数据的输入,计算机才能接收指令、理解需求;有了数据的输出,计算机才能将运行结果反馈给用户。
I/O
操作
在计算机系统中,我们把输入数据的操作称之为 Input,把输出数据的操作称之为 Output,两者合在一起统称为 I/O 操作。I/O 操作是几乎所有计算机程序必不可少的组成部分,无论是用户交互、数据处理、还是设备控制,I/O 都是核心机制。
- 输入操作(Input Operation)指的是从外部设备或其他数据源接收数据并传递给计算机程序。常见的输入源包括键盘(用户输入)、文件(从文件系统中读取数据)、网络(从网络连接中接收数据)等。一个完整的输入操作流程包含:
- 用户或设备生成数据。
- 数据通过输入设备(如键盘、网络接口)传输给计算机。
- 计算机程序从输入设备读取数据并进行处理。
- 输出操作(Output Operation)指的是将数据从计算机内部传输到外部设备或其他地方。这可以包括显示器(向用户输出文本、图像)、打印机(输出文件)、文件系统(将数据写入文件)、网络(发送数据给其他计算机)等。一个完整的输出操作流程包含:
- 程序生成数据。
- 数据通过输出设备(如显示器、文件)传输给用户或系统。
- 数据被输出设备接收并展现或保存。
相比其他语言,Python 中的 I/O 操作更加简单方便,通过简单的指令就可以实现基本的输入输出。例如,在 Python 中,input()
函数用于接收用户的输入,print()
函数用于将数据输出到控制台。
input
输入
input
是 Python 内置的输入函数。使用案例如下:
input
函数会接收控制台输入的内容,并以回车为结束标志。input
函数会阻塞程序继续执行,当程序执行到input
的时候会停下来等待用户的输入,输入完成后才会接着执行下面的内容。
input()
'''
输入:123(按下回车)
注释:执行input()代码,控制台输入123,按下回车键结束输入。123这三个数字就被输入到这段程序当中了,这就是一个Input操作。
'''
input()
input()
'''
输入:123(按下回车)
输入:456(按下回车)
注释:执行第一个input()代码,控制台输入123,按下回车键结束输入,123这三个数字就被输入到这段程序当中了。接着执行第二个input()代码,控制台输入456,按下回车键,456这三个数字就被输入到这段程序当中了。
'''
print
输出
print
是 Python 内置的输出函数。使用案例如下:
print
函数会将括号里面的内容输出到控制台。print
函数输出多个内容时,需要用英文逗号,
将多个内容相隔开来。在输出结果中,多个内容之间默认用一个空格相隔开来,这是因为print
函数中表示输出间隔的sep
属性的默认属性值为一个空格,不过我们可以自定义sep
属性值。print
函数输出结果后会自动换行,这是因为print
函数中表示结尾输出的end
属性的默认属性值为一个\n
换行,不过我们可以自定义end
属性值。print
输出函数可以和input
输入函数配合使用。
# 输出内容
print(123) # 输出:123
print( 3) # 输出:3。注释:纯数字之前的空格不会输出。
print(1 ) # 输出:1。注释:纯数字之后的空格不会输出。
print(1 3) # 报错,纯数字之间不能有空格。
# 用英文,符号分隔需要输出的多个内容
print(1, 2, 3) # 输出:1 2 3。注释:输出结果中,多个内容之间默认用一个空格相隔开来。
# 重新定义sep属性值为&&&
print(1, 2, 3, sep='&&&') # 输出:1&&&2&&&3
# end属性值默认为\n换行
print(1)
# 重新定义end属性值为'啦啦啦'
print(2, end='啦啦啦')
# 重新定义end属性值为'咯咯咯'
print(3, end='咯咯咯')
'''
输出:
1
2啦啦啦3咯咯咯
注释:第一个print输出1后,由于end属性默认换行,后面还输出了一个换行,因此第二个print从下一行开始输出2,由于重新定义end属性值为'啦啦啦',接着输出了'啦啦啦',紧接着第三个print从后面继续输出3,重新定义end属性值为'咯咯咯',最后输出了'咯咯咯'。
'''
num = input()
print(num)
'''
输入:789(按下回车)
输出:789
注释:首先执行括号里面的input函数,输入789,按下回车键,789这三个数字就被输入到这段程序当中了,紧接着print函数输出了刚刚输入的789这三个数字。
'''
性能影响
对于计算机系统来说,我们每次调用 input
输入函数或 print
输出函数都会触发一个 I/O 操作,由于 I/O 操作(如文件读写、打印输出)会涉及外部的硬件设备(如磁盘、显示器),而这些设备的响应速度远慢于 CPU 和内存的处理速度,因此 I/O 操作相比 CPU 执行计算来说是一个相对较慢的过程。所以在 CPU 等待 I/O 操作完成时,通常会暂停当前任务,导致 CPU 的利用率降低,正因如此 I/O 操作往往成为程序性能的瓶颈。具体我们来看下面一个例子(在 Python 3.10 以下的命令行中执行):
import time
# 循环执行10次
for _ in range(10):
# 暂停1秒
time.sleep(1)
print(123, end=', ')
在命令行中执行上面代码,会看到它的输出效果并不是我们想象中每一秒输出一组 123,而是在十秒后一次性输出了十组 123。分析这个原因前先看看代码,代码中每次循环都会调用一次 print
函数从而触发一次 I/O 操作,而每次 I/O 操作都会暂停 CPU 执行当前任务,也就是说这段代码在十次循环中暂停了 CPU 十次,这对于 CPU 以及程序性能来说是十分不友好的。Python 为了减少 I/O 中断以提高性能,使用“标准输出缓冲区(stdout buffer)”来管理 I/O 操作。在调用 print
函数输出前,将要输出的内容放到缓冲区当中,当缓冲区被输出的内容塞满或者显式刷新时,才会清空缓冲区产生一次输出。简单来讲就是,Python 将涉及 I/O 的操作交给了缓存来管理,以减少 I/O 频繁中断 CPU 的执行,这也就是为什么上面代码会在十秒后一次性输出十组 123 的原因。如果我们希望每一秒输出一组 123,可以将 print
函数中的 flush
参数设置为 True
,这样每次输出都会强制清空输出缓冲区,具体代码如下:
import time
# 循环执行10次
for _ in range(10):
# 暂停1秒
time.sleep(1)
print(123, end=', ', flush=True)
总之,I/O 是计算机程序与外部世界交互的重要机制。在处理大数据、文件系统、网络通讯等领域,I/O 性能对程序效率至关重要。特别是在高并发环境下,如何优化 I/O 操作(如通过缓存、异步或多线程处理)是系统设计中的重要内容。
变量
在 Python 中,所有的数据类型(如整数、浮点数、字符串、列表、元组、字典、集合、函数、类等)都是对象,而变量就是某一个对象的引用。这里的“引用”我们可以理解为变量的一个“链接”,或者说变量的一个“快捷方式”。举例来说“变量 x
是整数 5”时,实际上是说变量 x
引用了一个值为 5 的整数对象。变量 x
本身并不包含整数值,而是引用或者说指向了该整数对象。
命名
首先变量一定是有名称的,且名称的命名是有一定规范的,具体如下:
- 变量名是由字母、数字和下划线组成,但数字不能在第一位(硬性)。
wo_18 # 注释:命名正确。
_wo18 # 注释:命名正确。
18_wo # 注释:命名错误,数字不能在第一位。
- 变量名大小写敏感,即变量名称之间存在大小写区别就是不同的变量(硬性)。
aa # 注释:变量名为aa的变量。
Aa # 注释:变量名为Aa的变量。
AA # 注释:变量名为AA的变量。
- 变量名不能是 Python 的关键字,即不能用 Python 保留的有特殊功能或者特殊意义的一些单词作为变量名(硬性)。
False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield
- 变量名避免使用 Python 中的内置函数、类名,否则会覆盖原有内置函数或类的原始定义,导致无法再正常使用这些内置函数或类(硬性)。
abs, all, any, ascii, bin, bool, bytearray, bytes, callable, chr, classmethod, compile, complex, delattr, dict, dir, divmod, enumerate, eval, exec, filter, float, format, frozenset, getattr, globals, hasattr, hash, help, hex, id, input, int, isinstance, issubclass, iter, len, list, locals, map, max, min, next, object, oct, open, ord, pow, print, property, range, repr, reversed, round, set, setattr, slice, sorted, staticmethod, str, sum, super, tuple, type, vars, zip
- 变量名应该具有描述性,能够清晰地表达变量的用途或所存储的数据,最好能见名知义(规范)。
aaa # 注释:不是好的变量名,不知道存储的数据含义和类型。
age # 注释:这是好的变量名,变量名标识了存储的数据含义。
- 变量名由多个单词组成的话,可以使用单词下划线、小驼峰命名或大驼峰命名来进行标识。一般来说,Python 主要使用单词下划线来命名变量、函数和模块,而使用大驼峰命名法来命名类(规范)。
UserName # 注释:大驼峰命名,每个单词的首字母都大写(多用于命名类)。
userName # 注释:小驼峰命名,首个单词的首字母小写,后边每个单词的首字母都大写。
user_name # 注释:多个单词之间用下划线隔开(多用于命名变量、函数和模块)。
赋值
赋值:将一个变量名和一个对象进行绑定,这样变量就成为了该对象的一个引用,类似链接、快捷方式的效果。
- 单个变量赋值格式:
变量 = 对象
a = 10 # 注释:a是一个变量,也是变量的名称,10是一个对象,通过'='赋值符号相连,变量a就成为了对象10的一个引用。
print(a) # 输出:10
b = 10 # 注释:变量b也成为了对象10的一个引用,说明不同的变量可以是同一个对象的引用。
print(b) # 输出:10
b = 1024 # 注释:变量b成为了对象1024的一个引用。
print(b) # 输出:1024。注释:变量只能是某一个对象的引用,因此变量b之前对对象10的引用就舍弃掉了。
提醒
Python 是动态类型语言,因此变量不需要显示声明类型,而是根据变量引用的对象,由 Python 解释器自动确定数据类型。
DANGER
在 print
函数里面不能进行变量赋值,例 print(a = 10)
就会报错。
- 多个变量赋值格式:
变量1, 变量2... = 对象1, 对象2...
a, b = 10, 1024
print(a) # 输出:10
print(b) # 输出:1024
注意
赋值多个变量时,=
左右两边的变量和对象的个数要一致,否则就会报错。
交换
在其他语言中一般通过新增变量的方法来交换变量值:
a = 50 # 注释:变量a是对象50的一个引用。
b = 100 # 注释:变量b是对象100的一个引用。
c = a # 注释:变量c将变量a中对象50的引用拷贝了一份,变量c就成为了对象50的一个引用。
a = b # 注释:变量a将变量b中对象100的引用拷贝了一份,变量a就成为了对象100的一个引用。
b = c # 注释:变量b将变量c中对象50的引用拷贝了一份,变量b就成为了对象50的一个引用。
print(a) # 输出:100
print(b) # 输出:50
在 Python 中可以通过变量位置的方法来快速交换变量值:
a = 50 # 注释:变量a是对象50的一个引用。
b = 100 # 注释:变量b是对象100的一个引用。
a, b = b, a # 注释:将变量a、变量b中引用进行交换。
print(a) # 输出:100
print(b) # 输出:50