[Python-ideas] datetime.timedelta literals
Pål Grønås Drange
paal.drange at gmail.com
Mon Jun 4 16:59:34 EDT 2018
For the general user-defined literals, here are some example use cases:
Here is how to expose literals:
__literals__ = ['__literal_h__', '__literal_min__', '__literal_s__']
And here is how to import them:
from mymodule import _* # imports all literals from mymodule
# could also be *_ or ** or ~ or __literals__ ?
90_deg # 1.0 in rad
20_°C # 293.15 Kelvin
e = 1_X + 4_G + 13_M + 180_k # SI scale factors can easily be implemented
p = 3_x - 2_y + 1_z # Coordinate in 3D
M = 4_I # The 4x4 Identity Matrix
p * 2_pi # because it's simpler than 2 * np.pi
p * 11_π # why not
d = 2_sqrt # sqrt(2), or simply 2**(1/2), not a killer argument
h1 = 30_px
h2 = 4_em # sizes for typography
c = 'ffff00'_color # the color yellow
h = 'My header'_h3 # renders <h3>My header</h3> or something
g = 9.81_m_div_ss # that was ugly ...
'More weird examples'_info # log.info(msg)
'2018-06-04'_AD # is a date
'192.168.0.42'_ip4 # why not?
'USER'_os # = os.environ.get(x, '')
# Can have state?
initialize(80) # set default string width to 80 chars
'my string'_c # will now be centralized in 80 chars
'my string'_l # will now be left aligned in 80 chars
'my string'_r # will now be right aligned in 80 chars
If we used, e.g. tilde, we could even use it on function calls
y = fun(x)~dx # differentiations! Like decorators, but on "call time"
I accept that introducing a new symbol has a very high threshold, and
will not go through. I just wanted to mention it.
Yes, we could write all these as easily as function calls,
center('my string') # or 'my string'.center(80)
But somehow it seems nicer to write 42_km than 12 * pint.UnitRegistry().km
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-ideas