format OR %

提到Python中的格式化输出方法,一般来说有以下两种方式:

print('hello %s' % 'world')
# hello world
print('hello {}'.format('world'))
# hello world

到底哪种好呢,反正对我来说,用了.format()之后就再也不想用%了。

  • format()不用理会数据类型,%s%f等等我记不完;
  • format()功能更丰富,填充方式,对齐方式都很灵活,让你的打印效果更美观;
  • format()是官方推荐的,%指不定就在未来版本中给废弃掉了。

基本用法

print('{} {}'.format('hello', 'world'))  # 最基本的

print('{0} {1}'.format('hello', 'world'))  # 通过位置参数

print('{0} {1} {0}'.format('hello', 'world'))  # 单个参数多次输出

"""输出结果
hello world
hello world
hello world hello
"""

关键词定位

# 通过关键词参数
print('我的名字是{name},我今年{age}岁了。'.format(name='小明', age='12')) # 与位置参数一样,单个参数也能多次输出
print('{name}说:"我的名字是{name},我今年{age}岁了。"'.format(name='小明', age='12')) """输出结果
我的名字是小明,我今年12岁了。
小明说:"我的名字是小明,我今年12岁了。"
"""

可变参数

既然format()是一个方法,那是不是也接受*args**kwargs形式的传参呢,答案是肯定的。

# 传入list
data = ['hello', 'world']
print('{0} {1}'.format(*data)) # 传入dict
data = {'name': '小明', 'age': 12}
print('我的名字是{name},我今年{age}岁了。'.format(**data)) # 混用
data_1 = ['hello', 'world']
data_2 = {'name': '小明', 'age': 12}
print('{0} {1} 我的名字是{name},我今年{age}岁了,{0}!'.format(*data_1, **data_2)) """输出结果
hello world
我的名字是小明,我今年12岁了。
hello world 我的名字是小明,我今年12岁了,hello!
"""

固定宽度

format()可以指定输出宽度为多少,当字符串长度少于设定值的时候,默认用空格填充:

