字符串格式化问题及将字符串与数字连接
我之前是用C#编程的,像这样做:
Console.Write("some text" + integerValue);
所以整数会自动转换成字符串,然后输出。
但是在Python中,当我这样做时:
print 'hello' + 10
我会遇到错误。
我每次都需要手动转换成字符串吗?
在Python中我该怎么做呢?
String.Format("www.someurl.com/{0}/blah.html", 100);
我开始真的很喜欢Python,感谢大家的帮助!
4 个回答
2
除了字符串格式化,你还可以这样打印:
print "hello", 10
这样做是可行的,因为这些是分开的参数,打印函数会把非字符串的参数转换成字符串(并在它们之间加一个空格)。
4
从Python 2.6开始:
>>> "www.someurl.com/{0}/blah.html".format(100)
'www.someurl.com/100/blah.html'
为了支持旧版本的环境,%
运算符也有类似的作用:
>>> "www.someurl.com/%d/blah.html" % 100
'www.someurl.com/100/blah.html'
如果你想使用命名参数,可以传递一个dict
(字典)。
>>> url_args = {'num' : 100 }
>>> "www.someurl.com/%(num)d/blah.html" % url_args
'www.someurl.com/100/blah.html'
一般来说,当需要混合不同类型时,我推荐使用字符串格式化:
>>> '%d: %s' % (1, 'string formatting',)
'1: string formatting'
字符串格式化会通过调用对象的__str__
方法,把对象转换成字符串。[*] 关于Python字符串格式化的详细文档可以在这里找到。这个行为在Python 3及以上版本中有所不同,因为所有字符串都是unicode格式。
如果你有一个字符串的列表或元组,join
方法非常方便。它会在可迭代对象的所有元素之间添加一个分隔符。
>>> ' '.join(['2:', 'list', 'of', 'strings'])
'2: list of strings'
如果你在一个需要支持旧环境的情况下(例如Python <2.5),通常应该避免字符串拼接。可以参考评论中提到的文章。
[*] Unicode字符串使用__unicode__
方法。
>>> u'3: %s' % ':)'
u'3: :)'
3
>>> "www.someurl.com/{0}/blah.html".format(100)
'www.someurl.com/100/blah.html'
在Python 2.7或3.1中,你可以跳过0
这个数字。