Python中字符串格式化:%和format

Python2.6推出了[str.format()]方法,和原有的%格式化方式有小小的区别。那个方法更好?

  1. 下面的方法有同样的输出,它们的区别是什么?

     #!/usr/bin/pythonsub1 = "python string!"sub2 = "an arg"a = "i am a %s" % sub1b = "i am a {0}".format(sub1)c = "with %(kwarg)s!" % {'kwarg':sub2}d = "with {kwarg}!".format(kwarg=sub2)print a    # "i am a python string!"print b    # "i am a python string!"print c    # "with an arg!"print d    # "with an arg!"
    
  2. 另外在Python中格式化字符串什么时候执行?例如如果我的loggin的优先级设置为高,那么我还能用%操作符吗?如果是这样的话,有什么方法可以避免吗?

    log.debug("some debug info: %s" % some_info)

    问题源于:Python string formatting: % vs. .format - Stack Overflow。

第一个问题:

format在许多方面看起来更便利。你可以重用参数,但是你用%就不行。最烦人的是%它无法同时传递一个变量和元组。你可能会想下面的代码不会有什么问题:

"hi there %s" % name

但是,如果name恰好是(1, 2, 3),它将会抛出一个TypeError异常。

>>> name = (1, 2, 3)
>>> "hi there %s" % name     
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>>

为了保证它总是正确的,你必须这样做:

>>> "hi there %s" % (name,)  # 提供一个单元素的数组而不是一个参数
'hi there (1, 2, 3)'
>>>

但是有点丑,format就没有这些问题。你给的第二个问题也是这样,format好看多了。

你为什么不用它?

  • 不知道它(在读这个之前)
  • 为了和Python2.5兼容

第二个问题:

字符串格式和其他操作一样发生在它们运行的时候。Python是非懒惰语言,在函数调用前执行表达式,所以在你的log.debug例子中,"some debug info: %s"%some_info将会先执行,先生成"some debug info: roflcopters are active",然后字符串将会传递给log.debug()

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

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

相关文章

jsAutomation 服务器不能创建对象(转)

var ExApp new ActiveXObject("Excel.Application") “automation服务器不能创建对象”的问题的解决方案大全本人工作中的应用系统都是jsp的&#xff0c;大量javascript程序&#xff0c;一旦出“automation服务器不能创建对象”问题&#xff0c;大量报表及查询无法保…

天池 在线编程 音乐组合

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744274 2. 解题 对60求余后&#xff0c;0, 30的为 Cn2C_n^2Cn2​&#xff0c;其余的相加等于60的&#xff0c;种类相乘 class Solution { public:/*** param …

java之NIO(Channel,Buffer,Selector)

java之NIO 1 什么是NIO Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO的三大核心部分&#xff1a;通道(Channel)&#xff0c;缓冲区(Buffer), 选择器(Selector)&#xff0c;数据总是从…

Python中对象名称前单下划线和双下划线有啥区别

单下划线 在一个类中的方法或属性用单下划线开头就是告诉别的程序这个属性或方法是私有的。然而对于这个名字来说并没有什么特别的。 引自PEP-8&#xff1a; 单下划线&#xff1a;"内部使用"的弱指示器。比如&#xff0c;from M import * 将不会引进用但下划线开头的…

JQUERY解析XML IE8的兼容问题

var str"xml字符串"; alert($(str).find("Row").attr("Id")); 在IE8下&#xff0c;这段脚本无法运行&#xff0c;&#xff0c;而在IE9以上的版是正常的 IE8浏览器只能强制把字符串转成XML ajaxfxml new ActiveXObject("Microsoft.XMLDOM&q…

LeetCode 1652. 拆炸弹(前缀和)

文章目录1. 题目2. 解题1. 题目 你有一个炸弹需要拆除&#xff0c;时间紧迫&#xff01;你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将…

Hadoop DistCp工具简介及其参数

1 概述 DistCp&#xff08;分布式拷贝&#xff09;是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发&#xff0c;错误处理和恢复&#xff0c;以及报告生成。 它把文件和目录的列表作为map任务的输入&#xff0c;每个任务会完成源列表中部分文件的拷贝…

MYSQL从入门到精通

