「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」
指定最小输出宽度
- %10d 表示输出的整数宽度至少为 10;
- %20s 表示输出的字符串宽度至少为 20。
对于整数和字符串,当数据的实际宽度小于==指定宽度==时,会在左侧以空格补齐;当数据的实际宽度大于指定宽度时,会按照数据的实际宽度输出。
n = 1234567
print("n(10): %3d" % n)
print("n(10): %10d" % n)
//运行结果
n(10): 1234567
n(10): 1234567
指定对齐方式
默认情况下,print() 输出的数据总是右对齐的。也就是说,当数据不够宽时,数据总是靠右边输出,而在左边补充空格以达到指定的宽度。Python 允许在最小宽度之前增加一个标志来改变对齐方式,Python 支持的标志如下:
| 标志 | 说明 |
|---|---|
| - | 指定左对齐 |
| + | 表示输出的数字总要带着符号;正数带+,负数带-。 |
| 0 | 表示宽度不足时补充 0,而不是补充空格。 |
- 对于整数,指定左对齐时,在右边补 0 是没有效果的,因为这样会改变整数的值。
- 对于小数,以上三个标志可以同时存在。
- 对于字符串,只能使用
-标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值。
n = 123456
# %09d 表示最小宽度为9,左边补0
print("n(09):%09d" % n)
# %+9d 表示最小宽度为9,带上符号
print("n(+9):%+9d" % n)
f = 140.5
# %-+010f 表示最小宽度为10,左对齐,带上符号
print("f(-+0):%-+010f" % f)
s = "Hello"
# %-10s 表示最小宽度为10,左对齐
print("s(-10):%-10s." % s)
运行结果
n(09):000123456
n(+9): +123456
f(-+0):+140.500000
s(-10):Hello .
指定小数精度
对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即==指定小数的输出精度==。
精度值需要放在最小宽度之后,中间用点号.隔开;也可以不写最小宽度,只写精度。
语法
%m.nf
%.nf
m 表示最小宽度,n 表示输出精度,.是必须存在的。
f = 3.141592653
# 最小宽度为8,小数点后保留3位
print("%8.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0
print("%08.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0,带符号
print("%+08.3f" % f)
运行结果
3.142
0003.142
+003.142
转义字符
转义字符以\0或者\x开头,以\0开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值,Python 中的转义字符只能使用八进制或者十六进制。具体格式如下:
\0dd
\xhh
dd 表示八进制数字,hh 表示十六进制数字。
ASCII 编码共收录了 128 个字符,\0和\x后面最多只能跟两位数字,所以八进制形式\0并不能表示所有的 ASCII 字符,只有十六进制形式\x才能表示所有 ASCII 字符。
我们一直在说 ASCII 编码,没有提及 Unicode、GBK、Big5 等其它编码(字符集),是因为 Python 转义字符只对 ASCII 编码(128 个字符)有效,超出范围的行为是不确定的。
str1 = "Oct: \061\062\063"
str2 = "Hex: \x31\x32\x33\x78\x79\x7A"
print(str1)
print(str2)
运行结果
Oct: 123
Hex: 123xyz
**Python 支持的转义字符 **
| 转义字符 | 说明 |
|---|---|
| \n | 换行符,将光标位置移到下一行开头。 |
| \r | 回车符,将光标位置移到本行开头。 |
| \t | 水平制表符,也即 Tab 键,一般相当于四个空格。 |
| \a | 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。 |
| \b | 退格(Backspace),将光标位置移到前一列。 |
| \ | 反斜线 |
| ' | 单引号 |
| " | 双引号 |
| \ | 在字符串行尾的续行符,即一行未完,转到下一行继续写。 |
数据类型转换函数大全
| 函 数 | 作 用 |
|---|---|
| int(x) | 将 x 转换成整数类型 |
| float(x) | 将 x 转换成浮点数类型 |
| complex(real,[,imag]) | 创建一个复数 |
| str(x) | 将 x 转换为字符串 |
| repr(x) | 将 x 转换为表达式字符串 |
| eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
| chr(x) | 将整数 x 转换为一个字符 |
| ord(x) | 将一个字符 x 转换为它对应的整数值 |
| hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
| oct(x) | 将一个整数 x 转换为一个八进制的字符串 |
算术运算符
| 运算符 | 说明 | 实例 | 结果 |
|---|---|---|---|
| + | 加 | 12.45 + 15 | 27.45 |
| - | 减 | 4.56 - 0.26 | 4.3 |
| * | 乘 | 5 * 3.6 | 18.0 |
| / | 除法(和数学中的规则一样) | 7 / 2 | 3.5 |
| // | 整除(只保留商的整数部分) | 7 // 2 | 3 |
| % | 取余,即返回除法的余数 | 7 % 2 | 1 |
| ** | 幂运算/次方运算,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
Python 支持/和//两个除法运算符,但它们之间是有区别的:
/表示普通除法,使用它计算出来的结果和数学中的计算结果相同。//表示整除,只保留结果的整数部分,舍弃小数部分;注意是直接丢掉小数部分,而不是四舍五入。/的计算结果总是小数,不管是否能除尽,也不管参与运算的是整数还是小数。- 当有小数参与运算时,
//结果才是小数,否则就是整数。
需要注意的是,除数始终不能为 0,除以 0 是没有意义的,这将导致 ZeroDivisionError 错误。在某些编程语言中,除以 0 的结果是无穷大(包括正无穷大和负无穷大)。
- 由于开方是次方的逆运算,所以也可以使用 ** 运算符间接地实现开方运算。
print('----开方运算----')
print('81**(1/4) =', 81**(1/4))
print('32**(1/5) =', 32**(1/5))
赋值运算符
- 连续赋值
- 扩展后的赋值运算符
| 运算符 | 说 明 | 用法举例 | 等价形式 |
|---|---|---|---|
| = | 最基本的赋值运算 | x = y | x = y |
| += | 加赋值 | x += y | x = x + y |
| -= | 减赋值 | x -= y | x = x - y |
| *= | 乘赋值 | x *= y | x = x * y |
| /= | 除赋值 | x /= y | x = x / y |
| %= | 取余数赋值 | x %= y | x = x % y |
| **= | 幂赋值 | x **= y | x = x ** y |
| //= | 取整数赋值 | x //= y | x = x // y |
| &= | 按位与赋值 | x &= y | x = x & y |
| |= | 按位或赋值 | x |= y | x = x | y |
| ^= | 按位异或赋值 | x ^= y | x = x ^ y |
| <<= | 左移赋值 | x <<= y | x = x << y,这里的 y 指的是左移的位数 |
| >>= | 右移赋值 | x >>= y | x = x >> y,这里的 y 指的是右移的位数 |
- 这种赋值运算符只能针对已经存在的变量赋值,因为赋值过程中需要变量本身参与运算,如果变量没有提前定义,它的值就是未知的,无法参与运算。
位运算符
Python 位运算符只能用来操作整数类型,它按照整数在内存中的二进制形式进行计算。
| 位运算符 | 说明 | 使用形式 | 举 例 |
|---|---|---|---|
| & | 按位与 | a & b | 4 & 5 |
| | | 按位或 | a | b | 4 | 5 |
| 按位异或 | a ^ b | 4 ^ 5 | |
| ~ | 按位取反 | ~a | ~4 |
| << | 按位左移 | a << b | 4 << 2,表示整数 4 按位左移 2 位 |
| >> | 按位右移 | a >> b | 4 >> 2,表示整数 4 按位右移 2 位 |
比较运算符
比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)。
| 比较运算符 | 说明 |
|---|---|
大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。 | |
| < | 小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。 |
| == | 等于,如果==两边的==值相等==,则返回 True,否则返回 False。 |
| >= | 大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
| <= | 小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
| != | 不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。 |
| is | 判断两个变量所引用的==对象是否相同==,如果相同则返回 True,否则返回 False。 |
| is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
== 和 is的区别
== 用来比较两个变量的值是否相等,而 is 则用来比对两个变量引用的是否是同一个对象(内存地址是否相同)。
import time #引入time模块
t1 = time.gmtime() # gmtime()用来获取当前时间
t2 = time.gmtime()
print(t1 == t2) #输出True
print(t1 is t2) #输出False
time 模块的 gmtime() 方法用来获取当前的系统时间,精确到秒级,因为程序运行非常快,所以 t1 和 t1 得到的时间是一样的。== 用来判断 t1 和 t2 的值是否相等,所以返回 True。
虽然 t1 和 t2 的值相等,但它们是两个不同的对象(每次调用 gmtime() 都返回不同的对象),所以t1 is t2返回 False。这就好像两个双胞胎姐妹,虽然她们的外貌是一样的,但它们是两个人。**
那么,==如何判断两个对象是否相同呢?答案是判断两个对象的内存地址==。如果内存地址相同,说明两个对象使用的是同一块内存,当然就是同一个对象了;这就像两个名字使用了同一个身体,当然就是同一个人了。
逻辑运算符
| 逻辑运算符 | 含义 | 基本格式 | 说明 |
|---|---|---|---|
| and | 逻辑与运算,等价于数学中的“且” | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
| or | 逻辑或运算,等价于数学中的“或” | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
| not | 逻辑非运算,等价于数学中的“非” | not a | 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。 |
-
Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型
-
逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。
print(100 and 200)
print(45 and 0)
print("" or "http://c.biancheng.net/python/")
print(18.5 or "http://c.biancheng.net/python/")
// 输出结果
200
0
http://c.biancheng.net/python/
18.5
逻辑运算符本质
- 在 Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。
- and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。
三目运算符
max = a if a>b else b
这是一种类似于其它编程语言中三目运算符? :的写法。Python 是一种极简主义的编程语言,它没有引入? :这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。
等价于
if a>b:
max = a;
else:
max = b;
语法
exp1 if contion else exp2
三目运算符嵌套
语法:
a if a>b else ( c if c>d else d )
demo
a = int(input("Input a: "))
b = int(input("Input b: "))
print("a大于b") if a>b else (print("a小于b") if a<b else print("a等于b"))
运算符优先级和结合性一览表
| 运算符说明 | Python运算符 | 优先级 | 结合性 | 优先级顺序 |
|---|---|---|---|---|
| 小括号 | ( ) | 19 | 无 | 高 |
| 索引运算符 | x[i] 或 x[i1: i2 [:i3]] | 18 | 左 | |
| 属性访问 | x.attribute | 17 | 左 | |
| 乘方 | ** | 16 | 右 | |
| 按位取反 | ~ | 15 | 右 | |
| 符号运算符 | +(正号)、-(负号) | 14 | 右 | |
| 乘除 | *、/、//、% | 13 | 左 | |
| 加减 | +、- | 12 | 左 | |
| 位移 | >>、<< | 11 | 左 | |
| 按位与 | & | 10 | 右 | |
| 按位异或 | 9 | 左 | ||
| 按位或 | | | 8 | 左 | |
| 比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 | |
| is 运算符 | is、is not | 6 | 左 | |
| in 运算符 | in、not in | 5 | 左 | |
| 逻辑非 | not | 4 | 右 | |
| 逻辑与 | and | 3 | 左 | |
| 逻辑或 | or | 2 | 左 | |
| 逗号运算符 | exp1, exp2 | 1 | 左 | 低 |