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里。

【Python 2 到 3 系列】 print 是函数的更多相关文章

  1. Python语言系列-04-高阶函数

    闭包 #!/usr/bin/env python3 # author:Alnk(李成果) # 什么是闭包 # 1,闭包存在于函数中 # 2,闭包就是内层函数对外层函数(非全局变量)的引用 # 3,最内 ...

  2. python基础之 装饰器,内置函数

    1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...

  3. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

  4. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  5. Python 3.x下消除print()自动换行

    Python 2.x下的print语句在输出字符串之后会默认换行,如果不希望换行,只要在语句最后加一个“,”即可.但是在Python 3.x下,print()变成内置函数,加“,”的老方法就行不通了. ...

  6. python中列表和字典常用方法和函数

    Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...

  7. Python 几个重要的内置函数

    所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以用.内置函数,这意味着我们不必为了使用该函数而导入模块.不必做任何操作,Python 就可识别内置函数.在学习Python的过程中,有 ...

  8. [Python笔记]第四篇:内置函数

    本篇主要内容:内置函数 函数 参考:https://docs.python.org/3.5/library/functions.html 内置函数列表 一.数学运算类 abs(x)求绝对值 >& ...

  9. Python自动化运维之6、函数装饰器

    装饰器: 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数, ...

随机推荐

  1. Unity C# 关于Attribute的使用

    最近在研究Attribute,感觉挺好玩,搜到一篇不错的文章,分享给大家 原文:未知?找到后补上! 举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Uni ...

  2. Java基于jdbc链接mysql数据库步骤示列

    用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...

  3. Servlet细节整合

    最近在复习Servlet,发现其中有很多细节方面的东西都没有接触到,只是学了大概 1.请求转发和请求重定向的区别 2.输入参数为中文时候的乱码问题 3.Web工程中的目录写法 下面分别阐述 1.请求转 ...

  4. SublimeText插件autoprefixer : css 添加前续

    /* 使用前 */ body { background: linear-gradient(to bottom, #DADADA, #000); } p a { -webkit-border-radiu ...

  5. 编写tab切换插件

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. Java Knowledge series 4

    JVM & Bytecode Has-a or Is-a relationship(inheritance or composition) 如果想利用新类内部一个现有类的特性,而不想使用它的接 ...

  7. Linux 两组信号对比

    博客逐步迁移到,独立博客,原文地址 http://www.woniubi.cn/two_groups_signal_difference/ 之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时 ...

  8. Linux centos6.x 配置免密码登录

    免密码登录主要就是被访机器提供公匙给访问者,然后访问者使用ssh协议时可以使用所配置好的公匙验证.这样就免去了输入密码的麻烦. 某些集群例如hadoop,一般都需要将主机和其他机器间配置无密码公匙认证 ...

  9. due to a StackOverflowError. Possible root causes include a too low。。

    我们可以用另外的办法来解决这个问题,我们让tomcat不扫描指定的jar包,tomcat就要轻松得多了,org.apache.tomcat.util.scan.StandardJarScanner中定 ...

  10. 笨办法学Python(三十二)

    习题 32: 循环和列表 现在你应该有能力写更有趣的程序出来了.如果你能一直跟得上,你应该已经看出将“if 语句”和“布尔表达式”结合起来可以让程序作出一些智能化的事情. 然而,我们的程序还需要能很快 ...