最近学习python 2 ,觉得有必要小结一下关于字符串处理中的formatters,

转载请声明本文的引用出处:仰望大牛的小清新

0.%进行变量取值使用的时机

在python中,如果我们只是需要在字符串中输出变量的内容,我们可以无需使用formatters,例如:

 # python 2
#以下代码输出 days 变量的值,没有使用到formatters,因此也不需要使用%
days = "Mon Tue Wed Thu Fri Sat Sun"
print "Here are the days: " , days, ".\n These days are perfect."

当我们使用到了formatters的时候,我们才需要%在字符串后取变量的值。如果取一个变量,则只需 % 变量名,如果是多个变量,则需要 %(变量1,变量2,....)

例如:

 #python 2
#取1个变量的值
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %s." % months #取多个变量的值,并接一个字符串
print "The date is: %s %s." % (month, day), "And she will marry to Lu."

1.%s和%r的区别:

对于非字符串类,%s使用str() 方法,而%r使用repr()方法

对于字符串而言,却别就在于,'%s' 才等价于 %r,换句话说,%r会自动给字符串加上单引号,这是由于%r本身 “还原对象”的特性决定的

因此,%r适用于debug,而%s更适用于输出字符串,即使字符串之间可嵌套。

%r产生的,是 “raw presentation”的版本,举例如下

%r用于调试的例子:

 # 如果我们使用%s,则会输出换行符
# 但如果我们使用%r,则会输出\n,而不换行
months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" %months

2.python的字符串操作当中支持字符串的嵌套

例如

 # python 2 的示例
a_str = "Your name is %s."
my_name = " 张三 "
print a_str % my_name

更进一步,我们可以将formatters定义为一个变量,使用%r来进行调试性的输出

例如,下面这个例子可以调试4个参数的值

 # -*- coding: utf-8 -*-
# from __future__ import unicode_literals formatter = "%r %r %r %r" print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")
print formatter % (True, False, True, False)
print formatter % (formatter, formatter, formatter, formatter)
print formatter % (
"I had this thing.",
"That you could type up right",
"But it didn't string.",
"So I said goodnight."
)

而我们也可以利用字符串*的方法使得调试输出的参数数目可变

例如

 #num为需要调试的参数的数目
num = 5
formatter = "%r " * num
print formatter % (
"one", "two", "three"
,"four", "five"
)

3. 一个print 语句 执行后默认会换行,在print后面加上逗号,可以使得print不进行换行

例如

 #这两据print将会输出到同一行
#将第一个print后面的逗号去掉后,将会换行
print "And everywhere that Marry went.",
print "I'm here."

4.字符串之间的+操作起到连接字符串的作用

例如

 end1 = "C"
end2 = "h"
end3 = "e"
end4 = "e"
end5 = "s"
end6 = "e"
end7 = "B"
end8 = "u"
end9 = "r"
end10 = "g"
end11 = "e"
end12 = "r" #watch that comma at the end. try removing it to see what happens
print end1 + end2 + end3 + end4 + end5 + end6,
print end7 + end8 + end9 + end10 + end11 + end12

5.字符串的*一个数字n,表示将该字符串连续输出n遍

例如

 #下面两行的行为等价,都是在一行中连续输出10个你好
print 10 * "你好"
print "你好" * 10

6.很长的字符串可以用三个双引号开头,跨行写,并以三个双引号结尾

例如

 # python 2
# 输出跨行的很长的字符串
print """
There's somthing going on here.
With the three double-quotes.
We'll be able to type as mych as we like.
Even 4 lines if we want, or 5, or 6
"""

同时,需要注意的是,在""" 之间 """的内容的换行和我们的输入换行是一样的,下面的例子说明了这一点

例如

 # python 2
