设为首页 加入收藏

TOP

2.从print到自省(一)
2018-11-08 02:08:24 】 浏览:273
Tags:print 自省

print是一个函数

??为什么print是一个函数呢?可以在交互式解释器下

输入:

>>> type(print)

输出:

<class 'builtin_function_or_method'>

??这句话的意思是说,print的类型是一个内建的函数或方法,class只是起指示作用,与类定义时的class作用不同,而'builtin_function_or_method'是一段描述性文本,不需要在意其中的下划线,我相信它仅仅是python想输出的一段文本而已,有无这下划线并不妨碍说明print是一个函数。

如何使用print函数

??可以在交互式解释器下

输入:

>>> print.__doc__

输出:

"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\nPrints the 
values to a stream, or to sys.stdout by default.\nOptional keyword arguments:
\nfile:  a file-like object (stream); defaults to the current sys.stdout.\nsep:  
 string inserted between values, default a space.\nend:   string appended after
 the last value, default a newline.\nflush: whether to forcibly flush the stream."

??从这段文档来看,要使用print函数,就应该如同文档所给出的那种形式:print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False),可以看到其中非常可能变化的参数是"value,...,",而不需要变化的参数是sep和它后面的参数(默认参数)。如果想要改变打印的方式,就需要改变这些默认参数。如果不提供参数,那么就打印出一个空行代码如下:

1 .value, ...,

>>> print('a')                      # 打印单个字符串,其他参数默认
a
>>> print('a', 'b', 'c')            # 打印多个字符串
a b c

2 .sep

>>> print('a', 'b', 'c', sep=',')   # 用逗号将结果隔开
a,b,c

3 .end

新建.py文件,保存运行

输入:

print('hello,')                     # 打印结束默认换行
print('world!')

输出:

hello,
world!

新建.py文件,保存运行

输入:

print('hello,end="***"')    # 打印结束不换行,而是加三颗星*
print('world!')

输出:

hell,***world!

4 .file

输入

with open(r'D:\python36\print_file.txt', 'w') as f:
    print('a', 'b', 'c', file=f)    

??如果不改变file参数默认值,print直接是显示在解释器上,因为sys.stdout指向控制台,所以sys.stdout是print默认的输出格式(sys本文不扯),如果改变了file参数,如上面代码那样这时屏幕上就不会再显示a b c,而是写在刚刚新建的(如果原先没有这个文件就会新建这个文件)文件中。

5 .flush=False

??从flush参数的值可以看出,flush=False/True,表示是否立刻将输出语句输入到参数file指向的对象中(默认是sys.stdout)

输入

>>> f=open(r'print_flush.txt', 'w')
>>> print('a', 'b', 'c', file=f)  
# 此时,txt文件没有任何东西写入,print的内容存在内存中,直到文件关闭,输出到txt中输入

>>> f=open(r'print_flush.txt', 'w')
>>> print('a', 'b', 'c', file=f, flush=True)   # 此时,txt文件已经写入a b c

??先不管为何先存到内存中,以后再写。更详细了解可以参考python中文文档

6 .不传递参数

>>> print()

>>> 

6 .print函数返回了什么?

??既然是一个函数,无论如何,返回值是最重要的,最终还是要看结果嘛,默认情况下,print函数将(value, ...)打印到流或sys.stdout,但它的返回值是None,这将在文章快结束的时候印证这一点。

print的属性

??python中要查看一个对象的属性,可以用dir()函数,

输入:

dir(print)

输出:

['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '
__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', 
'__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', 
'__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

??dir函数返回传递给它的任何对象的属性名称经过排序的列表,这里的属性很丰富,注意到这些属性都是以双下划线开始和结束,在python中这有特殊的意义它代表一些特殊的方法,方法也是属性,这里主要说下__str__和__repr__

1 .__str__

??既然__str__是print的一个属性,那么我们就可以通过他的"对象"+."属性"的形式去查看这个属性到底是什么东西__doc__属性查看这个对象的注释,

输入:

>>> print.__str__

输出:

<method-wrapper '__str__' of builtin_function_or_method object at 0x005A0120>

??顺手牵羊输入>>>print.__str__,结果也是如同上面那样,这说明了__str__和__repr__都是print的一个封装方法,它们所在的内存地址是一样的!

接着输入:

>>> print.__str__.__doc__

输出:

'Return str(self).'

??str()是什么?是python的一个内置类型!

继续输入:

>>> type(str())
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇分享个最新Python入门到实战flask.. 下一篇python记录_day16 类的成员

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目