print() 功能在日常的编程中经常会使用到,但是很少有人会重视。但是它存在的意义在于可以提示日常经常看见的问题,比如常见 print() 错误,处理换行符、字符编码,将文本写入文件,模拟单元测试,在终端中构建高级用户界面。
整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。
简单 print() 示例。
print()
print('
')
print('')
字符串文字 print() 直接传递。
print('データが読み込まれています...')
将该消息使用变量进行 print() 直接传递。
message = 'データが読み込まれています...'
print(message)
数字拼接字符串依旧需要强制转换。
'私は' + str(37) + '歳です。'
'私は 37 歳です。'
不同的内置类型的文字。
print(37) #
37
print(3.14) #
3.14
print(1 + 2j) #
(1+2j)
print(True) #
True
print([1, 2, 3]) #
[1, 2, 3]
print((1, 2, 3)) #
(1, 2, 3)
print({'red', 'green', 'blue'}) #
{'red', 'green', 'blue'}
print({'名前': '諸葛亮', '年齢': 54}) #
{'名前': '諸葛亮', '年齢': 54}
print('hello') #
hello
print(None)
None
sep,分隔符操作。
print('真', '三國無雙', sep=None)
真三國無雙
print('真', '三國無雙', sep='·')
真·三國無雙
print('真', '三國無雙', sep=',') # 逗号分隔值(CSV) 格式
真,三國無雙
print('真', '三國無雙')
真 三國無雙
print('真', '三國無雙', sep='')
真三國無雙
print('真', '三國無雙', sep='
')
真
三國無雙
# os路径
print('home', 'user', 'documents', sep='/')
home/user/documents
print('/home', 'user', 'documents', sep='/')
/home/user/documents
print('', 'home', 'user', 'documents', sep='/')
/home/user/documents
# 任意长度的字符串用于连接元素
print('曹操', '孫権', '劉備', sep=' -> ')
曹操 -> 孫権 -> 劉備
end,禁用换行符。
print('真·三國無雙...', end='')
print('ok')
真·三國無雙...ok
# 输出到同一行
print('真·三國無雙', end='. ')
print('真·三國無雙', end='. ')
print('真·三國無雙.')
真·三國無雙. 真·三國無雙. 真·三國無雙.
sep 、end,混用打印。
print('王異', '夏侯惇', '夏侯淵', sep=', ', end=', ')
print('郭嘉', '楽進', '許褚', sep=', ', end=', ')
print('徐晃', '曹休', '曹仁', sep=', ')
王異, 夏侯惇, 夏侯淵, 郭嘉, 楽進, 許褚, 徐晃, 曹休, 曹仁
额外填充的换行符。
print('君主:曹操', end='
* ')
print('五子良将:張遼、樂進、于禁、張郃、徐晃', end='
* ')
print('五谋臣:荀彧、贾诩、荀攸、程昱、郭嘉', end='
')
君主:曹操
* 五子良将:張遼、樂進、于禁、張郃、徐晃
* 五谋臣:荀彧、贾诩、荀攸、程昱、郭嘉
通过 print() 直接操作文档进行写入操作。
with open('file.txt', mode='w') as f:
print('真·三國無雙', file=f)
缓存方式分3种。
line-buffered 行缓冲 和 block-buffered 块缓冲 输出标准取决于哪个事件先出现。
import time
num_seconds = 3
for countdown in reversed(range(num_seconds + 1)):
if countdown > 0:
print(countdown, end='...', flush=True)
time.sleep(1)
else:
print('Go!')
python 的打印可以提供多种的风格支持,比如添加颜色,添加装饰,使用动画,甚至播放声音。
这里需要一个库就是 pprint。
from pprint import pprint as pp
嵌套数据结构输出,漂亮的打印是关于使一段数据或代码看起来更吸引人眼,以便更容易理解。这是通过缩进某些行、插入换行符、重新排序元素等来完成的。
data = {'powers': [x**10 for x in range(10)]}
pp(data)
{'powers': [0,
1,
1024,
59049,
1048576,
9765625,
60466176,
282475249,
1073741824,
3486784401]}
# 无限嵌套结构 ...
cities = {'魏': {'官職': {'君主': ['曹操']}}}
pp(cities, depth=3)
{'魏': {'官職': {'君主': [...]}}}
json 格式化输出。
import json
data = {'Name': '真·三國無雙', 'Version': '8'}
data_json = json.dumps(data)
data_json_pp = json.dumps(data_json, indent=4, sort_keys=True)
print(data_json)
{"Name": "真·三國無雙", "Version": "8"}
print(data_json_pp)
"{\"Name\": \"\u771f\u00b7\u4e09\u570b\u7121\u96d9\", \"Version\": \"8\"}"
ANSI 转义序列添加颜色,ANSI 转义序列就像终端的标记语言。在 HTML 中,您使用标签(例如 或 )来更改元素在文档中的外观。
def esc(code):
return f'\033[{code}m'
print(esc('31;1;4') + 'really' + esc(0) + ' important')
使用动画,终端中为文本设置动画,必须能够自由移动光标。可以使用 ANSI 转义码或 curses 库(仅Linux支持)。
显示轮子表示程序正在执行。
from itertools import cycle
from time import sleep
for frame in cycle(r'-\|/-\|/'):
print('\r', frame, sep='', end='', flush=True)
sleep(0.2)
百分比动画进度条。
from time import sleep
def progress(percent=0, width=30):
left = width * percent // 100
right = width - left
print('\r[', '#' * left, ' ' * right, ']',
f' {percent:.0f}%',
sep='', end='', flush=True)
for i in range(101):
progress(i)
sleep(0.1)
播放声音,使用 \a 实现,至于这个声音是什么需要OS而定。一般都是OS的某一个提示音。
输出window的警告音。
print('\a')
print('\a:pynote.net')
:pynote.net
软件测试在动态类型语言中尤其重要,例如 Python 没有编译器来警告明显的错误,因此经常会使用 print 输出来检查。
例如数据分析中使用 sklearn 进行模型应用计算时候发生错误的错误第一个反应就是要打印一下看看数据是不是模型需要的样子。
def average(numbers):
print('debug1:', numbers)
if len(numbers) > 0:
print('debug2:', sum(numbers))
return sum(numbers) / len(numbers)
0.1 == average(3*[0.1])
日志记录,可以将日志视为文本文件。每行都传达有关系统中事件的详细信息。法律规定不会包含个人识别信息。
一般日志保存为这样。
[2021-06-14 11:18:34,517][DEBUG][root][MainThread] Customer(id=123) logged out
python 使用 logging 模块进行日志操作更加简单。未来会有专门一篇文章进行介绍。
import logging
logging.basicConfig(level=logging.DEBUG)
调试,一般会使用 pycharm 进行断点测试。这里介绍的 pdb 方法比较繁琐,知道了解就好。
python -m pdb my_script.py
import pdb
pdb.set_trace()
--Return--
> (1)()->None
(Pdb)
Python 3.7+ 使用 breakpoint() 实现同样的功能。
def average(numbers):
if len(numbers) > 0:
breakpoint()
return sum(numbers) / len(numbers) | 留言与评论(共有 0 条评论) “” |