python中字符串格式的不同方法
#编程 #教程 #python #字符串

本文将介绍Python中的四种不同类型的字符串格式技术。

我们将介绍所有四种方法及其应用程序,以便我们可以了解各种字符串格式技术的基础。

介绍

什么是字符串格式化?好吧,我们可以将其称为我们动态注入字符串的过程,然后返回该字符串的格式版本

有4种执行字符串格式的方法彼此不同:

  • 使用%操作员(“旧样式”)

  • 使用格式()字符串方法

  • 使用字符串文字(f-string)

  • 使用字符串模板类

我们将看到上述方式的基础。

1.使用%(modulo)操作员:

这种格式化字符串的方式,使用%(modulo)操作员。如果您熟悉Python的算术运算符,您会认识到我们使用此操作员来计算股息的其余部分。

我们以最古老的字符串格式样式使用的相同操作员。 Modulo(%)运算符也被称为“字符串形式” “ string-interpolation” 运算符。

这是一个示例:

# Use of the modulo operator for string formatting
name = "Python"
print("Hello, %s" % name)

# ----------------OR--------------

print("Hello, %s!" % 'Geeks')

输出:

Hello, Python
Hello, Geeks!

我们使用格式指定符告诉Python必须在该特定位置替换给定值。

我们使用"%s"格式指定符将字符串"Python"插入该特定位置。

我们有一些通常使用的格式指定器:

  • %s - 对于字符串

  • %d - 对于整数

  • %f - 对于浮点值

  • %b - 二进制格式

  • %e - 用于浮点指数

让我们看一下显示不同格式条件的示例。

示例-1:格式化整数值

print("I bought %d apples and %d oranges." %(6, 4))

输出:

I bought 6 apples and 4 oranges.

我们可以插入多个字符串,并且可以使用变量将对象插入字符串。

示例-2:

x = "car"
print("The dog %s down the %s." %('chased', x))

输出:

The dog chased down the car.

使用单个字符串中的多种格式转换类型。

示例-3:

name = "Yashwant"
print("My %s %s bought the car worth $%d." %('friend', name, 15000))

输出:

My friend Yashwant bought the car worth $15000.

使用%运算符
浮点精度

print("The length of land is: %2.3f metres" %(85.52590))

输出:

The length of land is: 85.526 metres

现在您可能会想知道,为什么我们使用%2.3f

浮点数使用x.yf格式,其中x是字符串中最小数字的数字,而yf表示小数点之后必须显示多少位数字。

如果整个数字没有指定的数字数,则可能会用空格填充。

print("The length of land is: %7.3f metres" %(85.52590))
print("The length of land is: %0.3f metres" %(85.52590))

输出:

The length of land is:  85.526 metres
The length of land is: 85.526 metres

在这种情况下,第一个打印语句用whitespace填充。两个结果之间有一个区别。

要了解更多信息,请单击here

2.使用格式()方法:

引入此方法以摆脱%的操作员格式。此方法适合更有效地处理复杂的字符串格式。

str.format()方法与"%"操作员格式相比非常简单快捷,并在Python3中引入。

在这种格式化的技术中,格式化器通过将占位符封闭的colly bracs "{ }"并调用str.format()方法来工作。

语法:

“ string goes {}和shere {}”。格式(“此处”,“也”)

这是一个示例:

# Formatting using format() method
print("Hey {}, Welcome {}.".format('Geeks', 'to GeekPython'))

输出:

Hey Geeks, Welcome to GeekPython.

让我们看看一些示例

我们可以使用基于索引的定位将对象插入字符串

示例-1:使用基于索引的定位

print("{1}, there is a {2} {0} ahead.".format("error", "Caution", "Python"))

输出:

Caution, there is a Python error ahead.

示例-2:

print("Python: {x}, Inventor: {y}, Version: {z}".format(x=1991,
                                                        y="Guido",
                                                        z=3.11))

输出:

Python: 1991, Inventor: Guido, Version: 3.11

示例-3:重复使用相同的值

print("The first {obj} was easy, the second {obj} was intermediate "
      "but the third {obj} was very tough.".format(obj="hurdle"))

输出:

The first hurdle was easy, the second hurdle was intermediate but the third hurdle was very tough.

使用 .format()方法的浮点精度

print("The decimal number is: {0:1.3f}".format(54.123456, 23.5466))
print("The decimal number is: {1:1.3f}".format(54.123456, 23.5466))

输出:

The decimal number is: 54.123
The decimal number is: 23.547

我们已经使用%操作员看到了浮点精度格式为x.yf,但这里的情况有些不同。

在这里, 语法

{[index]:[width]。 [Precision] [type]}

如果我们分解{0:1.3f},则:

  • 0-是索引值

  • 1-是宽度

  • 3-是精度或否。小数点之后要显示的数字

  • f-是格式代码的类型

这是我们可以与格式代码一起使用的常见类型:

  • “ d” - 对于整数

  • “ f” - 用于浮点数

  • “ s” - 对于字符串

  • “ e” - 用于指数格式的浮点

  • “ o” - 对于八进制数字

  • “ x” - 对于十六进制数字

  • “ b” - 对于二进制数字

