Python学习笔记:快速上手:基础知识
快速上手:基础知识
数和表达式
- 除法
>>> 1 / 2
0.5
>>> 1 / 1
1.0
- 整除
>>> 1 // 2
0
>>> 1 // 1
1
>>> 5.0 // 2.4
2.0
- 求余(求模): x % y 等价于x - ((x // y) * y)。
>>> 10 // 3
3
>>> 10 3 %
1
>>> 9 // 3
3
>>> 9 3 %
0
>>> 2.75 0.5 %
0.25
对负数求余
# 整除运算 向下圆整floor()
>>> 10 // 3
3
>>> 10 // -3
-4
>>> -10 // 3
-4
>>> -10 // -3
3
- 乘法运算
# 乘方运算符的优先级比求负(单目减)高
>>> -3 ** 2
-9
>>> (-3) ** 2
9
变量
在Python中,名称(标识符)只能由字母、数字和下划线(_)构成,且不能以数字打头。因此Plan9是合法的变量名,而9Plan不是。
PS:为什么不能以数字打头:
原因一 词法分析说 因为每次输入“头符号”后要判断该符号是数字还是字符,而禁止以数字开头只需要判断一次,很显然每一次都要判断是一种极大的浪费
原因二 现有的数据无法区分 “1e5”,“100L”,“10f”
字符串
在Python 3中,所有的字符串都是Unicode字符串
- str和repr
# str是一个类,repr是一个函数
>>> print("Hello,\nworld!")
Hello,
world!>>> print(repr("Hello,\nworld!"))
'Hello,\nworld!'
>>> print(str("Hello,\nworld!"))
Hello,
world!
- 长字符串 三引号’‘’
# 使用三个双引号。因此字符串本身可包含单引号和双引号,无需使用反斜杠进行转义
print('''This is a very long string. It continues here.
And it's not over yet. "Hello, world!"
Still here.''')
- 原始字符串 r’’
>>> print(r'C:\nowhere')
C:\nowhere
>>> print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bozz')
C:\Program Files\fnord\foo\bar\baz\frozz\bozz
不能以反斜杠结尾
>>> print(r"This is illegal\")
SyntaxError: EOL while scanning string literal
指定以反斜杠结尾的原始字符串
>>> print(r'C:\Program Files\foo\bar' '\\')
C:\Program Files\foo\bar\
- Unicode、bytes和bytearray
Python字符串使用Unicode编码来表示文本,大致而言,每个Unicode字符都用一个码点(code point)表示,而码点是Unicode标准给每个字符指定的数字。
诸如C等编程语言中,这些字节完全暴露,而字符串不过是字节序列而已。
为与C语言互操作以及将文本写入文件或通过网络套接字发送出去,Python提供了两种类似的类型:不可变的bytes和可变的bytearray。
Unicode码点是使用整数定义的,而ASCII字符是使用对应的数及其二进制编码定义的。这一点好像无关紧要,原因之一是整数0~255和8位二进制数之间的映射是固定的,几乎没有任何机动空间。问题是超过1字节后,情况就不那么简单了:直接将每个码点表示为相应的二进制数可能不再可行。
有一种Unicode编码标准是基于这种考虑的,它就是UTF-32,但如果你主要处理的是使用互联网上常见语言书写的文本,那么使用这种编码标准将很浪费空间。
不使用全部32位,而是使用变长编码,即对于不同的字符,使用不同数量的字节进行编码。
>>> "Hello, world!".encode("ASCII")
b'Hello, world!'
>>> "Hello, world!".encode("UTF-8")
b'Hello, world!'
>>> "Hello, world!".encode("UTF-32")
b'\xff\xfe\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00,\x00\ x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00!\x00\ x00\x00'