## 7.1.2 The String format() Method 

Basic usage of the$_{str.format()}$ method looks like this: 

>>> print('We are the {} who say " {} !"'.format( 'knights','Ni ')) We are the knights who say "Ni!" 

The brackets and characters within them (called format fields) are replaced with the objects passed into the str. format() method. A number in the brackets can be used to refer to the position of the object passed into the str.format() method. 

>>> print(' {0} and {1} '.format( 'spam','eggs')) spam and eggs >>> print(' {1} and {0} '.format( 'spam','eggs')) eggs and spam 

If keyword arguments are used in the$_{str.format()}$ method, their values are referred to by using the name of the argument. 

>>> print('This {food} is {adjective} .'.format( ... food='spam', adjective ='absolutely horrible')) This spam is absolutely horrible. 

Positional and keyword arguments can be arbitrarily combined: 

>>> print('The story of {0} , {1} , and {other} .'.format( 'Bill','Manfred', other='Georg')) The story of Bill, Manfred, and Georg. 

If you have a really long format string that you don’t want to split up, it would be nice if you could reference the variables to be formatted by name instead of by position. This can be done by simply passing the dict and using square brackets$_{'[]'}$ to access the keys. 

>>> table={ 'Sjoerd':4127 ,'Jack':4098 ,'Dcab':8637678 } >>> print('Jack: {0[Jack]:d} ; Sjoerd: {0[Sjoerd]:d} ;' ... 'Dcab: {0[Dcab]:d} '.format(table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 

This could also be done by passing the table as keyword arguments with the ‘**’ notation. 

>>> table={ 'Sjoerd':4127 ,'Jack':4098 ,'Dcab':8637678 } >>> print('Jack: {Jack:d} ; Sjoerd: {Sjoerd:d} ; Dcab: {Dcab:d} '.format( **table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 

This is particularly useful in combination with the built-in function$_{vars()}$ , which returns a dictionary containing all local variables. 

As an example, the following lines produce a tidily-aligned set of columns giving integers and their squares and cubes: 

>>>for x in range(1,11 ): ... print(' {0:2d}{1:3d}{2:4d} '.format(x, x *x, x*x*x)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 

