基础篇_004_基本数据类型_字符串的拼接(格式化)_详

  在"基础篇_004_基本数据类型_几种重要函数的整理"中的第8个函数中,提到了字符串类型的内置函数format(),然后乘势将字符串的拼接(格式化)开了一个小头,但是由于主题是基本数据类型的重要函数的整理,所以就没有过多阐述,而放置本文结束字符串的拼接(如果有不全的和有纰漏的地方,还望大家评论区中指出)。

----非函数的字符串格式化

  1. 用 "%" 来拼接字符 ===》

 1 # 1. 用 "%s" 来充当占位符,共5小点
 2 # --(1). 平凡的形式
 3 string = "My name is %s, and my best friend is %s" % ("SimbaWang", "Yangtze River") # 没错,就是江锅
 4 print(string)   # 输出结果为:My name is SimbaWang, and my best friend is Yangtze River
 5 
 6 # --(2). 以字典的键值对相匹配的形式拼接,除了这种以一对应的形式外,
 7 # 还可以像之前在"基础篇_004_基本数据类型_几种重要函数的整理"第8个函数:format() ===》
 8 string = "My name is %(name)s, and my age is %(age)d" % {"name": "SimbaWang", "age": 19}
 9 print(string)   # 输出结果为:My name is SimbaWang, and my age is 19
10 
11 # --(3). 邪教方法,如果只想要传入字符串的前n位,则可以用:%.ns ===》
12 string = "My first name is %.5s" % "SimbaWang"
13 print(string)   # 输出结果为:My first name is Simba
14 
15 # --(4). %s并不是仅仅能充当字符串的占位符,它是万能的占位符 ===》
16 string = "My hobby is %s, and my age is %s" % (["computer", "basketball", "soccer"], 19)
17 print(string)   # 输出结果为:My hobby is ['computer', 'basketball', 'soccer'], and my age is 19
18 
19 # --(5). 当然这里除了%s之外还有很多其他的占位符,eg:%d, %f(默认保留6位小数,遵循四舍五入的规则)...
20 string = "I have %.2f RMB" % 17.336 # 当只有一个元素的时候可以将()去掉
21 print(string)   # 输出结果为:I have 17.34 RMB

上面有提到 "%" 后面不只有s,还有很多,那这里就给出总结 ===》

 1 # 总结:使用 "%" 拼接字符串的使用方式,[]内表示可选选项,其他为必选
 2 # 总公式为:%[(key_name)][fill_character_and_sign][width][.precision]type_code
 3 # 1. (key_name):可选选项,用于选择指定的key,作为一个占位符,直到有value过来替换。
 4 string_key_name = "I love %(string_key_name)s" % {"string_key_name": "computer"}
 5 print(string_key_name)  # 输出:I love computer
 6 
 7 # 2. fill_character_and_sign:用于格式化数字的,一共有4种
 8 # 由于涉及到对齐方式,所以加上了width,这里设置为6
 9 # --(1).  +   :右对齐;正数前加正号,负数前加负号;
10 print("%+6d" % 123)     # 输出:  +123
11 print("%+6d" % -123)    # 输出:  -123
12 # --(2).  -   :左对齐;正数前无符号,负数前加负号;
13 print("%-6d" % 123)     # 输出:123
14 print("%-6d" % -123)    # 输出:-123
15 # --(3). 空格 :右对齐;正数前加空格,负数前加负号;
16 print("% 6d" % 123)     # 输出:   123
17 print("% 6d" % -123)    # 输出:  -123
18 # --(4).  0   :右对齐;正数前无符号,负数前加负号;用0填充空白处
19 print("%06d" % 123)     # 输出:000123
20 print("%06d" % -123)    # 输出:-00123
21 
22 # 3. width:可选,占有宽度,见(2)的例子
23 
24 # 4. .precision:可选,小数点后保留的位数(type_code: f) / 截取前几位字符串(type_code: s)。
25 string = "My first name is %.5s" % "SimbaWang"
26 print(string)   # 输出结果为:My first name is Simba
27 # 分隔线
28 string = "I have %.2f RMB" % 17.336 # 当只有一个元素的时候可以将()去掉
29 print(string)   # 输出结果为:I have 17.34 RMB
30 
31 # 5. type_code:必选
32 # --(01). s(str字符串):这个就不多赘述了,上面都有
33 # --(02). f, F(float):默认保留6位小数
34 # --(03). d(digit):整数
35 # --(04). c(character) ===》
36     # 若为整数:将数字转换成其unicode对应的值,范围:[0, 1114111](10);
37     # 若为字符:将字符添加到指定位置;
38 print("%c" % 97)    # 输出:a
39 print("%c" % 's')   # 输出:s
40 # --(05). o(octal):八进制
41 # --(06). x(hex):十六进制
42 # --(07). e, E(exponent指数记数,就是科学记数):在数的后面分别加上e / E
43 # --(08). g, G(global):打开全局匹配,自动动调整将整数、浮点数转换成浮点型(默认保留6位小数),
44 #                       或着用科学计数法表示(超过6位数用科学计数法,加上e / E)
45 print("%g" % 12232323.44444444) # 输出:1.22323e+07
46 print("%G" % 12232323.44444444) # 输出:1.22323E+07
47 # --(09). %:输出"%"(这个不能单独使用,前面或者后面必须要再来一个字符串拼接) ===》
48 print("%%")         # 输出:%%
49 print("%% %d" % 2)  # 输出:% 2
50 # --(10). r(_repr_):获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
51 # 先欠着,还没学到这里

  这里在补充一点"邪教"的冷知识:如何让你的print()变得丰富多彩 ===》

 话不多说,直接上公式:string = "\033[parameter1;parameter2;parameter3m" + "your_sentence" + "\033[0m"

  1. "\033": 引导非常规字符序列。

  2. "m": 意味着设置属性然后结束非常规字符序列。

  3. 三个参数 ===》