SQL是数据库的查询语言&#xff0c;语法结构简单&#xff0c;相信本文会让你从入门到熟练。 掌握SQL后&#xff0c;不论你是产品经理、运营人员或者数据分析师&#xff0c;都会让你分析的能力边界无限拓展。别犹豫了&#xff0c;赶快上车吧&#xff01; SQL最小化的查询结构如下…

LeetCode 1653. 使字符串平衡的最少删除次数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。 我们称 s 平衡的 当不存在下标对 (i,j) 满足 i < j 且 s[i] b 同时 s[j] a 。 请你返回使 s 平衡 的 最少 删除…

DistCp迁移Hive数据过程中源集群增加删除文件等场景测试

1 概述 由于在数据迁移过程中&#xff0c;上层任务仍在运行&#xff0c;会出现源集群新增文件及删除文件的情况&#xff0c;因此进行测试 2 需要同步的数据文件说明 源集群&#xff1a;192.168.40.100:8020&#xff0c;目标集群&#xff1a;192.168.40.200:8020   数据目录及…

CentOS6.0 yum php mcrypt 扩展安装问题

基本原理是&#xff1a;首先使mcrypt软件能够运行&#xff0c;然后安装php扩展模块&#xff0c;并在php.ini配置。 这里注意的是mcrypt软件依赖libmcrypt和mhash两个库&#xff0c;所以安装配置顺序从右至左 I 下载安装mcrypt 1.先去http://www.sourceforge.net 下载Libmcrypt,…

我不想用for循环

为什么要挑战自己在代码里不写for loop&#xff1f;因为这样可以迫使你去使用比较高级、地道的语法或库。文中以python为例子&#xff0c;讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。 这是一个挑战。我要你避免在任何情况下写for循环。同样的&#xff0c;我也…

LeetCode 1654. 到家的最少跳跃次数(BFS)

文章目录1. 题目2. 解题1. 题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 往后 跳恰好 b 个位置&#xff08;即往左跳&…

一台服务器上部署多个Terracotta的方法

在window server 2003 下&#xff0c;利用apache2.2.11tomcat6terracotta 群集不能复制session&#xff08;http://forums.terracotta.org/forums/posts/list/2342.page&#xff09; 其中提到更新服务器配置的方法&#xff1a; bin/tim-get.sh upgrade tc-config.xml 实际upgra…

Maven详解及实例

1 什么是Maven Maven对项目进行模型抽象&#xff0c;充分运用的面向对象的思想&#xff0c;Maven可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。简单的来说Maven是…

Python多线程详解

1、多线程的理解 多进程和多线程都可以执行多个任务&#xff0c;线程是进程的一部分。线程的特点是线程之间可以共享内存和变量&#xff0c;资源消耗少&#xff08;不过在Unix环境中&#xff0c;多进程和多线程资源调度消耗差距不明显&#xff0c;Unix调度较快&#xff09;&…

LeetCode 1655. 分配重复整数(回溯)

文章目录1. 题目2. 解题2.1 回溯1. 题目 给你一个长度为 n 的整数数组 nums &#xff0c;这个数组中至多有 50 个不同的值。 同时你有 m 个顾客的订单 quantity &#xff0c;其中&#xff0c;整数 quantity[i] 是第 i 位顾客订单的数目。请你判断是否能将 nums 中的整数分配给…

Flink的异步I/O及Future和CompletableFuture

1 概述 Flink在做流数据计算时&#xff0c;经常要外部系统进行交互&#xff0c;如Redis、Hive、HBase等等存储系统。系统间通信延迟是否会拖慢整个Flink作业&#xff0c;影响整体吞吐量和实时性。 如需要查询外部数据库以关联上用户的额外信息&#xff0c;通常的实现方式是向数…

MYSQL账户管理及主要操作

账户管理 在生产环境下操作数据库时&#xff0c;绝对不可以使用root账户连接&#xff0c;而是创建特定的账户&#xff0c;授予这个账户特定的操作权限&#xff0c;然后连接进行操作&#xff0c;主要的操作就是数据的crudMySQL账户体系&#xff1a;根据账户所具有的权限的不同&a…

LeetCode 1656. 设计有序流(数组)

文章目录1. 题目2. 解题1. 题目 有 n 个 (id, value) 对&#xff0c;其中 id 是 1 到 n 之间的一个整数&#xff0c;value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流&#xff0c;以 任意 顺序获取 n 个 (id, value) 对&#xff0c;并在多次调用时 按 …