# 在三个双引号之间的多行文本,在输出
#的换行中,与文本本身的换行一致,不需要专门写\n
#例如下面例子中前几行和最后一行写了\n的换行是等效的 fat_cat = """
I'll do a list:
\t* Cat food
\t* Fishies
\t* Catnip\n\t* Grass
"""
print fat_cat

7.\r是回车符,用于将光标置于行首,将print后面加上逗号,即可以将所有的回车连起来,这样可以起到在一行不断刷新输出的效果

例如

 # 一个有趣的代码实验,%r是回车,用于回到行首
# 因此%r可以用于刷新符号的代码
while True:
for i in ["/","-","|","\\","\""]:
print "%s\r" % i, #注意行尾的逗号,保证了输入在同一行

python formatters 与字符串 小结 (python 2)的更多相关文章

  1. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  2. 9.9 Python 文档字符串

    9.9 Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会 ...

  3. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  4. python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

    1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fal ...

  5. Python 遗传算法实现字符串

    Python 遗传算法实现字符串 流程 1. 初始化 2. 适应度函数 3. 选择 4. 交叉 5. 变异 适应度函数计算方法 计算个体间的差:分别计算每个元素与目标元素的差取平方和 种群:计算总体均 ...

  6. python- 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

    1.双层装饰器 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fa ...

  7. python 3 学习字符串和编码

    字符串和编码 阅读: 895464 字符编码 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字 ...

  8. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  9. Python基础之字符串和编码

    字符串和编码 字符串也是一种数据类型,但是字符串比较特殊的是还有个编码问题. 因为计算机自能处理数字,如果徐娅处理文本,就必须先把文本转换为数字才能处理,最早的计算机子设计时候采用8个比特(bit)作 ...

随机推荐

  1. AGC017C Snuke and Spells(巧妙的线段覆盖模型)

    题目大意: 给出n个球,每个球上都有数字,然后每次都进行如下操作 如果当前的球总共有k个,那么就把球上数字为k的所有球都消除掉 注意到,并不是每种情况都可以全部消光,所以你可以选择若干球,把它们标号改 ...

  2. SRM708 div1 PalindromicSubseq(动态规划+容斥原理)

    题目大意:给定一个字符串,记X[i]为包含s[i]这个字符的所有子列是回文串的个数(注意是子列而不是子串),求出所有的X[i]*(i+1),然后异或起来作为返回结果 题解: 首先用容斥来想,如果当前枚 ...

  3. ZOJ 2314 Reactor Cooling | 无源汇可行流

    题目: 无源汇可行流例题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题解: 证明什么的就算了,下面给出一种建图方式 ...

  4. 修改innodb_flush_log_at_trx_commit参数提升insert性能

    最近,在一个系统的慢查询日志里发现有个insert操作很慢,达到秒级,并且是比较简单的SQL语句,把语句拿出来到mysql中直接执行,速度却很快. 这种问题一般不是SQL语句本身的问题,而是在具体的应 ...

  5. [ZJOI2007]棋盘制作 (单调栈)

    [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间 ...

  6. C++构造函数重载以及默认参数引起的二义性

    大家都知道当我们声明一个类时,系统会提供一个默认构造函数.当我们需要提供参数进行对类数据成员进行初始化时,就需要对类的带参构造函数进行重载.同时,如果我们需要调用默认构造函数进行类数据成员的初始化时, ...

  7. apply()和call()

    每个函数都包含俩个非继承而来的方法:apply() 和 call(),这俩个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值,以扩充函数赖以运行的作用域.一般来讲,thi ...

  8. 关于flume的几道题

    1,要求:监听一个tcp,udp端口41414将数据打印在控制台 # example.conf: A single-node Flume configuration # Name the compon ...

  9. php多虚拟主机配置

    一.配置httpd.conf# Virtual hosts#Include conf/extra/httpd-vhosts.conf       //取消这一行的# 二.配置httpd-vhosts. ...

  10. 【洛谷 P3629】 [APIO2010]巡逻 (树的直径)

    题目链接 容易发现,当加一条边时,树上会形成一个环,这个环上的每个点都是只要走一次的,也就是说我们的答案减少了这个环上点的个数,要使答案最小,即要使环上的点最多,求出直径\(L\),则答案为\(2(n ...