Python 3 中的 print 函数会将它的参数转换为字符串,然后用指定的分隔符(默认是空格)连接起来,并在最后添加指定的结束字符(默认是换行符),最后将结果写入标准输出或指定的文件。
例如,print(3, 2, 1) 会将 3、2、1 转换为字符串"3"、"2"、"1",用空格连接后输出"3 2 1",并在末尾添加换行符。
一、Print() 函数
print()函数具有灵活的语法结构,其完整形式如下:
python
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
这个语法包含了多个参数,每个参数都有特定的功能:
- objects是不定长参数,允许函数接收任意数量的输出对象。这些对象会被自动转换为字符串形式,就像对每个对象调用了str()函数一样。这也解释了为什么print()能够处理多种不同类型的数据
- sep参数定义了多个对象之间的分隔符,默认为一个空格字符。当print()函数接收多个对象时,它会使用这个分隔符将它们连接起来
- end参数指定了打印结束后要添加的字符,默认为换行符'\n',这就是为什么每次调用print()后光标会移动到下一行的原因。也可以实现不换行效果:
python
print('hello',end='')
print('world')
# 第一行的print函数end值为空输出:helloworld
print('hello',end=' ')
print('world')
# 第一行的print函数end值为两个空格输出:hello world
print('hello',end='!')
print('world')
# 第一行的print函数end值为感叹号输出值为:hello!world
- file参数指定了输出的目标文件对象,默认是sys.stdout(标准输出,通常是控制台)。这使得print()能够将输出重定向到文件或其他输出流,例如:
python
with open('D:/output.txt','a+') as f:
print('Hello, Python!', file=f) # 输出到文件
- flush参数控制是否强制刷新输出缓冲区,默认为False。在特定情况下,如需要立即看到输出结果而不是等待缓冲区填满,可以将其设置为True
二、Print()函数的输出过程
了解了print()函数的源码构成,我们就能理解python解释器的工作步骤了。当调用print()函数时,Python解释器会执行以下步骤:
- 首先,Python将所有传入的对象通过str()函数转换为字符串表示。意思是你无论输入什么类型的对象,print()都会尝试将其转化为文本形式。
- 然后,它使用sep参数指定的分隔符(默认是空格)将这些字符串连接起来,形成一个完整的输出字符串。
- 接着,它在输出字符串的末尾添加end参数指定的结束字符(默认是换行符'\n')。
- 最后,它将完整的输出字符串写入到file参数指定的文件对象中(默认是标准输出sys.stdout)。
- 如果flush参数设置为True,Python会立即刷新输出缓冲区,确保内容立即显示,而不是等待缓冲区填满或程序结束
三、可输出内容的类型
1 数值
print()函数可以直接输出整数、浮点数和数学表达式的结果。这些数值不需要使用引号包围。例如:
python
print(520) # 输出整数:520
print(520.1314) # 输出浮点数:520.1314
print(1+519) # 这里要注意:当print()接收数学表达式时,它会先计算表达式的值,然后输出结果,而不是输出表达式本身。输出结果:520
2 字符串
print()函数可以输出各种形式的字符串,包括使用单引号 、双引号 或三引号包围的文本。例如:
python
print('我爱你,Jxbw!') # 使用单引号
print("I love u,Jxbw!") # 使用双引号
print('''我爱你,Jxbw!''') # 使用三引号
单引号和双引号的字符串在功能上没有区别,但在某些情况下使用一种可能更方便,例如当字符串本身包含引号时
python
print("this's my love, python.") # 字符串中包含单引号,外部使用双引号更方便
三引号允许创建多行字符串,实现换行输出
python
print('''第一行内容
第二行内容
哈哈哈,23333~''')
3 变量
print()函数可以直接输出各种类型的变量,无需特殊处理.对于不同类型的变量,print()会自动调用该变量相应的字符串转换方法,将它们转换为可读的文本形式
python
num = 19
print(num) # 输出数值型变量:19
str_var = 'Duan Yixuan'
print(str_var) # 输出字符串变量:Duan Yixuan
list_var = [1, 2, 'a']
print(list_var) # 输出列表变量:[1, 2, 'a']
tuple_var = (1, 2, 'a')
print(tuple_var) # 输出元组变量:(1, 2, 'a')
dict_var = {'a': 1, 'b': 2}
print(dict_var) # 输出字典变量:{'a': 1, 'b': 2}
4 特殊字符和转义序列
print()函数支持输出各种转义序列,这些特殊字符可以实现多种格式化效果
python
print('第一行\n第二行') # \n 表示换行
print('姓名\t年龄') # \t 表示制表符
print('这是引号\'示例\'') # \' 表示单引号字符
print("这是双引号\"示例\"") # \" 表示双引号字符
print('这是一个反斜杠\\示例') # \\ 表示一个反斜杠字符
转义字符总结
特征:反斜杠() + 想要实现的转义功能(转义字符)英文缩写首字母
转义字符 | 名称/功能 | 说明 |
---|---|---|
\b | 退格 (BS) | 将当前位置移到前一列。 (backspace) |
\f | 换页 (FF) | 将当前位置移到下页开头。 |
\n | 换行 (LF) | 将当前位置移到下一行开头。 (newline) |
\r | 回车 (CR) | 将当前位置移到本行开头。 (return) |
\t | 水平制表 (HT) | 跳到下一个 TAB 位置。 |
\v | 垂直制表 (VT) | 垂直制表。 |
\ | 反斜线 | 代表一个反斜线字符 "\"(用处看示例第五个) |
' | 单引号 (撇号) | 代表一个单引号字符(用处看示例第三个) |
" | 双引号 | 代表一个双引号字符(用处看示例第四个) |
? | 问号 | 代表一个问号 |
\0 | 空字符 (NUL) | 空字符。 |
\ddd | 八进制表示 | 1-3 位八进制所代表的任意字符 |
\xhh | 十六进制表示 | 1-2 位十六进制所代表的任意字符 |
四、高级用法
格式化输出
print()函数支持多种格式化输出方式,使用%表示标记转换说明符的开始
格式字符 | 说明 |
---|---|
%s | 字符串采用 str() 的显示 |
%r | 字符串 (repr()) 的显示 |
%c | 单个字符 |
%b | 二进制整数 |
%d | 十进制整数 |
%i | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 指数(基底写 e) |
%E | 指数(基底写 E) |
%f, %F | 浮点数 |
%g | 指数 (e) 或浮点数(根据显示长度) |
%G | 指数 (E) 或浮点数(根据显示长度) |
%% | 字符 % |
示例: |
python
PI = 3.141592653
print('%10.3f' % PI) # 字段宽10,精度3,输出: 3.142
#精度为3,所以只显示142,指定宽度为10,所以在左边需要补充5个空格,以达到10位的宽度
s = 'Duan Yixuan'
x = len(s)
print('The length of %s is %d' % (s, x)) # 输出:The length of Duan Yixuan is 11
# 'The length of %s is %d' 这部分叫做:格式控制符
# (s,x) 这部分叫做:转换说明符
PI = 3.1415926
print('%-10.3f' % PI) # 左对齐,字段宽10,精度3
print('%+f' % PI) # 显示正负号:+3.141593
print('%010.3f' % PI) # 用0填充空白:0000003.142