print是Python里使用频率最高的函数之一,但初学者常常在加不加引号这个问题上栽跟头。比如运行print(hello)直接报错NameError,而print("hello")就正常输出,这背后的逻辑其实非常清晰:引号告诉Python这是一段字符串文本,不加引号的内容则会被当成变量名、数字或表达式去求值。理解了这一点,print的很多行为就都能解释清楚了。

print不加引号和加引号的本质区别
在Python中,print函数接收的参数会先被解释器求值,再交给print输出。当你在参数两边加上引号(单引号或双引号都可以),Python就把它识别为一个字符串字面量,内容是什么就原样打印什么。例如print("3+5")输出的就是3+5这三个字符本身。
而如果去掉引号,情况就完全不同了。解释器会先把这段代码当作表达式来计算:print(3+5)中的3+5会先被计算成8,然后print输出的是计算结果8。同理,print(123)里的123是一个整数字面量,本身就是合法的表达式,所以可以直接打印。这也回答了标题里的问题:print后面完全可以不加引号,前提是不加引号的内容必须是Python能够求值的合法表达式。
最典型的报错场景是把普通文本当成了变量名。执行print(hello)时,Python会去查找名为hello的变量,如果之前没有定义过这个变量,就会抛出NameError。这不是print的bug,而是求值阶段就失败了。看下面的对比:
print("hello") # 输出:hello,字符串原样打印
print(123) # 输出:123,整数直接打印
print(3 + 5) # 输出:8,先计算再打印
print(hello) # NameError: name 'hello' is not defined
hello = "你好"
print(hello) # 输出:你好,变量已定义,打印变量的值打印变量与打印字符串的常见误区
很多初学者容易把变量名和字符串混淆。比如定义了变量name = "Tom"之后,写print("name")输出的是name这四个字母,而print(name)输出的才是Tom。引号内的内容永远是静态文本,引号外才是对变量的引用,这一点必须区分清楚。
另一个常见需求是想把提示文字和变量的值放在一行输出。直接写print("姓名:name")是不行的,输出的还是字面文本。最推荐的写法是使用f-string格式化字符串,在引号内用花括号包裹变量名,解释器会自动把变量的值填进去:
name = "Tom"
age = 18
# 错误示范:输出字面文本
print("姓名:name,年龄:age") # 输出:姓名:name,年龄:age
# 正确做法:f-string格式化
print(f"姓名:{name},年龄:{age}") # 输出:姓名:Tom,年龄:18
# 也可以用逗号分隔多个参数,print会自动用空格连接
print("姓名:", name, "年龄:", age)用逗号分隔多个参数的方式也很常用,print会自动在各个参数之间插入空格,末尾默认换行。这两种方式各有优劣:f-string格式更紧凑,控制力强;逗号分隔写法简单直观,适合快速调试输出。如果是Python3.6之前的版本,还可以使用str.format()方法或者百分号格式化,但新代码建议统一使用f-string。
打印数字、表达式与布尔值的细节
数字和表达式不加引号打印时,输出的永远是计算结果。这一点在调试算术逻辑时很有用,可以直接把表达式塞进print查看结果。但要注意精度问题,浮点数运算可能输出类似2.8999999999999995的结果,这是二进制浮点数的固有特性,不是print出了错。
print(100) # 输出:100
print(3.14 * 2) # 输出:6.28
print(10 / 3) # 输出:3.3333333333333335
print(2 > 1) # 输出:True,布尔表达式先求值
print("10" + "3") # 输出:103,字符串拼接
print(10 + 3) # 输出:13,数字相加布尔值也遵循同样的规则,print(True)中的True是Python内置的布尔常量,属于合法表达式,不需要加引号。而print("True")输出的是字符串True,虽然看起来一样,但类型完全不同。类似地,print(None)可以直接输出None,因为None也是内置常量。
还有一个容易忽略的点是print的sep和end参数。sep控制多个参数之间的分隔符,默认是空格;end控制输出结尾的字符,默认是换行符。利用end参数可以实现不换行的连续输出,在打印进度信息时特别实用:
print(1, 2, 3, sep="-") # 输出:1-2-3
print("加载中", end="") # 不换行,后续输出接着写
print("...完成") # 输出:加载中...完成总结一下,print加不加引号取决于你想输出什么:输出固定文本就加引号,输出变量值、数字或计算结果就不加引号。遇到NameError时先检查是不是忘了给文本加引号,或者变量还没定义。掌握求值优先这个核心原则,print的各种用法就都不会再出错了。
python printprint不加引号打印变量修改时间:2026-09-04 21:30:33