|
| 1 | +# 格式化输出 |
| 2 | +Python的print语句,与字符串操作符(%)组合使用,可实现字符串替换功能,类似于C语言的printf()函数。 |
| 3 | + |
| 4 | + >>>"%s is number %d" % ('Python', 1) |
| 5 | + Python is number 1 |
| 6 | + >>> "%s price is %f" % ('Core Python Programming', 31.25) |
| 7 | + Core Python Programming price is 31.250000 |
| 8 | + |
| 9 | +## 字符串格式化符号 |
| 10 | + |
| 11 | +* `%c` 转换成字符(ASCII 码值,或者长度为一的字符串) |
| 12 | +* `%r` 优先用repr()函数进行字符串转换 |
| 13 | +* `%s` 优先用str()函数进行字符串转换 |
| 14 | +* `%d / %i` 转成有符号十进制数 |
| 15 | +* `%u` 转成无符号十进制数 |
| 16 | +* `%o` 转成无符号八进制数 |
| 17 | +* `%x/%X` (Unsigned)转成无符号十六进制数(x/X 代表转换后的十六进制字符的大小写) |
| 18 | +* `%e/%E` 转成科学计数法(e/E 控制输出e/E) |
| 19 | +* `%f/%F` 转成浮点数(小数部分自然截断) |
| 20 | +* `%g/%G` %e 和%f/%E 和%F 的简写 |
| 21 | +* `%%` 输出% |
| 22 | + |
| 23 | +## 格式化操作符辅助指令 |
| 24 | + |
| 25 | +* `*` 定义宽度或者小数点精度 |
| 26 | +* `-` 用做左对齐 |
| 27 | +* `+` 在正数前面显示加号( + ) |
| 28 | +* `<sp>` 在正数前面显示空格 |
| 29 | +* `#` 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
| 30 | +* `0` 显示的数字前面填充‘0’而不是默认的空格 |
| 31 | +* `(var)` 映射变量(字典参数) |
| 32 | +* `m.n` m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
| 33 | + |
| 34 | +十六进制输出: |
| 35 | + |
| 36 | + >>> "%x" % 108 |
| 37 | + '6c' |
| 38 | + >>> "%X" % 108 |
| 39 | + '6C' |
| 40 | + >>> "%#X" % 108 |
| 41 | + '0X6C' |
| 42 | + >>> "%#x" % 108 |
| 43 | + '0x6c' |
| 44 | + |
| 45 | +浮点数和科学记数法形式输出: |
| 46 | + |
| 47 | + >>> '%f' % 1234.567890 |
| 48 | + '1234.567890' |
| 49 | + >>> |
| 50 | + >>> '%.2f' % 1234.567890 |
| 51 | + '1234.57' |
| 52 | + >>> |
| 53 | + >>> '%E' % 1234.567890 |
| 54 | + '1.234568E+03' |
| 55 | + >>> |
| 56 | + >>> '%e' % 1234.567890 |
| 57 | + '1.234568e+03' |
| 58 | + >>> |
| 59 | + >>> '%g' % 1234.567890 |
| 60 | + '1234.57' |
| 61 | + >>> |
| 62 | + >>> '%G' % 1234.567890 |
| 63 | + '1234.57' |
| 64 | + >>> |
| 65 | + >>> "%e" % (1111111111111111111111L) |
| 66 | + '1.111111e+21' |
| 67 | + |
| 68 | +整数和字符串输出: |
| 69 | + |
| 70 | + >>> "%+d" % 4 |
| 71 | + '+4' |
| 72 | + >>> |
| 73 | + >>> "%+d" % -4 |
| 74 | + '-4' |
| 75 | + >>> |
| 76 | + >>> "we are at %d%%" % 100 |
| 77 | + 'we are at 100%' |
| 78 | + >>> |
| 79 | + >>> 'Your host is: %s' % 'earth' |
| 80 | + 'Your host is: earth' |
| 81 | + >>> |
| 82 | + >>> 'Host: %s\tPort: %d' % ('mars', 80) |
| 83 | + 'Host: mars Port: 80' |
| 84 | + >>> |
| 85 | + >>> num = 123 |
| 86 | + >>> 'dec: %d/oct: %#o/hex: %#X' % (num, num, num) |
| 87 | + 'dec: 123/oct: 0173/hex: 0X7B' |
| 88 | + >>> |
| 89 | + >>> "MM/DD/YY = %02d/%02d/%d" % (2, 15, 67) |
| 90 | + 'MM/DD/YY = 02/15/67' |
| 91 | + >>> |
| 92 | + >>> w, p = 'Web', 'page' |
| 93 | + >>> 'http://xxx.yyy.zzz/%s/%s.html' % (w, p) |
| 94 | + 'http://xxx.yyy.zzz/Web/page.html' |
| 95 | + |
| 96 | +上面的例子都是使用的元组类型的参数作转换.下面我们将把字典类型的参数提供给格式化操作符. |
| 97 | + |
| 98 | + >>> 'There are %(howmany)d %(lang)s Quotation Symbols' % \ |
| 99 | + ... {'lang': 'Python', 'howmany': 3} |
| 100 | + 'There are 3 Python Quotation Symbols' |
| 101 | + |
| 102 | +print语句默认会给每一行添加一个换行符。 |
| 103 | + |
| 104 | +```python |
| 105 | +for eacnNum in range(3): |
| 106 | + print eacnNum |
| 107 | +``` |
| 108 | + |
| 109 | +输出: |
| 110 | + |
| 111 | + 0 |
| 112 | + 1 |
| 113 | + 2 |
| 114 | + |
| 115 | +只要在print语句的最后添加一个逗号(,),就可以改变它这种行为。但带逗号的print语句输出的元素之间会自动添加一个空格。 |
| 116 | + |
| 117 | +```python |
| 118 | +for eacnNum in range(3): |
| 119 | + print eacnNum, |
| 120 | +``` |
| 121 | + |
| 122 | +输出: |
| 123 | + |
| 124 | + 0 1 2 |
| 125 | + |
| 126 | +在按行读文件时,尤其需要注意这一点。下面使用了逗号来抑制自动生成换行符,因为按行读文件本身也会自动添加换行符。如果不添加逗号,会出现读出来的每行内容中间都会空一行的情况。 |
| 127 | + |
| 128 | +```python |
| 129 | +with open('test_main.py', 'r') as f: |
| 130 | + for line in f: |
| 131 | + print line, |
| 132 | +``` |
0 commit comments