01A11.Learning Python 5th-赋值、表达式和打印

本笔记是基于《Python学习手册-原书第五版》第十一章 赋值、表达式和打印

赋值语句

Python赋值语句的作用是把对象赋给一个变量。

其基本形式是在等号左侧写赋值语句的目标,在等号的右侧写要赋值的对象。

左侧的目标可以是变量或对象组件。

右侧的对象可以是任何通过计算能得到对象的表达式。

赋值语句的主要特性

1.赋值语句创建对象引用

Python的赋值更像是指针而不是数据存储区域,是引用而不是复制。

2.变量在首次赋值时会被创建

3.变量在引用前必须先赋值

4.某些操作会隐式地进行赋值

模块导入,函数和类的定义,for循环变量,函数参数等都是隐式赋值运算。

常见的赋值形式

1.基础形式

将一个名称绑定到对象上。

# code是变量的名称,'Python'是字符串对象
code = 'Python'

2.元组赋值

当被赋值的目标为多个,且和对象数量相匹配时,赋值会按照位置顺序从左至右进行匹配。

Python会在内部为目标生成一个元组。因此被称为元组赋值。

# Python在内部会生成(code1,code2)的元组
# 变量名称code1 匹配 'Python'字符串对象
# 变量名称code2 匹配 'Java'字符串对象
>>> code1,code2 = 'Python', 'Java'
>>> code1
'Python'
>>> code2
'Java'

# 元组赋值可以用来快速交换元素
>>> code1,code2 = 'Python', 'Java'
>>> code1, code2 = code2, code1
>>> code1
'Java'
>>> code2
'Python'

# 元组赋值可以实现栈的数据结构
>>> L = [1,2,3,4]
>>> while L:
	front, L = L[0],L[1:]
	print(front, L)
	
1 [2, 3, 4]
2 [3, 4]
3 [4]
4 []

3.列表赋值

列表赋值和元组类似。操作形式不同。

# 列表赋值
>>> [code3,code4] = ['C++','C']
>>> code3
'C++'
>>> code4
'C'

4.序列赋值

任何值的序列都可以赋值给任何名称的序列,Python会按照位置一次性完成所有的赋值。

# 注意变量名称要和对象一一对应。不然会报错。
>>> s1, s2, s3, s4, s5, s6 = 'Python'
>>> [s1, s2, s3, s4, s5, s6]
['P', 'y', 't', 'h', 'o', 'n']

# 序列赋值的另一种操作
>>> ((s1,s2),s3)=('Py','thon')
>>> s1,s2,s3
('P', 'y', 'thon')

5.扩展序列解包

可以理解为自动切片赋值。

# 扩展序列解包
>>> s1,*s2 = 'Python'
>>> [s1, s2]
['P', ['y', 't', 'h', 'o', 'n']]
>>> s2

# 当使用一个带星号的名称时,左侧的目标数目不必等于右侧的对象书目。
>>> *a,b,c = 'Python'
>>> a,b,c
(['P', 'y', 't', 'h'], 'o', 'n')
>>> a,*b,c = 'Python'
>>> a,b,c
('P', ['y', 't', 'h', 'o'], 'n')
>>> a,b,*c = 'Python'
>>> a,b,c
('P', 'y', ['t', 'h', 'o', 'n'])

# 扩展序列解包遇到单个的项,会向其赋值一个列表。
>>> a,b,c,*d = '1234'
>>> a,b,c,d
('1', '2', '3', ['4'])
# 当没有可扩展的项时,会赋值一个空的列表。
>>> a,b,c,d,*e = '1234'
>>> a,b,c,d,e
('1', '2', '3', '4', [])

# 序列解包常用来处理“第一项,剩余项”需求
>>> L = [1,2,3,4]
>>> a, *b = L
>>> a,b
(1, [2, 3, 4])

# 序列解包常用来处理“最后一项,剩余项”需求
>>> L = [1,2,3,4]
>>> *a,b = L
>>> a,b
([1, 2, 3], 4)

6.多目标赋值

指的是链式赋值。相同对象给所有目标引用。

# 多重目标赋值
>>> a = b = [1,3]
>>> a
[1, 3]
>>> b
[1, 3]

等效于
b = [1,3]
a = b

