python中return和printf的区别_Python格式化输出:%s和format()用法比较

1、python格式化输出历史起源

python2.5之前,我们使用的是老式格式化输出:%s。从python3.0开始起(python2.6同期发布),同时支持两个版本的格式化,多出来的一个新版本就是利用format()函数,进行格式化输出。

2、为什么要学习python3支持的新式格式化输出呢?

虽然老式的语法,兼容性很好,但是它的功能很少,很难完成复杂的任务,而format()函数进行格式化输出,功能更加强大,从下面的学习中你会慢慢体会到。01基本用法

a = '%s张飞%s关羽%s刘备%s赵云' % (1,2,3,4)

display(a)

b  = '{}张飞{}关羽{}刘备{}赵云'.format(1,2,3,4)

display(b)

结果如下:

1)format()支持位置格式化填充,%s不支持;第一种方式:

大括号{ }中写的是format()传入值所对应的下标。

第二种方式:

大括号{ }中的变量,和format()传入值是一一对应的。# --------------------方式一-----------------------

c = '{3}张飞{1}关羽{2}刘备{0}赵云'.format(1,2,3,4)

display(c)

# --------------------方式二-----------------------

def my_hobbies(fruit,ball,drink):

hobbies = '我喜欢水果{fruit},我也喜欢球类{ball},我还喜欢饮料{drink}'.format(ball=ball,fruit=fruit,drink=drink)

return hobbies

fruit = 'apple'

ball = 'basketball'

drink = 'milk'

my_hobbies(fruit,ball,drink)

# --------------------方式二-----------------------

fruit = 'apple'

ball = 'basketball'

drink = 'milk'

hobbies = '我喜欢水果{fruit},我也喜欢球类{ball},我还喜欢饮料{drink}'.format(ball=ball,fruit=fruit,drink=drink)

display(hobbies)

结果如下:

02填充和对齐

1)填充(只能用一个字符进行填充)

① 什么是填充?概念:当指定了字符串最终的长度,但是现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满至这个长度,这就是“填充”。

② %s:实现填充功能;

a = '%s' % ('张飞')

display(a)

b = '%10s' % ('张飞')

display(b)

结果如下:

③ format():实现填充功能;c = '{}'.format('张飞')

display(c)

d = '{:10}'.format('张飞')

display(d)

结果如下:

总结如下:通过上述案例结果呈现,当使用的是%s,进行字符串填充的时候,默认是在原字符串左侧进行填充;当使用的是format(),进行字符串填充的时候,默认是在原字符串右侧进行填充。这就是我们下面要讲述的'对齐'。

2)对齐

① 什么是对齐?概念:'对齐'要与'填充'一起使用,才会显得有意义。当我们进行填充的时候,我们可以选择只在字符串左侧填充,也可以选择只在字符串右侧填充,还可以选择在字符串两侧填充(字符串居中显示的填充方式)。

② %s:实现对齐功能,只有左对齐和右对齐;

# 左填充

a = '%10s' % ('张飞')

display(a)

# 右填充

b = '%-10s' % ('张飞')

display(b)

结果如下:

③ format():实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;# 左填充

a = ':>10'.format('张飞')

display(a)

# 右填充

b = ':<10'.format('张飞')

display(b)

# 居中填充

c = ':^10'.format('张飞')

display(c)

结果如下:

④ 使用'特定符号'进行填充;旧版语法中(%s),使用'特定符号'填充,很麻烦,不直接,你也不用去管。

这里主要看新版语法中(format()函数),进行'特定符号'填充。

03截断

概念:如果我们指定的'截断长度',比实际给出的'字符串'的长度要短,会发生截断。

1)长度和截断长度的区别

① 什么是长度?

“{:8}”.format(“xishi is beautiful”)中,这个8表示的是填充长度,又成为长度,当字符串长度小于这个长度8的时候,会发生填充;当字符串长度大于这个长度8的时候,长度无效,返回的仍然是原来的字符串。

操作如下:

a = '{:8}'.format('xishi')

display(a)

b = '{:8}'.format('xishi is beautiful')

display(b)

结果如下:

② 什么是截断长度?

“{:10.8}”.format(“xishi is beautiful”)中,这个'.8'叫做截断长度,这个10叫做填充长度。

注意:只有字符串的长度大于这个阶段长度的时候,才会发生截断。当既有截断长度,又有填充长度的时候一般先进行截断,截断后再进行填充。

操作如下:a = '{:.8}'.format('xishi is beautiful')

display(a)

# 当字符串长度,小于截断长度,返回原始字符串,截断长度无效;

b = '{:.8}'.format('abc')

display(b)

结果如下:

③ 填充长度和截断长度的联合使用

a = '{:*>15.8}'.format('xishi is beautiful')

display(a)

结果如下:

注意:当既有截断长度,又有填充长度的时候一般先进行截断,截断后,再进行填充。

④ 使用%s完成截断a = '%.8s' % ('xishi is beautiful')

