[Python-3000] String formating operations in python 3k

Ian Bicking ianb at colorstudy.com
Mon Apr 3 18:13:28 CEST 2006


Barry Warsaw wrote:
> On Mon, 2006年04月03日 at 23:43 +1000, Nick Coghlan wrote:
>>>>What do you think of a "format" builtin function that accepts the format as 
>>the first argument (similar to printf).
>>>>The version on my harddrive permits positional arguments via 1,ドル 2,ドル etc, as 
>>well as string formatting (by sticking the format code in square brackets 
>>between the $ and the identifier). Keyword arguments still work, naturally.
>>>>And if you don't want formatting, you just leave out the square brackets.
>>> I'm not totally sure I would need a builtin. If I look at the two
> sources of $-strings in an app like Mailman, I'll see 1) literal human
> readable/translatable strings in the source code, 2) human entered
> strings that come from a web form.
>> In the first case, all string formatting will funnel through one
> bottleneck function, which will do the catalog lookup, frame variable
> discovery, and substitution all in one fell swoop. So there, the
> builtin doesn't buy you much convenience.

Well, error messages are a common place I use %. So:
assert path.startswith(prefix), (
 "%r should start with %r" % (path, prefix))
assert path.startswith(prefix), (
 $"${repr(path)} should start with ${repr(prefix)}")
assert path.startswith(prefix), (
 "$path should start with $prefix".substitute(
 path=repr(path), prefix=repr(prefix))
The second example assumes that you can include full expressions, 
otherwise that example would start looking really unpleasant. As it is, 
the first example still looks more-or-less the best, and it's too bad 
$-based substitution doesn't include it. I'm not sure how it would 
include it, unless there was something like $=path, or $<path>, or 
$`path` or something. I dunno, none of those are very appealing.
str.substitute isn't too bad, except that "substitute" feels a little 
long-winded (compared to, say, str.format). If "$path".format() worked, 
that'd be nice, but even though it's not that hard to implement, it 
breaks a lot of expectations.
Anyway, that's one example. Any non-i18n'd code will likely have a fair 
amount of string substitution which isn't otherwise wrapped in any routines.
-- 
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org


More information about the Python-3000 mailing list

AltStyle によって変換されたページ (->オリジナル) /