Python shell输入多行代码疑问:过去是否不支持复制粘贴多行?
原因1:Python默认REPL的版本差异
Python官方自带的默认交互式shell(REPL)在3.10版本之前确实不支持智能多行粘贴:
- 旧版本(3.9及更早)会把你粘贴内容里的每一个换行符都当成一次输入提交,遇到你示例里
x=100后面的空行时,会直接执行x=100,后续粘贴的if语句块会因为输入时机不对、缩进匹配失败报语法错误,完全没法整块运行。 - 3.10及之后的版本默认加入了「括号粘贴模式」支持,会自动识别你粘贴的是整块代码,不会在中间的空行、缩进行处提前触发执行,所以你可以直接粘贴多行代码正常运行。
另外如果你用的不是Python默认的REPL,比如IPython、PyCharm内置控制台、VS Code Python终端等第三方交互式环境,这些工具很早就自行实现了多行粘贴支持,哪怕你用的是低版本Python也不会碰到教材说的问题。
原因2:教材描述的「一行」实际指代「一条逻辑语句」
很多编程教材里提到的「一行代码」默认指逻辑上的一条语句,不是物理显示上的一行:
比如以下两种写法都是一条逻辑语句,旧版REPL也都支持逐行输入执行:
# 物理两行,逻辑一条语句 a = 1 + \ 2 # 复合语句,物理多行,逻辑上是一条完整的if控制语句 if x == 10: print("10!")
你教材里的描述也有可能是把「每次仅能执行一条完整逻辑语句」简化成了「每次仅能输入一行代码」,属于表述不够严谨的情况。
你示例里的代码在新版本默认REPL、第三方REPL里都可以直接粘贴运行,和你测试的结果完全一致:
x=100 if x == 10: print("10!") elif x == 20: print("20!") else: print("I don't know!")
运行后确实会输出I don't know!。
内容的提问来源于stack exchange,提问作者Bluesman
相关产品推荐
相关产品推荐

