基础玩法:不仅仅是打印一个字符串
如果你把鼠标悬停在print函数上你会发现它的第一个参数其实是*args或者叫*objects。那个星号*意味着它是“贪婪”的--你可以给它塞进一个甚至无数个对象。比如# 普通玩家 print(毛肚) print(鸭肠) print(雪花肥牛) # 进阶玩家一次性打印多个 print(毛肚, 鸭肠, 雪花肥牛) # 输出毛肚 鸭肠 雪花肥牛更酷的是如果你有一个列表你可以直接通过解包Unpacking把它“炸”开传给printhotpot_list [虾滑, 宽粉, 娃娃菜] print(hotpot_list) # 输出[虾滑, 宽粉, 娃娃菜] # 加上星号 * 进行解包 print(*hotpot_list) # 输出虾滑 宽粉 娃娃菜加上*号列表的方括号没了逗号也没了直接变成了清爽的空格分隔。2. 拒绝千篇一律的空格sep 参数细心的你可能发现了上面打印多个元素时默认是用空格隔开的。如果你想打印一个日期或者生成一个CSV格式的字符串空格就显得很尴尬了。这时候sepseparator 分隔符参数闪亮登场。比如格式化日期year 2026 month 1 day 15 # 默认情况 print(year, month, day) # 输出2026 1 15 不太好看 # 使用 sep 参数 print(year, month, day, sep-) # 输出2026-1-15 这就对了或者生成一个竖线分割的标题样式print(Python, Java, C, sep | ) # 输出Python | Java | C只要你愿意分隔符可以是任何字符甚至是一段话。3. 控制结尾的艺术end 参数默认情况下print函数是个“急性子”每打印完一次它都会自动帮我们敲一个回车换行\n。这就是为什么我们连续写三个print它们会显示在三行。但有时候我们想把两句话连在一起或者在同一行输出内容这时就需要end参数出马了。print(凶手其实是, end......) print(管家) # 输出凶手其实是......管家这样两行代码的输出无缝衔接在了一起。注意 如果你把end设置为空字符串或者非换行符记得在最后适当地加一个换行否则你的终端提示符可能会尴尬地挤在文字后面。4. 偷偷记笔录file 参数这是很多初学者最容易忽略的参数。print默认是将内容输出到sys.stdout也就是你的屏幕/控制台但其实它完全可以把内容“打印”到文件里。这就相当于你自己写了一个迷你版的日志记录器Logger非常适合快速调试或记录脚本运行结果。# 打开一个文件用于追加内容 with open(摸鱼日志.txt, a, encodingutf-8) as f: print(10:00 - 喝了一杯咖啡, filef) print(10:30 - 刷了一会儿推特, filef) print(11:00 - 盯着屏幕发呆, filef) print(日志记录完毕请查看 摸鱼日志.txt)运行完这段代码控制台只会显示最后一句提示而你的“摸鱼记录”已经悄悄保存在了 txt 文件里。虽然对于大型项目我们推荐用logging模块但在这个脚本写的小工具里用file参数简直不要太方便。5. 拒绝卡顿实时刷新flush 参数最后这个参数flush常常让新手摸不着头脑。计算机为了效率通常会有“缓冲区”的概念。当你print东西时它不一定会立刻显示在屏幕上而是攒够了一波再一起吐出来特别是当你没有换行的时候。这会导致有时候你写了代码屏幕却像卡死了一样半天没反应。如果你想做一个倒计时或者进度条就需要将flush设置为True强制计算机“别攒了立刻给我显示出来”import time print(正在入侵系统, end) for i in range(5): print(., end, flushTrue) # 关键在这里 time.sleep(0.5) print(\n入侵成功)如果你不加flushTrue你可能会发现屏幕卡顿了2.5秒然后一次性蹦出五个点。加上之后你就能看到那种“嘟...嘟...嘟...”的动态加载效果了。6. 总结虽然在90%的日常开发中我们只需要最简单的print(x)但编程的乐趣往往隐藏在剩下的10%里。*args让你可以一次打印多个宝贝或者解包列表。sep让你自定义元素之间的胶水。end让你控制话有没有说完换不换行。file让你把话悄悄说给文件听。