# parameter1: 设置背景色,取值范围为:[41, 49]
 # 40: 黑, 41: 红, 42: 黄绿, 43: 黄,
 # 44: 蓝, 45: 紫, 46: 浅青, 47: 白,
 # 49: 设置缺省背景
# parameter2: 设置字体的颜色
 # 30: 黑, 31: 红, 32: 黄绿, 33: 黄,
 # 34: 蓝, 35: 紫, 36: 浅青, 37: 白,
 # 38:在缺省的前景颜色上设置下划线
 # 39:在缺省的前景颜色上关闭下划线
# parameter3: 设置显示效果
 # 0:不使用效果    1:高亮(加深)显示     2:低亮(减弱)显示(windows和pycharm不显示)
 # 4:下划线      5:闪烁(windows和pycharm不显示)
 # 7:反显(替换背景色和字体颜色)       8:消隐(windows和pycharm不显示)

# 三参数结束---------------------------------------------
  4. 在最后面的"\033[0m"是为了消除对后面格式的影响。
  5. "\007"是发出Windows的警告声 ===》print("\007hello world"),但是一句只能发出一声,而且在pycharm中无效果,只能用Windows的cmd,进入python解释器才有效果。

 详见(转载声明↓):Michael-H的文章 
CI_Knight >> printf有趣的\033 

 

----format()函数

  1. 除了在"基础篇_004_基本数据类型_几种重要函数的整理"中的第8个函数:format()以外,还有一些方式。

  2. {:type_code}以及其2种衍生物 ===》

 1 # 1. {:type_code}:按参数传入的顺序依次取出,参数的个数 ≥ {}的个数
 2 my_string = "My name is {:s}, and my age is {:d}"
 3 my_string_format = my_string.format("SimbaWang", 14, 14)
 4 print(my_string_format) # 输出结果:My name is SimbaWang, and my age is 14
 5 # 2. {number:type_code}:就是将number与参数的顺序一一对应填入
 6 my_string = "My name is {0:s}, and my age is {2:d}"
 7 my_string_format = my_string.format("SimbaWang", 14, 14)
 8 print(my_string_format) # 输出结果:My name is SimbaWang, and my age is 14
 9 # 3. {key:type_code}:就是将key与参数的key = value的value一一对应填入
10 my_string = "My name is {name:s}, and my age is {age:d}"
11 my_string_format = my_string.format(age = 14, name = "SimbaWang")
12 print(my_string_format) # 输出结果:My name is SimbaWang, and my age is 14

其实format()函数的用法也是千奇百怪 ===》

公式为(均为可选):{[number][fill_character + align][sign][#][width][,][.precision][:type_code]}

 1 # format()函数总结:
 2 # # 公式为(均为可选):{[number][:][fill_character + align][sign][#][width][,][.precision][type_code]}
 3 # 1. number ===》序号,与参数列表的序号一一对应(由0开始递增)
 4 
 5 # 2. fill_character + align ===》填充的字符 + 水平对齐的方式(需要width的配合)
 6 # --(1). <: 内容左对齐,填充字符在右边(字符串类型的默认)
 7 print("{:s<6s}".format("123"))  # 输出:123sss
 8 # --(2). >: 内容右对齐,填充字符在左边(数字类型的默认)
 9 print("{:s>6s}".format("123"))  # 输出:sss123
10 # --(3). ^: 内容居中对齐,填充字符在两侧,与center()函数一样,满足"左" > "右"
11 print("{:s^6s}".format("123"))  # 输出:s123ss
12 # --(4). =: 内容右对齐,填充字符在两侧,仅限于数字类型
13 print("{:s^16f}".format(123))   # 输出:sss123.000000sss
14 
15 # 3. sign ===》正负号
16 # --(1).  +   : 正号加正,负号加负;
17 print("{:+d}".format(11))    # 输出:+11
18 print("{:+d}".format(-11))   # 输出:-11
19 # --(2).  -   : 正号不变,负号加负;
20 print("{:-d}".format(11))    # 输出:11
21 print("{:-d}".format(-11))   # 输出:-11
22 # --(3). 空格 : 正号空格,负号加负;
23 print("{: d}".format(11))    # 输出: 11(前面有空格)
24 print("{: d}".format(-11))   # 输出:-11
25 
26 # 4. # ===》对于二进制(b)、八进制(o)、十六进制(x),如果加上#,会显示 0b/0o/0x,否则不显示
27 print("{:#b}".format(132))  # 输出:0b10000100
28 print("{:#o}".format(132))  # 输出:0o204
29 print("{:#x}".format(132))  # 输出:0x84
30 
31 # 5. width ===》至少有多宽
32 
33 # 6. , ===》是否采用财务式记数法,eg:1,000,000
34 
35 # 7. .precision ===》若是浮点数(整数不行)则四舍五入;若是字符串则直接截取
36 
37 # 8. type_code ===》占位符替换的类型
38 
39 # 汇总:
40 print("{1:s^+#15,.2f}".format(123.3, 132))  # 输出:ssss+132.00ssss

(有一说一,我要si了~)

----未完待续

 

    

 

posted @ 2020-02-11 14:30  BNTU  阅读(230)  评论(0)    收藏  举报