📜  Python | format

📅  最后修改于: 2020-07-07 04:50:30             🧑  作者: Mango

str.format()Python3中的字符串格式化方法之一,它允许多次替换和值格式化。这种方法使我们可以通过位置格式将字符串中的元素连接起来。

使用单个格式化程序:

格式化程序通过将由一对大括号{}定义的一个或多个替换字段和占位符放入字符串中并调用str.format()来工作。我们希望放入占位符并与作为参数传入格式函数的字符串连接的值。

语法: { } .format(value)

参数: 可以是整数,浮点数字常量,字符串,字符甚至变量。

返回类型:返回一个格式化的字符串,该字符串的值在占位符位置作为参数传递。

 

代码1:简单演示format 

# Python3程序演示str.format()方法 
  
# 在简单字符串中使用格式选项 
print ("{}, A computer science portal for geeks."
                        .format("GeeksforGeeks")) 
  
# 对存储在变量中的值使用格式选项 
str = "This article is written in {}"
print (str.format("Python")) 
  
# 使用数字常量格式化字符串 
print ("Hello, I am {} years old !".format(18)) 

输出: 

GeeksforGeeks, A computer science portal for geeks.
This article is written in Python
Hello, I am  18 years old!

使用多个格式化程序:

格式化字符串时,可以使用多对花括号。假设如果句子中需要另一个变量替换,可以通过添加第二对花括号并将第二个值传递给方法来完成。Python将按值替换占位符

语法: {} {} .format(value1,value2)

参数:
(value1,value2):可以是整数,浮点数字常量,字符串,字符甚至是变量。唯一的区别是,在format()方法中作为参数传递的值的数量必须等于在字符串中创建的占位符的数量。

错误和异常:
IndexError:当字符串具有一个额外的占位符并且我们没有在format()方法中为其传递任何值时发生。Python通常会按默认索引(例如0、1、2、3…)的顺序分配占位符访问作为参数传递的值。因此,当遇到占位符,该占位符的索引没有任何值作为参数传递到内部时,它将引发IndexError。

 

代码2:

# Python程序演示索引错误 
  
# 占位符的数量为四个,但仅传递了三个值 
  
# 格式功能中的参数. 
my_string = "{}, is a {} {} science portal for {}"
  
print (my_string.format("GeeksforGeeks", "computer", "geeks")) 

输出:

Traceback (most recent call last):
  File "/home/949ca7b5b7e26575871639f03193d1b3.py", line 2, in 
    print (my_string.format("GeeksforGeeks", "computer", "geeks"))
IndexError: tuple index out of range

代码3:具有多个占位符的格式化程序。

# 使用多个占位符的Python程序演示str.format()方法  
  
# format()函数中的多个占位符 
my_string = "{}, is a {} science portal for {}"
print (my_string.format("GeeksforGeeks", "computer", "geeks")) 
  
# 可以在格式化中使用不同的数据类型 
print ("Hi ! My name is {} and I am {} years old"
                            .format("User", 19)) 
  
# 作为参数传递的值将按其输入顺序进行替换 
print ("This is {} {} {} {}"
       .format("one", "two", "three", "four")) 

输出:

GeeksforGeeks, is a computer science portal for geeks
Hi! My name is User and I am 19 years old
This is one two three four

带有位置和关键字参数的格式化程序:

当占位符{}为空时,Python将按顺序替换通过str.format()传递的值。

str.format()方法中存在的值本质上是元组数据类型,并且元组中包含的每个单个值都可以通过其索引号来调用,该索引号以索引号0开头。这些索引号可以传递给curl在原始字符串中用作占位符的花括号。

语法: {0} {1} .format(positional_argument,keyword_argument)

参数:(positional_argument,keyword_argument)

Positional_argument可以是整数,浮点数字常量,字符串,字符甚至变量。
Keyword_argument本质上是一个存储一些值的变量,该值作为参数传递。

 

代码4:

# 演示带位置键参数的格式化程序的使用. 
  
# 位置参数按顺序放置 
print("{0} love {1}!!".format("GeeksforGeeks", 
                                    "Geeks")) 
  
# 用占位符的参数反转索引号 
print("{1} love {0}!!".format("GeeksforGeeks", 
                                    "Geeks")) 
  
  
print("Every {} should know the use of {} {} programming and {}"
    .format("programmer", "Open", "Source", "Operating Systems")) 
  
  
# 使用值的索引号更改它们在字符串中出现的顺序
print("Every {3} should know the use of {2} {1} programming and {0}"
        .format("programmer", "Open", "Source", "Operating Systems")) 
  
  
# 关键字参数由其关键字名称调用 
print("{gfg} is a {0} science portal for {1}"
.format("computer", "geeks", gfg ="GeeksforGeeks")) 

输出:

GeeksforGeeks love Geeks!!
Geeks love GeeksforGeeks!!
Every programmer should know the use of Open Source programming and Operating Systems
Every Operating Systems should know the use of Source Open programming and programmer
GeeksforGeeks is a computer science portal for geeks