要了解更多信息,请单击here

3.使用F弦(文字字符串插值):

字面字符串插值,一种格式化字符串的新机制

这些字符串称为f-strings,因为它们的主要角色"f"用于表示字符串,在这里,f-代表 “格式化”字符串。

f-strings是字母"f"

的字符串文字。

f-string使用用于str.format()的相同格式指定器的迷你语言。

这是一个示例:

name = "Sachin"
print(f"Hi, I am {name}.")

输出:

Hi, I am Sachin.

让我们在不同条件下查看f-string的用例:

示例-1:使用多个表达式

name = "Sachin"
x = 45
y = 12

print(f"Hi, I am {name} and I run {8*(x + y)} metres daily.")

输出:

Hi, I am Sachin and I run 456 metres daily.

示例-2:在 function
中使用F弦

def write(name, say):
    return f"My name is {name} and I am saying {say}."

output = write("Sachin", "Good luck")
print(output)

输出:

My name is Sachin and I am saying Good luck.

示例-3:使用 lambda f -string内部的表达

print(f"Using lambda function: {(lambda x: x*13)(3)}")

输出:

Using lambda function: 39

f-string中的浮点精度

语法

{值:{width}。 {precision}}

width = 5
precision = 7
value = 15.155245

print(f"The result is: {value:{width}.{precision}}")

输出:

The result is: 15.15525

要了解更多信息,请单击here

4.字符串模板类

在这种方法中,我们在用{ }卷曲括号包裹的占位符之前使用"$"

以这种格式化,我们使用Template类来制作模板,一旦创建了模板,我们就可以通过调用两种方法执行替代:

  • substitute():此方法返回一个新的字符串,当映射值被替换为模板中的占位符时会产生。如果映射中没有占位符,则将提出一个KeyError

  • safe_substitute():这类似于substitute()方法,除了从未抬起钥匙值(由于映射中缺少占位符)。当占位符丢失时,原始占位符将出现在生成的字符串中。 (Source)

以更好地理解的示例来看一下:

from string import Template

name = "Sachin"
greet = "Welcome"

my_str = Template("Hello $x, $y here.")
print(my_str.substitute(x=name, y=greet))

输出:

Hello Sachin, Welcome here.

这里的"x""y"是由"$"前缀的占位符,由映射"name""greet"的值代替。

示例-1:升高 KeyError

from string import Template

name = "Sachin"
greet = "Welcome"

my_str = Template("Hello $x, $y here.")
print(my_str.substitute(x=name))

输出:

Traceback (most recent call last):
  ....
KeyError: 'y'

上面的代码片段提出了KeyError,因为我们没有为占位符"$y"指定映射。但是,如果我们使用"safe_substitute()"方法,那么它不会提出 keyError

示例-2:使用 safe_substitute方法

from string import Template

character = "Iron man"
name = "Stan Lee"
country = "USA"

my_str = Template("$x was created by $y for Marvel in $country")
print(my_str.safe_substitute(x=character, y=name))

输出:

Iron man was created by Stan Lee for Marvel in $country

我们在这里没有指定"$country"的映射,但是没有错误,因为我们使用了safe_substitute方法。

要了解更多信息,请单击here

比较

考虑以下示例,在其中比较不同格式方法的代码段的执行时间。

import timeit

# Using % operator
mod = timeit.timeit("""
char = 'Iron man' 
name = 'Stan Lee' 
'%s was created by %s' %(char, name)
""", number=1000000)
print(mod)

# Using format() method
format_method = timeit.timeit("""
char = 'Iron man' 
name = 'Stan Lee'
'{} was created by {}.'.format(char, name)
""", number=1000000)
print(format_method)

# Using f-string
fst = timeit.timeit("""
char = 'Iron man' 
name = 'Stan Lee'
f'{char} was created by {name}.'
""", number=1000000)
print(fst)

# Using Template Class
tcl = timeit.timeit("""
from string import Template
char = 'Iron man'
name = 'Stan Lee'
my_str = Template("$x was created by $y.")
my_str.substitute(x=char, y=name)""", number=1000000)
print(tcl)

输出:

0.351656400016509
0.4346434000181034
0.1398726999759674
3.969239500002004

我们获得了每个代码段所需的时间来完成100万个执行,因此我们可以得出结论,F弦串相对较快,需要将近0.14秒,这比其他方法大大少。

结论

我们可以得出结论,用于字符串格式的所有方法彼此不同,每种方法都有自己的格式化样式。

为了补偿缺乏效率或处理复杂格式的能力,随着时间的流逝而开发了新的方法。

我们可以选择最佳,最有效的字符串格式化技术,因为我们已经看到并比较了所有不同类型的字符串格式。


ð如果您喜欢本文,您可能会喜欢的其他文章

How to convert bytes into a string in Python

Different ways to display images in Jupyter Notebook

What are context manager and the with statement in Python

Difference between the list insert(), append() and extend() methods

How to access list values within a dictionary in Python

What is the difference between sort and sorted in Python

The concept of constructor and initializer in Python


这就是目前的全部

保持编码