您的位置:首页 > 编程语言 > Python开发

【Python学习】python学习手册--第十一章 赋值、表达式和打印

2018-03-12 15:31 260 查看

赋值语句

赋值语句的一些要点:

- 赋值语句建立对象引用值:Python赋值语句会把对象引用值存储在变量名或数据结构的元素内。Python变量更像是指针,而不是数据存储的区域。

- 变量名在首次赋值时会被创建:如果对一个已经创建的变量名赋值,只是将该“指针”更换了引用的对象。

- 变量名在引用前必须被赋值:使用一个没有被赋值的变量,或者说使用一个没有指向任何对象的变量都会产生错误。

- 执行隐式赋值的一些操作:常见的赋值操作就是“=”,还有很多隐式的赋值操作,比如in 、 as 模块导入,函数参数引用等等

元组及列表分解赋值

在等号左边写为有序列的列表或者元组,等号右边的对象和左边的对象会从左至右相配对。事实上,赋值语句的右边支持任何可迭代的对象。

>>> a,b,c,d,e=[1,2,3,4,5]
>>> a,b,c,d,e
(1, 2, 3, 4, 5)
>>> a,b,c,d,e=(1,2,3,4,5)
>>> a,b,c,d,e
(1, 2, 3, 4, 5)
>>> a,b,c,d,e=1,2,3,4,5               #有时元组的括号可以省略
>>> a,b,c,d,e
(1, 2, 3, 4, 5)
>>>


扩展的序列解包

>>> a,b,c,d='Hello'                  #如果等号左右边的元素不相等,则会报错。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 4)
>>> a,b,c,d,e='Hello'                #类似于元组及列表分解赋值,将字符串解包成为序列,
>>> a,b,c,d,e                        #等号右边的对象和左边的对象会从左至右相配
('H', 'e', 'l', 'l', 'o')
>>>


多重目标赋值

>>> a=b=c=123                   #他们都指向了同一个目标对象。即三个“指针”指向了相同的内存
>>> a,b,c
(123, 123, 123)
>>>


增强赋值语句

增强语句通常比一般的表达式执行的更快,因为再表达是中变量只出现了一次。对于程序员的输入也比较少

>>> a=22
>>> a+
c85d
=11                #相当于a=a+11
>>> a
33
>>>


Python3.0中的扩展序列解包

在用序列赋值通常要求左边的目标名称数量与右边的主体中的对象数目一致,否则就出错。然而在Python3.0中,我们可以使用一个带星号的变量来更通用的匹配:

>>> a,b,c="Hello World!"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)
>>> a,b,*c="Hello World!"
>>> a
'H'
>>> b
'e'
>>> c
['l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']
>>> a,*b,c="Hello"                           #更一般的星号可以出现在左边表达式上的任何变量上
>>> a
'H'
>>> b
['e', 'l', 'l']
>>> c
'o'
>>> *a,b,c="Hello"
>>> a
['H', 'e', 'l']
>>> b
'l'
>>> c
'o'
>>> *a,b,c="123"                      #需要注意的是,带星号的变量有可能只匹配到单个元素,
>>> a,b,c
(['1'], '2', '3')                                #但是它总是返回的列表类型
>>> *a,b,c='12'
>>> a,b,c
([], '1', '2')                        #在等号左右两边元素不对等的情况,也是返回一个空的列表
>>> *a,*b,c,d='123'                   #如果左右两边的元素数量差距很大,依然会报错
File "<stdin>", line 1
SyntaxError: two starred expressions in assignment
>>> *a,='123'              #还可以直接赋值成为单独一个列表 “,”逗号表示等号左边是只有一个元素的元组
>>> a
['1', '2', '3']


表达式语句

Python中的表达式一般是在调用函数,或者是对象的方法。

表达式语句通常用于执行可变对象的方法,这类方法是在对象的原处进行更改,不会返回任何值,如果把这种运算写成赋值语句,就会得到错误的结果:

>>> L=[1,2,3,4]
>>> L.append(5)
>>> L
[1, 2, 3, 4, 5]
>>> L=L.append(6)             #返回为None. L变量名被覆盖,得到错误的结果
>>> L
>>>


类似的操作都是在可变类型的本身直接修改,写成赋值语句就会得到错误的结果。区分好可变和不可变类型显得尤为重要。

打印操作

在Python中,打印与文件和流的概念紧密相连。从技术角度来讲,打印操作就是将Python中的对象转化成为文本表达形式,然后输出到标准输出或文件的流中。

Python3.0和Python2.x的打印操作明显不一样,在2.x中的版本,print作为一个语句使用,而Python3.0中作为一个内置函数在使用。

在Python3.0中,print函数的调用如下:

print([object,…][, sep=’ ’ ][, end=’\n’][,file=sys.stdout])

其中

参数sep表示为输出字符串列表之间使用的分隔符,默认参数为空格。

end参数表示输出后的结尾字符,默认为换行符

file指定了文本要打印到的目标位置,默认情形下为sys.stdout(标准输出),也可以为其它文件,此文件在打印输入之前已经打开。

打印流重定向

平常使用的print函数可以等价于:

>>> import sys
>>> sys.stdout.write(str(x)+'\n')
hello
6                                 #此函数返回打印的字符串长度
>>> print(x)                      #打印效果与标准输出流等效
hello
>>>


可以通过重定向,将打印的内容重定向到其它地方:

>>> import sys
>>> sys.stdout=open('log.txt','a')         #将输出流重定向到一个log.txt文件中
>>>print('print log into log.txt')         #print函数只是将参数传递给sys.stdout。write方法


如果在python2.6版本上想要使用python3的print函数,就需要执行一条语句支持该函数:

>>> from __future__ import print_function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: