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 units.to(20.0_mi, 'km') 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, deg(90) celsius(20) center('my string') # or 'my string'.center(80) But somehow it seems nicer to write 42_km than 12 * pint.UnitRegistry().km - Pål
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/