display(a)

b = '%15.8s' % ('xishi is beautiful')

display(b)

结果如下:

04格式化输出中,与数字相关的语法

1)引入案例

a = '{}-{}'.format('1','2')

display(a)

b = '{}-{}'.format(1,2)

display(b)

结果如下:

存在的问题:

format()中明明需要传入字符串,可是这里传入数值,却没有报错,这是为什么呢?

原因是:python自动帮我们做了一次隐式转换,但是这种隐式转换是需要代价的,它会消耗额外的性能,牺牲速度。

因此,我们需要用特定的语法去解决这个问题。

2)填充整数,使用d

① 使用%s完成整数的填充;a = '%5d' % (3000)

display(a)

b = '%d' % ('3000')

display(b)

结果如下:

② 使用format()完成整数的填充;

a = '{:$>5d}'.format(3000)

display(a)

b = '{:¥>5d}'.format(3000)

display(b)

结果如下:

3)填充浮点数,使用f(这个才是最常用的,用于保留小数点的位数);

① 引入案例a = '{:f}'.format(3.14159268)

display(a)

b = '{:f}'.format(3.1415921)

display(b)

c = '{:f}'.format(312)

display(c)

d = '{:d}'.format(12,34)

display(d)

结果如下:

存在的问题:

1)当使用的f的时候,不管你传入的数字有几个小数位,最终都将返回一个六位数的小数,这个问题源自c语言,你也不用管,自己知道就行。

2)当使用f的时候,可以传入整数;当使用d的时候,就只能传入整数,而不能传入小数。

② 使用%s完成浮点数填充,保留2位有效数字;

a = '%.2f' % (3.1415)

display(a)

结果如下:

③ 使用format()完成浮点数的填充,保留2位有效数字;b = '{:.2f}'.format(3.1415)

display(b)

c = '{:$>5.2f}'.format(3.1415)

display(c)

结果如下:

注意:在使用浮点数填充的时候,用的最多的就是保留几位有效数字,由于返回值默认是保留6位小数,因此需要配合使用'截断'。作者:黄伟呢,个人博客地址:https://blog.csdn.net/weixin_41261833

公众号「凹凸玩数据」,有趣的不像个技术号~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C和指针之字符串简单实现 strcpy、strcat、strstr函数

1、实现strcpy函数 #include <stdio.h>//简单实现strcpy函数 char *my_strcpy(char *des, const char *src) {if (des == NULL || src == NULL)return des;char *result = des;while ((*des++ = *src++) != \0);return result; }int main() {char des[20];const char *sr…

.NET Core中使用结果过滤器ResultFilter统一结果返回封装

