On 2017-10-13, Steve D'Aprano <steve+pyt...@pearwood.info> wrote: > On Fri, 13 Oct 2017 11:54 pm, Gregory Ewing wrote: > >> Neil Cerutti wrote: >>> I can tell at a glance if a parameter is expected to be >>> modifiable just by looking at the function signature. >> >> The question is why doesn't anyone feel the need to be >> able to do that for Python functions? Whether a function >> modifies things passed to it is just as important to >> know in Python as it is in C. > > Lots of people would like Python to have a "freeze" function > that can make immutable objects, it is a moderately common > feature request. > > Some people (myself included) would like a "const" declaration > that gives us names that can only be bound to once: > > const spam = "NOBODY expects the Spanish Inquisition!!!" # > Okay spam = "foo" # Error. > > I don't mind if that is a runtime error, although a compile > time error would be nicer.
When there are many constants I tend to create a class called Constant that either doesn't get instanced, or has only one instance (sometimes some of my constants need to be calculated once at runtime). > I don't know if either of these (actual immutable pure-Python > objects, and un-rebindable names) count as quite the same thing > you are asking Neil about. But I trust they're related. Looking at the Python functions I actually write today, I've evolved my style until I simply don't modify function arguments, so it matters not if parameters are declared const. But my oldest programs still in use are different. For example: records = defaultdict(Data) read_unmatched_records(records) And then later code continues screwing around with that dictionary and liberally using C-style constant names, e.g.: for fname in glob.glob(COUNSELING_ACK): process_counseling_acks(fname, records) for fname in glob.glob(PLUS_APP_ACK): process_plus_request(fname, records) Such code feels alien to me now. A small script for reading promissory note acknowledgements grew into a business-vital, 1,000 LOC octopus without my leave. -- Neil Cerutti -- https://mail.python.org/mailman/listinfo/python-list