Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #92711
| Date | 2015-06-17 09:51 +1000 |
|---|---|
| From | Cameron Simpson <cs@zip.com.au> |
| Subject | Re: Set a flag on the function or a global? |
| References | <557fdbd6$0$11097$c3e8da3@news.astraweb.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.530.1434500492.13271.python-list@python.org> (permalink) |
On 16Jun2015 18:18, Steven D'Aprano <steve+comp.lang.python@pearwood.info> wrote: >On Tuesday 16 June 2015 10:35, MRAB wrote: >> On 2015-06-16 01:24, sohcahtoa82@gmail.com wrote: >>> Using a keyword argument for the edir function is the most intuitive >>> and easy to read, IMO. > >edir() has a keyword argument: edir(x, dunders=False) suppresses the return >of dunder names. But since the primary purpose of [e]dir is, in my opinion, >to be used interactively, needing to type an extra 15 characters to hide >dunders is too inconvenient. I'm just catching up here, but have now read the whole thread. I am personally against a global (==> single variable affecting all callers) of any kind, be it a function attribute or whatever. Why? For that same reason that we discourage use of functions like os.chdir or os.umask except in rare circumstances: the single call inevitably affects the entire program behaviour. Your intended use case may be interactive, where I agree the convenience looks nice. However, I think it inevitable that someone imports your edir function as an aid to writing friendly debugging messages is a larger program, and thus is escapes into noninteractive use. (As an example, I have a class named "O" which I use as a base class for many classes, especially in the debugging phase; its major semantic is friendlier __str__ and __repr__ for exactly the same reasons you wrote "edir", and with similar effect.) On that basis (avoiding global state) my preference would be strongly to rely entirely on your keyword argument (dunder=False) and to offer two flavors, such as the "edir" and "edir_" suggested elsewhere. The user can always import "edir_ as edir_noisy" if they are of the mindset which dislikes single trailing underscores. [...] >> But it's meant to be used interactively. If they're using it in a >> script, they'd most likely set the argument appropriately. > >Yes. Ideally yes. "Most likely"? I have less confidence there. >The primary use-case (at least *my* use-case, and hopefully others) is to >have "from module import edir as dir" in their Python startup file. That >means that when running interactively, they will get the enhanced version of >dir, but when running a script or an application they'll just get the >regular one. This fits well with two functions, then they can import "edir" or "edir_" as dir as they see fit. >Besides, apart from the inspect module, which probably shouldn't, who uses >dir() programmatically? Directly, perhaps rarely. But I use my O.__str__ method implicitly quite a lot, and it has a similar purpose to your edir. (It is not the same, so the parallel is not perfect.) Cheers, Cameron Simpson <cs@zip.com.au> All who love Liberty are enemies of the State. - Karl Hess
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-15 23:57 +0000
Re: Set a flag on the function or a global? Chris Angelico <rosuav@gmail.com> - 2015-06-16 10:07 +1000
Re: Set a flag on the function or a global? Ethan Furman <ethan@stoneleaf.us> - 2015-06-15 17:19 -0700
Re: Set a flag on the function or a global? Ben Finney <ben+python@benfinney.id.au> - 2015-06-16 10:20 +1000
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 19:07 +1000
Re: Set a flag on the function or a global? Ethan Furman <ethan@stoneleaf.us> - 2015-06-15 17:21 -0700
Re: Set a flag on the function or a global? sohcahtoa82@gmail.com - 2015-06-15 17:24 -0700
Re: Set a flag on the function or a global? MRAB <python@mrabarnett.plus.com> - 2015-06-16 01:35 +0100
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 18:18 +1000
Re: Set a flag on the function or a global? Oscar Benjamin <oscar.j.benjamin@gmail.com> - 2015-06-16 13:45 +0100
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 22:46 +0000
Re: Set a flag on the function or a global? Cameron Simpson <cs@zip.com.au> - 2015-06-17 09:51 +1000
Re: Set a flag on the function or a global? Steven D'Aprano <steve@pearwood.info> - 2015-06-18 00:59 +1000
Re: Set a flag on the function or a global? Laura Creighton <lac@openend.se> - 2015-06-17 17:06 +0200
Re: Set a flag on the function or a global? Steven D'Aprano <steve@pearwood.info> - 2015-06-18 01:55 +1000
Documenting a function signature (was: Set a flag on the function or a global?) Ben Finney <ben+python@benfinney.id.au> - 2015-06-18 10:04 +1000
Re: Documenting a function signature (was: Set a flag on the function or a global?) Ian Kelly <ian.g.kelly@gmail.com> - 2015-06-17 18:10 -0600
Re: Documenting a function signature (was: Set a flag on the function or a global?) Chris Angelico <rosuav@gmail.com> - 2015-06-18 10:14 +1000
Re: Documenting a function signature (was: Set a flag on the function or a global?) random832@fastmail.us - 2015-06-18 08:37 -0400
Re: Documenting a function signature (was: Set a flag on the function or a global?) Laura Creighton <lac@openend.se> - 2015-06-18 23:38 +0200
Re: Documenting a function signature Ben Finney <ben+python@benfinney.id.au> - 2015-06-19 10:41 +1000
Re: Set a flag on the function or a global? Ron Adam <ron3200@gmail.com> - 2015-06-15 20:24 -0400
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 19:15 +1000
Re: Set a flag on the function or a global? Ron Adam <ron3200@gmail.com> - 2015-06-16 07:02 -0400
Re: Set a flag on the function or a global? Chris Angelico <rosuav@gmail.com> - 2015-06-16 10:32 +1000
Re: Set a flag on the function or a global? Paul Rubin <no.email@nospam.invalid> - 2015-06-15 17:37 -0700
Re: Set a flag on the function or a global? Ethan Furman <ethan@stoneleaf.us> - 2015-06-15 17:53 -0700
Re: Set a flag on the function or a global? Paul Rubin <no.email@nospam.invalid> - 2015-06-15 19:04 -0700
Re: Set a flag on the function or a global? MRAB <python@mrabarnett.plus.com> - 2015-06-16 02:15 +0100
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 18:30 +1000
Re: Set a flag on the function or a global? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-06-16 07:06 +0100
Re: Set a flag on the function or a global? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2015-06-16 19:28 +1000
Re: Set a flag on the function or a global? Jonas Wielicki <jonas@wielicki.name> - 2015-06-16 12:00 +0200
Re: Set a flag on the function or a global? Michael Torrie <torriem@gmail.com> - 2015-06-16 07:44 -0600
Re: Set a flag on the function or a global? Michael Torrie <torriem@gmail.com> - 2015-06-16 07:56 -0600
Re: Set a flag on the function or a global? Peter Otten <__peter__@web.de> - 2015-06-16 15:59 +0200
Re: Set a flag on the function or a global? Ethan Furman <ethan@stoneleaf.us> - 2015-06-16 07:57 -0700
csiph-web