在任何编程语言中,字符串的使用都是十分广泛的,所以说字符串的内容非常重要,本文主要探究一下字符串在python中的用法。
字符串的定义方式
用双引号引起来的就是字符串,这是毋庸置疑的;但是在python中的字符串有多种定义方式:
my_str1 = "双引号字符串"
my_str2 = '单引号字符串'
my_str3 = """三引号字符串"""
相较于Java语言,python中定义字符串多了单引号和三引号两种方式,但是使用得最多的方式还是传统的双引号字符串。还有一点需要特别注意的是,在python中,多行注释的定义方式也是三引号,假如说一个三引号定义的字符串,不用变量接收,那么它就是一个多行注释,但是用变量接收后,其就是一个字符串。
还有一件事,假如在字符串中的内容有引号,那么可以使用\
进行转义,在单引号定义的字符串中,内容可以直接写双引号;在双引号定义的字符串中,内容可以直接写单引号,这不需要转义。
字符串拼接
python中两个字符串可以直接通过“+”进行拼接:
my_str1 = "hello"
my_str2 = "world"
print(my_str1 + my_str2)
但这两个字面量完全可以只写在一个字符串里面,无需进行拼接,这样直接拼接两个字面量显得有些多此一举。所以说字符串拼接使用的比较多的是变量之间的拼接。并且特别注意,和Java不同,数字类型(int、float)不能直接和字符串进行拼接。
my_str1 = "number = "
number = 1
print(my_str1 + number)
这样会导致代码直接报错TypeError: can only concatenate str (not "int") to str
。可以将数字类型的变量先使用str方法转换为字符串,再进行拼接。
字符串格式化
如上文提到,python中的字符串拼接极其不方便:假如变量过多,拼接起来非常麻烦、冗杂;字符串无法直接和数字类型(或其他类型)完成拼接。为了解决这个问题,就需要使用字符串格式化。
占位符
name = "张三"
print("我是%s" % name)
这是一种占位符格式化的方式,这种写法和C语言很像。通过%s作为占位符,再用name变量填充这个位置,从而完成字符串的拼接。其中:%表示此处需要占位,s表示占位的是一个字符串类型的变量(%d是整数、%f是浮点数),%s是将变量内容转换为字符串再进行拼接(%d、%f同理) 假如说有多个变量需要占位,那么需要使用括号:
name = "张三"
age = "18"
print("我是%s,我今年%s岁" % (name, age))
而且必须严格遵循占位的顺序。
精度控制
在python中可以使用辅助符号“m.n”来控制数据的宽度和精度(这和C语言类似),通过m控制宽度,但是假如色设置的宽度小于数字本身,那么设置不生效,通过.n控制小数点精度,会对小数部分四舍五入。
print("%5d" % 11)
这样会设置数字的宽度为5,而11的宽度为2,所以说11前面会用3个空格来补全宽度。
print("%5.6f" % 3.1415926535)
这样会设置数字的宽度为5,小数部分精度为6,但是这个数字的宽度大于设置的宽度,所以说设置的宽度不生效,会输出3.141593(3.1415926四舍五入了)。
快速格式化(f-string)
python语言追求效率和优雅,上文的占位符格式化疑似有点C语言了,python中还有一种快速格式化的方式来格式化字符串。
使用语法:f"内容{变量}",比如:
name = "张三"
print(f"我是{name}")
再来看一个相对复杂一些的例子:
name = "张三"
age = 18
money = 1314.52
print(f"我是{name},我今年{age}岁,我身上有{money}元")
我们可以发现,快速格式化不用去关系变量的类型,直接输入即可,并且快速格式化不会做精度控制,所以说会将变量原样输出(占位符不可以)。 所以说快速格式化十分快捷方便。但此处额外提一下,虽然f-string快速格式化是按照原样输入,但是可以使用: + 格式
限定其输出格式,如{price:.2f}
那么不管price是几位小数,都会保留两位小数,并且会四舍五入!
字符串的快速格式化还可以在大括号中使用表达式(表达式是一条具有明确执行结果的代码语句),这样可以节约创建变量消耗的资源:
print(f"1 + 2的结果是{1 + 2}")
name = "张三"
print(f"张三的类型是{type(name)}")
这种直接使用表达式的方法,可以不用创建这么多变量,从而更加快速、简洁。快速格式化可以和占位符格式化混合使用:
name = "黑马程序员"
stock_price = 19.99
stock_code = "#123"
stock_price_growth_factor = 1.2
growth_days = 7print(f"公司:{name},股票代码{stock_code},今日股价{stock_price},"f"增长系数为{stock_price_growth_factor},经过{growth_days}天增长,七日后股价为%.2f" % (19.99 * (1.2 ** 7)))
但是这种混用的方法不推荐。
name = "黑马程序员"
stock_price = 19.99
stock_code = "#123"
stock_price_growth_factor = 1.2
growth_days = 7print(f"公司:{name},股票代码{stock_code},今日股价{stock_price},"f"增长系数为{stock_price_growth_factor},经过{growth_days}天增长,七日后股价为{19.99 * (1.2 ** 7):.2f}")
这种使用:控制格式的方法才是规范的做法。