介绍实现需要继承IResultFilter或者 IAsyncResultFilter。为了方便开发,简化代码,也为了与前端方便对接,需要对接口服务返回结果进行统一处理定义统一返回的结果类我们需要定义一个统一返回结果泛型类ApiResultpublic class ApiResult<T>{public int Code { get; set; }p…

context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系

现在常用框架中SpringMVC.xml配置是&#xff1a; <mvc:annotation-driven/>和<context:component-scan> 那么<context:annotation-config/>呢&#xff1f; 首先看一下三个注解各自定义&#xff1a; ① <context:annotation-config/> 1.如果你想使用Aut…

Sql Server系列:视图

视图是数据库中的一种虚拟表&#xff0c;与真实的表一样&#xff0c;视图包含一系列带有名称的行和列数据。行和列数据用来自定义视图的查询所引用的表&#xff0c;并且在引用视图时动态生成。 1. 视图的概念 视图是从一个或者多个表中导出的&#xff0c;其行为与表相似&#x…

UML 绘图关系

1 继承 子类继承父类2 实现实现类实现接口3 依赖 &#xff08;偶然、临时、比较弱关联&#xff09;类 A 使用了类 B&#xff0c;如果类 B 产生变化将会影响类A4 关联&#xff08;长期的、平等的、双向的、强依赖关系&#xff09;强依赖关系。5 聚合关系&#xff08;关联关系特例…

linux下网口监控软件_超赞的!Aibaba技术官分享高性能Linux服务器解读笔记

一个运行缓慢的应用程序有时会让人抓狂&#xff0c;此时需要在问题诊断的基础上进行性能调整。随着虚拟化、云计算时代的来临&#xff0c;Linux得到迅猛发展&#xff0c;在服务器领域已经占据半壁江山&#xff0c;而基于Linux的运维也面临新的挑战:面对越来越复杂的业务&#x…

Jwt Token 的刷新机制设计

Jwt Token 的刷新机制设计Intro前面的文章我们介绍了如何实现一个简单的 Jwt Server&#xff0c;可以实现一个简单 Jwt 服务&#xff0c;但是使用 Jwt token 会有一个缺点就是 token 一旦颁发就不能够进行作废&#xff0c;所以通常 jwt token 的有效期一般会比较短&#xff0c;…

C和指针之字符串简单实现strchr、strcmp函数

1、问题 简单实现strchr、strcmp函数 2、代码实现 #include <stdio.h> #include <string.h>/** 简单模拟strchr函数 **/ char *my_strchr(const char *des, int ch) {if (des == NULL)return des;while (*des != \0){if (*des == ch){return des; }++des;}return …

辨别真假数据科学家必备手册:深度学习45个基础问题(附答案)

简介 早在2009年&#xff0c;深度学习还只是一个新兴领域&#xff0c;只有少数人认为它是一个多产的研究方向。今天&#xff0c;深度学习正在被用来开发那些过去被认为是不可能完成的应用。 语音识别&#xff0c;图像识别&#xff0c;数据中的模式识别&#xff0c;照片中的对象…

redis总结笔记

为什么80%的码农都做不了架构师&#xff1f;>>> 1、Redis的介绍和安装部署 NOSQL 》 Not Only SQL NOSQL以key-value形式存储 特点:非关系型、分布式、开源的、水平可扩展 NOSQL: 数据高并发读写 对海量数据的高效率存储和访问 对数据的搞可扩展性和高可用性 Redi…

WinHEC(Windows硬件project产业创新峰会)将2015回归

WinHEC这是Windows Hardware Engineering Cumminity&#xff0c;中国呼吁Windows硬件project产业创新峰会。将2015在早期的回报&#xff0c;2015年3月18日至19日在中国深圳召开–微软决定在深圳召开WinHEC也是考虑到深圳的硬件生态。拥有大量硬件公司&#xff0c;包含电子设计、…

go kegg_GO,KEGG富集分析工具——DAVID

DAVID(https://david.ncifcrf.gov/home.jsp)是一个生物信息数据库&#xff0c;整合了生物学数据和分析工具&#xff0c;为大规模的基因或蛋白列表(成百上千个基因ID或者蛋白ID列表)提供系统综合的生物功能注释信息&#xff0c;帮助用户从中提取生物学信息。DAVID目前的工具可以…

更轻易地实现 Jwt Token

更轻易地实现一个 Jwt ServerIntro最近在多个项目中都有用到 Jwt Token 认证&#xff0c;就想着把之前项目里 Jwt Token 的使用封装一下&#xff0c;以便于之后集成起来更加地方便&#xff0c;不用再拷贝代码了JWTJWT 是 JSON Web Token 的缩写&#xff0c;是目前最流行的基于 …

C和指针之字符串总结

1、C语言字符串分为字符串常量、字符数组&#xff0c;字符串常量适用于程序对它不被修改&#xff0c;需要修改字符串一般用字符数组或者是一个指向动态分配内存的数组指针。 2、需要注使用strcpy和strcat函数的时候需要保证目标函数的内存空间足够 3、使用strcmp函数的时候&…

linux shell 中文件编码查看及转换方法

一、查看文件编码。 在打开文件的时候输入:set fileencoding 即可显示文件编码格式。 二、文件编码转换 1、在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式 在打开的文件中输入:set fileencodingutf-8 2、使用iconv转换&#xff0c;iconv…

android之实现各个组件点击事件处理

android之实现各个组件点击事件处理&#xff1a;注意&#xff1a;&#xff08;TextView这个组件要点击产生效果的话&#xff0c;要设置&#xff0c;android:clickable"true"这个属性&#xff09;布局&#xff1a;layout/activity_main.xml<LinearLayout xmlns:and…

Android开发最佳实践《IT蓝豹》

Android开发最佳实践 移动开发Android经验分享应用GoogleMaterial Design摘要&#xff1a;前 段时间&#xff0c;Google公布了Android开发最佳实践的一系列课程&#xff0c;涉及到一些平时开发过程中应该保持的良好习惯以及如何使用最新的Android Design Support Library来快速…

.NET MAUI 已在塔架就位 ,4月份发布RC

最美人间三月天&#xff0c;春光不负赶路人。在充满无限希望的明媚春天里&#xff0c;一路风雨兼程的.NET 团队正奋力实现新的突破。根据计划&#xff0c;新一代移动开发平台MAUI 将于4月份 发布RC。目前&#xff0c;MAUI的测试工作和火箭发射前各项准备工作在github 上按计划有…

如何把照片正面变成反面_没有锁边机如何做衣服(五种方法)

这么多年一直没有锁边机&#xff0c;但是也做了很多衣服&#xff0c;今天给大家分享一些我曾经用过的方法。来去缝来去缝适合缝制轻薄面料&#xff0c;如雪纺、真丝、欧根纱等。反反相对&#xff0c;缝份0.5厘米把缝份剪掉0.2厘米翻过来使正面相对&#xff0c;留0.5厘米的缝份车…

C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节

1、问题 1)、结构体大小 结构体成员的内存分配满足下面三个条件 2 结构体第一个成员的地址和结构体的首地址相同 3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节 4 结构体总的大小要是其成员中最大si…