1.函数名及其来源
print函数来自英文单词print,指印刷、出版、打印。
大多数编程语言都有类似输出函数
如java:
System.out.println( "Hello, World!");
c语言:
printf("Hello, World!");
php:
虽然写法给不相同,但是功能大致一致。
这里并不特指打印到纸张操作,通常指输出到指定终端,这里的指定终端,默认为显示屏。
在这里又要说一下python的函数是怎么执行的
通常计算机是无法直接识别我们的日常语言的指令,那么为了方便程序员的输入,我们就有了解释器。
解释器本身也可以看作是个程序(这个程序的语言则未必是那种语言,正如翻译官是哪国人不重要),那么Python的解释器程序是什么语言开发的呢? 答案是好几种语言。what? 因为Python有好几种解释器,分别基于不同语言开发,每个解释器特点不同,但都能正常运行我们的Python代码,下面分别来看下各种不同类型的Python解释器的区别。
3.1 CPython
CPython是使用最广的Python解释器。本教程以CPython为准。当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
3.2 IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
3.3 PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
3.4 Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
3.5 IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
当我们执行入门示例:
print('Hello World!')
程序执行的过程实际是
- 计算机读取你输入的字符串 print('Hello World!')
- 通过解释器将函数print识别出来,并且将括号内的参数一一分解开
- 依据函数的参数定义判断参数然后传入函数执行
- 执行结果根据函数定义返回并输出到指定位置
2.函数定义源码及其用法拆解
print()函数的参数定义如下:
print(*values, sep=' ', end='\n', file=sys.stdout, flush=False)
1 *values : 表示要打印的值
*表示任何多个无名参数, 各个值之间用‘,’(逗号隔开),打印出来各个值之间用空格隔开
2 sep=’ ‘: 表示当输入多个打印的值时,各个值之间分割方式, 默认空格,可以自定义,例如
>>> print('a', 'b', 'c')
输出为:
a b c
(中间默认用空格隔开)
当设置sep = ‘\n’时上面代码结果为:
a
b
c
再看一个例子:
>>> print('a', 'b', 'c',sep='@')
输出为:
a@b@c
3 end=‘\n’**: 控制print中传入值输出完后结束符号,默认换行,这里可以设置为其他,如 ‘\t’, ’ ’ 等等, 可以自己定义,如下:
print('python')
print('is good')
输出为:
python
is good
默认换行,如果设置:end=' '
print('python', end=' ')
print('is good')
则输出为:
python is good
一行
4 file=sys.stdout:设置输出设备,及把print中的值打印到什么地方,默认输出到终端,可以设置file= 文件储存对象,把内容存到该文件中,如下:
f = open(r'a.txt', 'w')
print('python is good', file=f)
f.close()
则把python is good保存到 a.txt 文件中
5 flush=False: 该参数主要是刷新, 默认False,不刷新,Ture时刷新,例如在上面 4 中print中设置:
f = open(r'a.txt', 'w')
print('python is good', file=f, flush=True)
正常情况下print到f中的内容先从到内存中,当文件对象关闭时才把内容输出到 a.txt 中,当flush=True时它会立即把内容刷新存到 a.txt 中
还有一种用法是输出到屏幕时不换行而是原地刷新,经常用来表示百分比进度:
import time
for i in range(0,110,10):
print("\r","now check state: %d %%" % i , end="", flush=True)
time.sleep(1)
3.版本差异
在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异
主要体现在以下几个方面:
- python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构;
- Python2打印时可以不加括号:print 'hello world', Python3则需要加括号 print("hello world")
- Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为,不得不使用raw_input()代替input()
4.学习建议
print可以说是初学时最常用的函数之一,明确打印出执行结果对于我们理解函数运行步骤和过程细节非常有帮助,善用print可以做到事半功倍的学习效果。
所以学好用好print,多多练习,成为编程中最有力的工具函数之一。
python2在2020年1月即将停止官方支持,推荐大家用规范的Python3语法,即加括号传入参数的方式使用print。
对基础运行环境有疑问的,推荐参考:python函数深入浅出 0.基础篇