data = [{'name': 'Mary', 'college': 'Tsinghua University'},
{'name': 'Micheal', 'college': 'Harvard University'},
{'name': 'James', 'college': 'Massachusetts Institute of Technology'}]
# 固定宽度输出
for item in data:
print('{:10}{:40}'.format(item['name'], item['college'])) """输出结果
Mary Tsinghua University
Micheal Harvard University
James Massachusetts Institute of Technology

当然除了空格,我们也可以选择其他字符来填充,譬如我想打印一条分割线,便可以选择通过-来填充:

data = [{'name': 'Mary', 'college': 'Tsinghua University'},
{'name': 'Micheal', 'college': 'Harvard University'},
{'name': 'James', 'college': 'Massachusetts Institute of Technology'}] # 固定宽度输出
for item in data:
# 每输出一条记录之前打印一条分割线
# 选择用其他字符来填充时需要指定对齐方式
print('{:-^60}'.format('我是分割线'))
print('{:10}{:40}'.format(item['name'], item['college'])) """输出结果
---------------------------我是分割线----------------------------
Mary Tsinghua University
---------------------------我是分割线----------------------------
Micheal Harvard University
---------------------------我是分割线----------------------------
James Massachusetts Institute of Technology
"""

对齐方式

format()支持左对齐,右对齐,居中,分别对应<>^,具体怎么使用我们看实例:

data = [{'name': 'Mary', 'college': 'Tsinghua University'},
{'name': 'Micheal', 'college': 'Harvard University'},
{'name': 'James', 'college': 'Massachusetts Institute of Technology'}] print('{:-^50}'.format('居中'))
for item in data:
print('{:^10}{:^40}'.format(item['name'], item['college'])) print('{:-^50}'.format('左对齐'))
for item in data:
print('{:<10}{:<40}'.format(item['name'], item['college'])) print('{:-^50}'.format('右对齐'))
for item in data:
print('{:>10}{:>40}'.format(item['name'], item['college'])) """输出结果
------------------------居中------------------------
Mary Tsinghua University
Micheal Harvard University
James Massachusetts Institute of Technology
-----------------------左对齐------------------------
Mary Tsinghua University
Micheal Harvard University
James Massachusetts Institute of Technology
-----------------------右对齐------------------------
Mary Tsinghua University
Micheal Harvard University
James Massachusetts Institute of Technology
"""

数字格式化

常用的示例如下:

# 取小数点后两位
num = 3.1415926
print('小数点后两位:{:.2f}'.format(num)) # 带+/-输出
num = -3.1415926
print('带正/负符号:{:+.2f}'.format(num)) # 转为百分比
num = 0.34534
print('百分比:{:.2%}'.format(num)) # 科学计数法
num = 12305800000
print('科学计数法:{:.2e}'.format(num)) # ,分隔
num = 12305800000
print('","分隔:{:,}'.format(num)) # 转为二进制
num = 15
print('二进制:{:b}'.format(num)) # 十六进制
num = 15
print('十六进制:{:x}'.format(num)) # 八进制
num = 15
print('八进制:{:o}'.format(num)) """输出结果
小数点后两位:3.14
带正/负符号:-3.14
百分比:34.53%
科学计数法:1.23e+10
","分隔:12,305,800,000
二进制:1111
十六进制:f
八进制:17
"""

输出花括号

当然,如果我们想输出的{}的时候怎么办呢?

# 输出花括号
print('我是{{{}}}'.format('Awesome_Tang')) """输出结果
我是{Awesome_Tang}
"""

花式玩法

其实结合以上这些特性,我们可以来点好玩点,譬如说自己写一个进度条:

import time

length = 1000
for i in range(1, length + 1):
percent = i / length
bar = '▉' * int(i // (length / 50))
time.sleep(0.01)
print('\r进度条:|{:<50}|{:>7.1%}'.format(bar, percent), end='')
print('\n')
  • 效果如下:


现在你觉得%str.format()哪个更好用呢?

Python格式化输出——format用法示例的更多相关文章

  1. python格式化输出 format

    看图

  2. python格式化输出【转】

    今天写代码时,需要统一化输出格式进行,一时想不起具体细节,用了最笨的方法,现在讲常见的方法进行一个总结. 一.格式化输出 1.整数的输出 直接使用'%d'代替可输入十进制数字: >>> ...

  3. python中hashlib模块用法示例

    python中hashlib模块用法示例 我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib ha ...

  4. Python格式化输出的三种方式

    Python格式化输出的三种方式 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx,my age ...

  5. python格式化输出及大量案例

    python格式化输出符号及大量案例 1.格式化输出符号 python格式化输出符号 格式化符号 含义 %c 转化成字符 %r 优先使用repr()函数进行字符串转化 %s 转换成字符串,优先使用st ...

  6. python格式化输出之format用法

    format用法 相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’ 使用方法由两种:b ...

  7. python格式化输出(% format用法)

    %基本用法: 十进制输出:print('%d' % 6)    6也可以换成其它的数字变量 八进制输出:print('%o' % 6)  6也可以换成其它的数字变量 字符串输出:print('%s' ...

  8. python 格式化输出(% VS format)

    提到Python中的格式化输出方法,一般来说有以下两种方式: 1)% 格式说明由%和格式字符组成,如%f,%s,%d,它的作用是将数据按照指定的格式输出.格式说明是由“%”字符开始的. #1.输出字符 ...

  9. Python - 格式化字符串的用法

    0. 摘要 Python支持多种格式化字符串的方法,包括%-fromatting.str.format().f-strings三种,f-strings是Python3.6以后出现的一种新方法,相比其他 ...

随机推荐

  1. FPM十:FORM Repeater

    1.创建feeder class:ZCL_FPM_FORM_REP_DEMO 添加接口类: 2.新建全局内表: DATA:GT_QPGT TYPE TABLE OF QPGT. 3.实列化get_da ...

  2. Jenkins+GitLab+Ansible-playbook的环境安装(yum)

    1.安装GitLab 1.1 配置gitlab的yum源 # 参考:https://packages.gitlab.com/gitlab/gitlab-ce/install#bash-rpm curl ...

  3. mysql中的where和having的区别

    下面以一个例子来具体的讲解: 1. where和having都可以使用的场景 1)select addtime,name from dw_users where addtime> 1500000 ...

  4. 关于交叉熵损失函数Cross Entropy Loss

    1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...

  5. 动态加载swiper,默认显示最后一个swiper-slide解决方案???

    问题描述: 用ajax动态加载swiper-slide以后,由于我是自适应屏幕的尺寸来决定一屏显示多少图片,所以加了 slidesPerView:'auto'这条属性,加了这条属性过后,每次刷新页面的 ...

  6. C#使用Xamarin开发移动应用 ---- 系列文章

    C#使用Xamarin开发移动应用 C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练, ...

  7. python 解决粘包问题的例子(ftp文件的上传与下载)简单版本

    服务端 ! /user/bin/env python3 -- coding:utf_8 -- """ Author:Markli # 2019/9/9,16:41 &qu ...

  8. 日志级别facility

    0 EMERG(紧急) 会导致主机系统不可用的情况 1 ALERT(警告) 必须马上采取措施解决的问题 2 CRIT(严重) 比较严重的情况 3 ERR(错误) 运行出现错误 4 WARNING(提醒 ...

  9. IE、chrome驱动下载地址

    http://selenium-release.storage.googleapis.com/index.html IE驱动https://sites.google.com/a/chromium.or ...

  10. LayUI的基本使用 - Tab选项卡切换显示对应数据

    要求:实现tab选项卡改变的同时展示数据也跟着改变 实现条件: 1. 选项卡 [官网 – 文档/示例 – 页面元素 – 选项卡] 2.数据表格 [官网 – 文档/示例 – 内置模块 – 数据表格] 3 ...