需要注意区分对象是可变的还是不可变的。
当对象是可变对象时,发生的操作是对象的变化。
当对象是不可变对象时,发生的操作是引用的变化。

7.增量赋值

表达式和赋值语句结合到一起的简写形式

# 增量赋值
>>> a = 100
>>> a += 100

等效于
a = a + 100

增量赋值的语句有将运算符放在等号前
格式为

变量名 运算符 赋值符号 对象

等效

变量名 赋值符号 变量名 运算符 对象

是一种在允许的条件下原位置处理对象的方法。所以比经过复制之后再运算要快一些。

变量命名规则

Python中,变量命名遵循一般语法——(下划线或字母)+(字母,数字,下划线);区分大小写;不允许使用保留字——关键字。

Python中的常用关键字有——False,True,finally,is,return,None,continue,for,lambda,try,class,def,from,nonlocal,while,and,del,global,not,with,as,if,elif,else,or,yield,assert,import,pass,break,except,in,raise等

在Python中,以单一下划线开头的名称不会被from module import*格式语句导入;前后均有双下划线的名称是系统定义的名称;以双下划线开头,结尾没有下划线的名称是外围类的本地变量;通过交互式命令行运行时,只有单个下划线的名称会保存最后一个表达式的结果。

在Python中,名称永远只是对象的引用。名称存在于作用域中,作用域决定了名称可以使用的范围;一个名称赋值的位置决定了名称的作用域范围。

更多详细名称命名规则参考PEP8。

表达式语句

表达式通常在调用函数和方法;在交互式命令行下打印值时用作语句。

表达式语句是单独的一条语句,不能作为表达式嵌套在语句中。

常见的表达式语句

1.函数调用

2.方法调用

3.在交互式解释器中打印变量

4.print()中打印

5.yield表达式语句

打印print操作

Python中的pirnt语句可以实现打印,是一个程序员友好的标准输出流接口。

Python的打印操作与文件和流——stdout的概念紧密相连。

print默认把对象写入stdout流,同时加入一些自动的格式化。

stdout——标准输出流是发送一个程序文本输出的默认位子。是脚本启动时创建的3种数据连接的一种。通常映射到Python程序的启动窗口,除非它已在操作系统的shell中被重新定向到文件或管道。由于stdout在Python中可以作为内置的sys模块中的stdout文件对象来使用,我们可以用文件写入的方法调用来模拟print。

# print()语句的格式

print([object,...][,sep = ''][, end = '\n'][,file = sys.stdout][, flush = False])

sep用来分割中间字符串。默认值是空格。
end用来加上结尾字符串。默认值是换行符。
file用来定义输出流。默认值是sys.stdout。
flush用来决定是否刷新输出缓冲区。默认值是False。

>>> x,y,z = 'Java', 'Python', 'C++'

>>> print(x,y,z)
Java Python C++

>>> print(x,y,z,sep=',')
Java,Python,C++

>>> print(x,y,z,end='bbb')
Java Python C++bbb

file可以写入文件中。file = opem('文件路径', 'w')

打印流重定向

有时我们要把文本发送到其他地方,如文本文件中以便存储结果供以后使用和测试。

# 模拟print()函数
>>> print('Hello world')
Hello world

>>> import sys
>>> sys.stdout.write('Hello world\n')
Hello world
12

# print()背后的事

print(x, y)

实际上在做

import sys
sys.stdout.write(str(x) + ' ' + str(y) + '\n')

# 手动流重定向
>>> import sys
>>> temp = sys.stdout 存储sys.stdout对象
>>> sys.stdout = open('log.txt', 'a') #生成一个log.txt文件 , 将文件对象指向sys.stdout
>>> print('Java') #此时打印内容写向该文件
>>> print(1,2,3) #此时打印内容写向该文件
>>> sys.stdout.close()
>>> sys.stdout = temp #恢复sys.stdout对象
>>> print(open('log.txt').read())
Java
1 2 3

#自动流定向
>>> log = open('log.txt','a')
>>> print('Python', file = log)
>>> print('C++', file = log)
>>> log.close()
>>> print(open('log.txt').read())
Java
1 2 3
Python
C++

你可能感兴趣的:(小白的python学习之路,python)