Rust语言(4):格式化输出

本文对比Rust与Python语言的格式化输出。

写在前面

本文所用Rust版本为1.14.0,Python为2.7.12
可以使用在线编译调试工具来测试本文所举示例代码。
Rust playground
Python playground

basic usage

Rust与Python都可以用{}来表示将要被替换变量的占位符。

Rust

  • print!将格式化文本输出到控制台,不带换行符。
  • println!将格式化文本输出到控制到,末尾加一个换行符。
  • format!将格式化文本输出到字符串。
Rust
1
2
3
4
5
6
7
print!("{}.print is output to console w/o newline.", 1);
print!("Continue...");
print!("\n");
println!("{}.println is string to console w/ newline.", 2);
let str = format!("{}.format is output to a string.", 3);
assert_eq!(str, "3.format is output to a string.");
println!("{}", str);

Python2.7

  • print来打印文本到控制台,末尾加一个换行符。
  • str.format()将格式化文本输出到字符串。
Python2.7
1
print("{} world".format("Hello"))

with arguments

  • more arguments
  • positional arguments
  • named arguments
Rust
1
2
3
println!("{}, {}", "Hello", "world");
println!("{0}, this is {1}. {1}, this is {0}.", "Hellen", "Tom");
println!("{subject} {verb} {object}", object="the lazy dog", subject="the quick brwon fox", verb="jumps over");
Python2.7
1
2
3
print("{},{}".format("hello", "world"))
print("{0}, this is {1}. {1}, this is {0}.".format("Hellen", "Tom"))
print("{subject} {verb} {object}".format(object="the lazy dog", subject="the quick brown fox", verb="jumps over"))

special format

数字 Rust格式 Python格式 输出 描述
3.1415926 {:.2} {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2} {:+.2f} +3.14 带符号保留小数点后两位
-1 {:+.2} {:+.2f} -1(R)/-1.00(P) 带符号保留小数点后两位
-1.0 {:+.2} {:+.2f} -1.00 带符号保留小数点后两位
2.71828 {:.0}} {:.0f} 3 不带小数
5 {:0>2}/{:02} {:0>2d}/{:02d} 05 数字补0 (填充左边, 宽度为2)
5 {:x^10} {:x^10d} xxxx5xxxxx 居中对齐
5 {:x<4} {:x<4d} 5xxx 数字补x (填充右边, 宽度为4)
1000000 NA. {:,} 1,000,000 以逗号分隔的数字格式
0.25 NA. {:.2%} 25.00% 百分比格式
1000000000 NA. {:.2e} 1.00e+09 指数记法
1000000000.0 {:2e} {:.2e} 1e9(R)/1.00e+09(P) 指数记法
1000000000.0 {:2E} {:.2E} 1E9(R)/1.00E+09(P) 指数记法
42 {:b} {:b} 101010 二进制
42 {:o} {:o} 52 八进制
42 {:x} {:x} 2a 十六进制
42 {:X} {:X} 2A 十六进制
42 {:#b} {:#b} 0b101010 带前缀的二进制
42 {:#o} {:#o} 0o52 带前缀的八进制
42 {:#x} {:#x} 0x2a 带前缀的十六进制
42 {:#X} {:#X} 0x2A(R)/0X2A(P) 带前缀的十六进制
Rust precision specified in arg
1
2
//第一个参数是小数点后的位数
println!("Pi is {:+.*}", 2, 3.1415926);

escape {}

Rust escape{}
1
println!("{{ {t} }}", t="escape");
Python escape{}
1
print(" The {} set is often represented as { {0} } ".format("empty"))

References:

  1. Rust print
  2. Module std::fmt
  3. Python格式字符串(译)
  4. how-to-print-without-newline-or-space