类型指定:

语法的花括号中可以包含更多参数。使用格式代码语法{field_name:conversion},其中field_name指定str.format()方法的参数的索引号,而conversion则是数据类型的转换代码。

s –字符串
d –十进制整数(以10为基数)
f –浮点显示
c –字符
b –二进制
o –八进制
x –十六进制,小写字母为9
X –十六进制,大写字母为9
e –指数表示法

语法:
字符串{field_name:conversion} Example.format(value)

错误和异常:
ValueError:此方法在类型转换期间发生错误。

 

代码5:

# 在执行强制类型转换时演示ValueError 
  
# 当通过'd'类型转换将浮点值显式转换为以10为底的十进制数时,我们会遇到Value-Error. 
print("The temperature today is {0:d} degrees outside !"
                                        .format(35.567)) 
  
# Instead write this to avoid value-errors 
''' print("The temperature today is {0:.0f} degrees outside !" 
                                            .format(35.567))'''

输出:

Traceback (most recent call last):
  File "/home/9daca03d1c7a94e7fb5fb326dcb6d242.py", line 5, in 
    print("The temperature today is {0:d} degrees outside!".format(35.567))
ValueError: Unknown format code 'd' for object of type 'float'

代码6:

# 将以10为底的十进制整数转换为浮点数字常量 
print ("This site is {0:f}% securely {1}!!". 
                    format(100, "encrypted")) 
  
# 限制精度 
print ("My average of this {0} was {1:.2f}%"
            .format("semester", 78.234876)) 
  
# 没有小数位 
print ("My average of this {0} was {1:.0f}%"
            .format("semester", 78.234876)) 
  
# 将整数转换为其二进制数或使用其他不同的转换基数. 
print("The {0} of 100 is {1:b}"
        .format("binary", 100)) 
          
print("The {0} of 100 is {1:o}"
        .format("octal", 100)) 

输出:

This site is 100.000000% securely encrypted!!
My average of this semester was 78.23%
My average of this semester was 78%
The binary of 100 is 1100100
The octal of 100 is 144

填充替换或生成空间:

代码7:

默认情况下,字符串在字段中左对齐,数字右对齐。我们可以通过在冒号后面放置一个对齐代码来修改它。

<:字段中的左对齐文本
^:字段中的中心文字
>:在字段中右对齐文本
# 演示将字符串作为参数传递时的间距 
print("{0:4}, is the computer science portal for {1:8}!"
                        .format("GeeksforGeeks", "geeks")) 
  
# 在将数字常量作为参数传递时演示间距. 
print("It is {0:5} degrees outside !"
                        .format(40)) 
  
# 演示作为参数传递的字符串常量和数字常量 
print("{0:4} was founded in {1:16}!"
    .format("GeeksforGeeks", 2009)) 
  
  
# 演示空间对齐 
print("{0:^16} was founded in {1:<4}!"
        .format("GeeksforGeeks", 2009)) 
  
print("{:*^20s}".format("Geeks")) 

输出:

GeeksforGeeks, is the computer science portal for geeks   !
It is    40 degrees outside!
GeeksforGeeks was founded in             2009!
 GeeksforGeeks   was founded in 2009 !
*******Geeks********

应用范围:

格式化程序通常用于组织数据。当格式化程序用于以可视方式组织大量数据时,可以以最佳状态看到它们。如果我们向用户显示数据库,则使用格式化程序增加字段大小并修改对齐方式可以使输出更具可读性。

代码8:演示大数据的组织

# 在给定范围内打印出i,i ^ 2,i ^ 3,i ^ 4 
  
# 函数以无组织的方式打印出值 
def unorganized(a, b): 
    for i in range (a, b): 
        print ( i, i**2, i**3, i**4 ) 
  
# 函数打印一组有组织的值 
def organized(a, b): 
    for i in range (a, b): 
  
        # Using formatters to give 6  
        # spaces to each set of values 
        print("{:6d} {:6d} {:6d} {:6d}"
        .format(i, i ** 2, i ** 3, i ** 4)) 
  
# 驱动程式码 
n1 = int(input("输入下限 :-\n")) 
n2 = int(input("输入上限 :-\n")) 
  
print("------使用格式化程序之前-------") 
  
# 没有格式化程序的调用函数 
unorganized(n1, n2) 
  
print() 
print("-------使用格式化程序后---------") 
print() 
  
# 包含格式化程序以组织数据的调用函数 
organized(n1, n2) 

输出:

输入下限 :-
3
输入上限 :-
10
------使用格式化程序之前-------
3 9 27 81
4 16 64 256
5 25 125 625
6 36 216 1296
7 49 343 2401
8 64 512 4096
9 81 729 6561

-------使用格式化程序后---------

     3      9     27     81
     4     16     64    256
     5     25    125    625
     6     36    216   1296
     7     49    343   2401
     8     64    512   4096
     9     81    729   6561