字符串格式的参数数量
Number of Arguments for String Formatting
我想知道给定格式字符串所需的参数数量。例如,"%s is my name, and %s is my hair color"
需要两个参数。我 可以 找到 %
出现在字符串中的次数,但是如果我真的想要 %
在我的字符串中并且它有%%
表示。它也看起来一点也不优雅。有没有更好的方法?
我能想到的最简单的方法是:
my_string = "%s is my name, and %s is my hair color"
my_string.count('%') - 2 * my_string.count('%%')
效率不高 - 也不是很认真 :) ...
for n in xrange(10, -1, -1):
try:
s % (('',)*n)
except TypeError:
continue
print n
break
好吧,您可以为此使用格式化程序对象,因为它需要此函数来实现其自身的格式化目的。但是,您必须更改占位符。
import string
fmt = string.Formatter()
my_string = "Hello, {0:s} is my name and {1:s} is my hair color. I have 30% blue eyes"
parts = fmt.parse(my_string)
print list(parts)
这给出:
[('Hello, ', '0', 's', None), (' is my name and ', '1', 's', None), (' is my hair color. I have 30% blue eyes', None, None, None)]
现在是过滤掉正确部分的问题,即每个元组中的第 3 项不是 None。
一切都可以变成这样的一行:
len([p for p in fmt.parse(my_string) if p[2] is not None]) # == 2
我想知道给定格式字符串所需的参数数量。例如,"%s is my name, and %s is my hair color"
需要两个参数。我 可以 找到 %
出现在字符串中的次数,但是如果我真的想要 %
在我的字符串中并且它有%%
表示。它也看起来一点也不优雅。有没有更好的方法?
我能想到的最简单的方法是:
my_string = "%s is my name, and %s is my hair color"
my_string.count('%') - 2 * my_string.count('%%')
效率不高 - 也不是很认真 :) ...
for n in xrange(10, -1, -1):
try:
s % (('',)*n)
except TypeError:
continue
print n
break
好吧,您可以为此使用格式化程序对象,因为它需要此函数来实现其自身的格式化目的。但是,您必须更改占位符。
import string
fmt = string.Formatter()
my_string = "Hello, {0:s} is my name and {1:s} is my hair color. I have 30% blue eyes"
parts = fmt.parse(my_string)
print list(parts)
这给出:
[('Hello, ', '0', 's', None), (' is my name and ', '1', 's', None), (' is my hair color. I have 30% blue eyes', None, None, None)]
现在是过滤掉正确部分的问题,即每个元组中的第 3 项不是 None。
一切都可以变成这样的一行:
len([p for p in fmt.parse(my_string) if p[2] is not None]) # == 2