博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python 2 到 3 系列】 print 是函数
阅读量:5276 次
发布时间:2019-06-14

本文共 1097 字,大约阅读时间需要 3 分钟。

v3.0 以前,print一直作为语法结构存在,他是python语法的一部分;这个理解起来可能有点蹩脚,但的确是这样。
print 一直被定以为一个statement,也就是说,他跟return/try/while等等语法结构没有概念上的区别,都必须在编译阶段解析并产生对应的op流。
statement 是由 expression组成的,expression可以包含expression,但不能包含statement。
所以,如下代码产生了语法错误:
====================
>>> # python 2.7
>>> a = print 1
  File "<stdin>", line 1
    a = print 1
            ^
SyntaxError: invalid syntax
====================
v3.0 以后,print statement被取消,定义了一个内建函数print()。
现在,print的函数形态会令我们比较舒服,它看起来更像一个用户于程序交互的功能函数,而不是怪异的语法结构。
虽然,print()函数不返回任何东西,虽然试图获取print()的返回值看起来很怪异,但它可以说明,print(1)是一个函数调用的expression,而不是print statement。
====================
>>> # python 3.2
>>> a = print(1)
1
>>> type(a)
<class 'NoneType'>
====================
并且,显然的,a得到了一个返回值,返回值是空。
这不同于我们试图访问一个未初始化的变量,如下面的例子。
====================
>>> # python 3.2
>>> type(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
====================
结论:
在v3.x里,以函数形态存在的print()必须用括号包裹参数列才能编译通过,它的使用可以出现在任何函数可以出现的地方,需要考虑的只有返回值是否有意义。
在v2.x里,print作为statement,可以使用带括号也可以不带括号使用,但决不能存在于expression里。

转载于:https://www.cnblogs.com/lanqiu5ge/p/9472243.html

你可能感兴趣的文章
beta冲刺3
查看>>
Django中的缓存的配置与使用
查看>>
ASP.NET Core的配置(2):配置模型详解
查看>>
WPF获取某控件的位置,也就是偏移量
查看>>
浅析SQL Server数据库中的伪列以及伪列的含义
查看>>
背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox
查看>>
从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)
查看>>
VSTO之旅系列(三):自定义Excel UI
查看>>
html5 canvas 实现一个简单的叮当猫头部
查看>>
深入理解C指针之四:指针和数组
查看>>
WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现...
查看>>
C#控制管理VisualSVN Server
查看>>
警惕使用WebClient.DownloadFile(string uri,string filePath)方法
查看>>
[UML]UML系列——状态机图statechart diagram
查看>>
WPF制作的一个小功能,智能提示(IntelliSense)
查看>>
关于私有变量,静态私有变量
查看>>
Zen Coding css,html缩写替换大观 快速写出html,css
查看>>
JSON
查看>>
iOS实现三屏复用循环广告[从服务器请求的广告]
查看>>
LINUX修改文件权限 学习
查看>>