我知道有两种方法可以在字符串中包含命名参数:
name = "Mary"
pet = "lamb"
# option 1
message = "%(name)s had a little %(pet)s" % {"name": name, "pet": pet}
print(message)
# option 2
message = "{name} had a little {pet}"
message.format(name = name, pet = pet)
print(message)
# I'm not actually sure if `name = name` works, usually these are different
Run Code Online (Sandbox Code Playgroud)
我认为其中任何一个都不具备可读性.有没有办法减少重复变量名称的次数?
字符串参数的命名(非空)非常重要,这样:
%(name)s %(name)s quite contrary how does your %(pet)s grow?%(name)s alikuwa kidogo %(pet)s用一个对象:
person.name = 'foo'
person.age = 12
Run Code Online (Sandbox Code Playgroud)
你可以做:
print '{name} is {age} old'.format(**person.__dict__)
Run Code Online (Sandbox Code Playgroud)
用字典:
a = {'name': 'foo', age: 12}
print '{name} is {age} old'.format(**a)
Run Code Online (Sandbox Code Playgroud)
使用list/tuple/set/namedtuple:
a = [1,2,3]
b = (1,2,3)
c = set([1,2,3,1])
from collections import namedtuple
Foo = namedtuple('Foo', 'x y z')
foo = Foo(1,2,3)
print '{} {} {}'.format(*foo)
print '{} {} {}'.format(*a)
print '{} {} {}'.format(*b)
print '{} {} {}'.format(*c)
print '{} {} {}'.format(*foo)
Run Code Online (Sandbox Code Playgroud)
但是,namedtuple它不仅仅是一个元组,它也是一个对象,所以你也可以这样做:
print '{x} {z} {y}'.format(**foo._asdict())
Run Code Online (Sandbox Code Playgroud)
列表可能会更长,我会停在这里,但现在你明白了......
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |