• Which more Pythonic - self.__class__ or type(self)?

    From Ian Pilcher@21:1/5 to All on Thu Mar 2 14:54:50 2023
    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    Is there any consensus?

    --
    ========================================================================
    Google Where SkyNet meets Idiocracy ========================================================================

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Ian Pilcher on Thu Mar 2 16:58:57 2023
    On 3/2/2023 3:54 PM, Ian Pilcher wrote:
    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    Is there any consensus?

    For what purpose do you want to get it?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Greg Ewing@21:1/5 to Ian Pilcher on Fri Mar 3 11:53:28 2023
    On 3/03/23 9:54 am, Ian Pilcher wrote:
    I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    In such cases I'd probably go for type(x), because it looks less
    ugly.

    x.__class__ *might* be slightly more efficient, as it avoids a
    global lookup and a function call. But as always, measurement
    would be required to be sure.

    --
    Greg

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Greg Ewing via Python-list on Thu Mar 2 18:43:08 2023
    On 3/2/2023 5:53 PM, Greg Ewing via Python-list wrote:
    On 3/03/23 9:54 am, Ian Pilcher wrote:
    I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    In such cases I'd probably go for type(x), because it looks less
    ugly.

    x.__class__ *might* be slightly more efficient, as it avoids a
    global lookup and a function call. But as always, measurement
    would be required to be sure.

    Except that we don't know if "efficiency" - whatever that might mean
    here - matters at all.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to Greg Ewing via Python-list on Thu Mar 2 19:35:41 2023
    My understanding is that python created functions like type() and len() as a general purpose way to get information and ALSO set up a protocol that
    classes can follow by creating dunder methods. I think the most pythonic
    things is to avoid directly calling the dunder methods with a few exceptions that mainly happen when you are building or extending classes. I mean some dunder methods are then called directly to avoid getting into infinite loops that would be triggered.

    And note in many cases, the protocol is more complex. Is a length built-in?
    If not, can the object be iterated and you count the results? Calling the function len() may get you more info as it can leverage such things. And it means you can sometimes leave out some methods and your code still works.

    Be warned that type() is a very special function in python and when called
    with more arguments, does many relatively beautiful but unrelated things. It has a special role in the class or type hierarchy. But used with a single argument, it harmlessly return a result you want.


    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Thomas Passin
    Sent: Thursday, March 2, 2023 6:43 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 3/2/2023 5:53 PM, Greg Ewing via Python-list wrote:
    On 3/03/23 9:54 am, Ian Pilcher wrote:
    I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    In such cases I'd probably go for type(x), because it looks less
    ugly.

    x.__class__ *might* be slightly more efficient, as it avoids a
    global lookup and a function call. But as always, measurement
    would be required to be sure.

    Except that we don't know if "efficiency" - whatever that might mean
    here - matters at all.

    --
    https://mail.python.org/mailman/listinfo/python-list

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Alan Gauld@21:1/5 to Ian Pilcher on Fri Mar 3 09:43:10 2023
    On 02/03/2023 20:54, Ian Pilcher wrote:
    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    I think avoiding dunder methods is generally considered more Pythonic.

    But in this specific case using isinstance() is almost always
    the better option. Testing for a specific class is likely to break
    down in the face of subclasses. And in Python testing for static types
    should rarely be necessary since Python uses duck typing
    and limiting things to a hard type seriously restricts your code.

    --
    Alan G
    Author of the Learn to Program web site
    http://www.alan-g.me.uk/
    http://www.amazon.com/author/alan_gauld
    Follow my photo-blog on Flickr at:
    http://www.flickr.com/photos/alangauldphotos

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Chris Angelico@21:1/5 to Alan Gauld on Fri Mar 3 22:32:20 2023
    On Fri, 3 Mar 2023 at 20:44, Alan Gauld <learn2program@gmail.com> wrote:

    On 02/03/2023 20:54, Ian Pilcher wrote:
    Seems like an FAQ, and I've found a few things on StackOverflow that discuss the technical differences in edge cases, but I haven't found anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    I think avoiding dunder methods is generally considered more Pythonic.

    But in this specific case using isinstance() is almost always
    the better option. Testing for a specific class is likely to break
    down in the face of subclasses. And in Python testing for static types
    should rarely be necessary since Python uses duck typing
    and limiting things to a hard type seriously restricts your code.


    Using isinstance is very different from querying the type of an object
    though. They're used for different purposes. And obj.__class__ and
    type(obj) are different too, which is why the OP specifically narrowed
    this down to the situations where you know they're the same.

    Personally, I'd probably use type(obj) if the distinction doesn't
    matter, but that's nothing more than personal preference.

    ChrisA

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Ram@21:1/5 to Ian Pilcher on Fri Mar 3 14:40:11 2023
    Ian Pilcher <arequipeno@gmail.com> writes:
    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    Here in USENET, we often use short noun phrases as subjects
    and write any questions into the body of the message. If we
    use questions in the subject, we repeat them in the body.

    ~~

    Some security guidelines recommend never to access attributes of
    "None". For example, the World-Wide Web has:

    |Attributes of None values should never be accessed.
    "RSPEC-2259"

    . Followers of this guideline would not use "None.__class__",
    but could use "type( None )". Then, for consistency with the
    "None" situation, they could prefer "type( None )" even in
    other cases.

    (But this guidelines does not seem to take into
    consideration that in Python "None" has dunder
    attributes which can be accessed without problems.)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ethan Furman@21:1/5 to Chris Angelico on Fri Mar 3 09:50:40 2023
    On 3/3/23 03:32, Chris Angelico wrote:
    On Fri, 3 Mar 2023 at 20:44, Alan Gauld wrote:
    On 02/03/2023 20:54, Ian Pilcher wrote:

    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    I think avoiding dunder methods is generally considered more Pythonic.

    Outside of writing dunder methods, I tend to agree.

    But in this specific case using isinstance() is almost always
    the better option.

    True. IIRC, the only time I haven't used `isinstance` is in `Enum`, where a particular object has to be exactly a tuple
    (not a namedtuple, for example) to work correctly.

    Using isinstance is very different from querying the type of an object though. They're used for different purposes. And obj.__class__ and
    type(obj) are different too, which is why the OP specifically narrowed
    this down to the situations where you know they're the same.

    When writing classes and subclasses, I use `obj.__class__`, `isinstance` otherwise, and rarely `type(obj)` (and then
    mostly with `tuple`s, as they're special).

    ~Ethan~

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to Ian Pilcher on Fri Mar 3 13:51:11 2023
    Alan,

    I do not buy into any concept about something being pythonic or not.

    Python has grown too vast and innovated quite a bit, but also borrowed from others and vice versa.

    There generally is no universally pythonic way nor should there be. Is there
    a C way and then a C++ way and an R way or JavaScript or does only python a language with a philosophy of what is the pythonic way?

    My vague impression was that the pythonic way was somewhat of a contrast to
    the way a programmer did it before coming to python. So some would argue
    that although python allows loops, that some things are more naturally done
    in python using a list comprehension.

    Really?

    I suggest that NOW for some people, it is way more natural to import modules like numpy and pandas and use their tools using a more vectorized approach.
    Is that the new pythonic in some situations?

    I can also argue that if you were a contestant on Jeopardy and were in a category for computer languages and were shown some computer code and asked
    to name that language in 4 lines, then the most pythonic would not be one saying type(var) but the one showing a dunder method! I mean what makes some languages special is often the underlying details! On the surface, many look fairly similar.

    Some problems not only can be solved many ways in python, but by using combinations of different programming paradigms. It can be argued by some
    that the pythonic way is to use some forms of object-oriented programming
    and by others pushing for a more functional approach. Some seem to continue pushing for efficiency and others relish at using up CPU cycles and prefer other considerations such as what is easier for the programmer or that is
    more self-documenting.

    My answer remains, in this case, like yours. The dunder methods are
    generally meant to be implementation details mostly visible when creating
    new classes or perhaps adjusting an object. They largely implement otherwise invisible protocols by providing the hooks the protocols invoke, and do it
    in a somewhat reserved name space. If the user is writing code that just
    uses existing classes, generally no dunderheads should be seen. I think
    using them is not only not pythonic, but risks breaking code if some changes
    to python are made. As one example, the iteration protocol now has new
    dunder methods added to be used for asynchronous and calling the __iter__() type methods will not work well and you now need to know to call the new
    ones. Or, don't call them at all and use the regular functions provided.

    Some things may be clearly more in the spirit of the language and sometimes
    who cares. Consider the debate that since python allows you to fail and
    catch an exception, why bother using if statements such as checking for
    no-zero before dividing. I never understood that. Plan A works. Now you can also chose plan B. They both work. But has anyone asked some dumb questions about the data the code is working on? What if you have data full of zeroes
    or NA or Inf or other things make a division problematic. What is the cost
    of testing for something or a group of things every time versus setting up a try/catch every time? What about lots of nesting of these things. What can humans read better or make adjustments to?

    In my mind, if the bad thing you want to avoid is rare and the testing is costly, perhaps the exception method is best. I mean if you are working with large numbers where primes are not common, then having to test if it is a
    prime can be costly while catching a failure may be less so.

    But consider how some people act as if pythonic means you should not care
    about efficiency! LOL!

    I leave you with the question of the day. Was Voldemort pythonic?

    Avi


    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Alan Gauld
    Sent: Friday, March 3, 2023 4:43 AM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 02/03/2023 20:54, Ian Pilcher wrote:
    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    I think avoiding dunder methods is generally considered more Pythonic.

    But in this specific case using isinstance() is almost always
    the better option. Testing for a specific class is likely to break
    down in the face of subclasses. And in Python testing for static types
    should rarely be necessary since Python uses duck typing
    and limiting things to a hard type seriously restricts your code.

    --
    Alan G
    Author of the Learn to Program web site
    http://www.alan-g.me.uk/
    http://www.amazon.com/author/alan_gauld
    Follow my photo-blog on Flickr at:
    http://www.flickr.com/photos/alangauldphotos


    --
    https://mail.python.org/mailman/listinfo/python-list

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Greg Ewing@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 13:20:42 2023
    On 4/03/23 7:51 am, avi.e.gross@gmail.com wrote:

    I leave you with the question of the day. Was Voldemort pythonic?

    Well, he was fluent in Parseltongue, which is not a good sign.

    I hope not, otherwise we'll have to rename Python to "The Language
    That Shall Not Be Named" and watch out for horcruxes during code
    reviews.

    I'll note that he was fluent in Parseltongue, which is not a good
    sign.

    --
    Greg

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Peter J. Holzer@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 08:47:32 2023
    On 2023-03-03 13:51:11 -0500, avi.e.gross@gmail.com wrote:
    I do not buy into any concept about something being pythonic or not.

    Python has grown too vast and innovated quite a bit, but also borrowed from others and vice versa.

    There generally is no universally pythonic way nor should there be. Is there a C way

    Oh, yes. Definitely.

    and then a C++ way and an R way or JavaScript

    JavaScript has a quite distinctive style. C++ is a big language (maybe
    too big for a single person to grok completely) so there might be
    several "dialects". I haven't seen enough R code to form an opinion.

    or does only python a language with a philosophy of what is the
    pythonic way?

    No. Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python"). Also quite similar to
    natural languages where you can guess the native language of an L2
    speaker by their accent and phrasing.

    hp

    --
    _ | Peter J. Holzer | Story must make more sense than reality.
    |_|_) | |
    | | | hjp@hjp.at | -- Charles Stross, "Creative writing
    __/ | http://www.hjp.at/ | challenge!"

    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEETtJbRjyPwVTYGJ5k8g5IURL+KF0FAmQC948ACgkQ8g5IURL+ KF1jkxAAq9Fe2aB2kMoQT/6vSBw4bfu1JYi633R8xOV4YRgbH1kI9z7kCNgjNRFW d9e2N3hW0u923HoXo+J+Ddnmh9uDxQ4TOVPtoD0vuQs/clcgT1DoOsrDJSyyBWkj pDhVian62Ua16hIfel0pwuAmGIsJwHX5Mh6i7tvoHYBTbMB2dVNSDUxi4IOGOlie gU28sLYmIShH1kWiqOkxW/6rzl5wK9MqVx4oJoDaf387zlzM0rS+OFUV7Eov0+xt DKimq4j/+dEG77jXHZFoVjoIfoq+hVf+UHj/wGhm6aj7BmAeua7iycwNzdP4mIDe UP7IjXh2Ods7VwwDPPBq+Fvpo2CAeYLpdU9M8zNNWNZ1S9gg5FTO5BV8ibFyjar3 5jvFS6fKGeCypv0bgY2R6F+jyDbMJXRc41jUBn5m+PM2UEcnoC6FXyZGoB44hGAn PxGyi6ldnPsHGiioUj63QY1QluScNYGzbFmQA+BIpjco8Y0t7bb83cG6TmSlxiZk y00cDax27KbNjnM1UnteAFY5fnVqQmo8xzEsyBCLwfL8taINjaTAxDFX6HHyT7Il 9IEuEODQtwstkynA8UTRpsjURQ/7luu0MZObapluRz4Fr9Y7GBQZEde64xeP2sz3 0NT5WREVzTo5POju8UpQ98ISxaanTm2GmY8YzuC
  • From Thomas Passin@21:1/5 to Peter J. Holzer on Sat Mar 4 13:09:22 2023
    On 3/4/2023 2:47 AM, Peter J. Holzer wrote:
    Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python").

    What Peter didn't say is that this statement is usually used in a
    disparaging sense. It tends to imply that a person can write (or is
    writing) awkward or inappropriate code anywhere.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 12:38:22 2023
    Peter,

    Of course each language has commonly used idioms as C with pointer
    arithmetic and code like *p++=*q++ but my point is that although I live near
    a seaway and from where C originated, I am not aware of words like "c-way"
    or "scenic" as compared to the way people keep saying "pythonic".

    Yes, languages develop idioms and frankly, many are replaced with time. And, yes, I am sure I can write FORTRAN style in any language as I used to teach it, but WATFOR?

    If the question is to show a dozen solutions for a problem written in VALID python and ask a panel of seasoned python programmers which they would
    prefer, then sometimes there is a more pythonic solution by that definition. Give the same test to newbies who each came from a different language background and are just getting started, and I am not sure I care how they vote!

    I suggest that given a dozen such choices, several may be reasonable choices and in some cases, I suggest the non-pythonic choice is the right one such
    as when you expect someone to port your code to other languages and you need
    to keep it simple.

    I am simply saying that for ME, some questions are not as simple as others.
    I am more interested in whether others can read and understand my code, and
    it runs without problems, and maybe even is slightly efficient, than whether someone deems it pythonic.


    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Peter J. Holzer
    Sent: Saturday, March 4, 2023 2:48 AM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 2023-03-03 13:51:11 -0500, avi.e.gross@gmail.com wrote:
    I do not buy into any concept about something being pythonic or not.

    Python has grown too vast and innovated quite a bit, but also borrowed
    from
    others and vice versa.

    There generally is no universally pythonic way nor should there be. Is
    there
    a C way

    Oh, yes. Definitely.

    and then a C++ way and an R way or JavaScript

    JavaScript has a quite distinctive style. C++ is a big language (maybe
    too big for a single person to grok completely) so there might be
    several "dialects". I haven't seen enough R code to form an opinion.

    or does only python a language with a philosophy of what is the
    pythonic way?

    No. Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python"). Also quite similar to
    natural languages where you can guess the native language of an L2
    speaker by their accent and phrasing.

    hp

    --
    _ | Peter J. Holzer | Story must make more sense than reality.
    |_|_) | |
    | | | hjp@hjp.at | -- Charles Stross, "Creative writing
    __/ | http://www.hjp.at/ | challenge!"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dn@21:1/5 to Peter J. Holzer on Sun Mar 5 07:25:43 2023
    On 04/03/2023 20.47, Peter J. Holzer wrote:
    On 2023-03-03 13:51:11 -0500, avi.e.gross@gmail.com wrote:

    ...
    No. Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python"). Also quite similar to natural languages where you can guess the native language of an L2
    speaker by their accent and phrasing.

    With ph agree I do...

    or do you want that in a DO-loop with a FORMAT?

    --
    Regards,
    =dn

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Alan Gauld@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 18:37:34 2023
    On 04/03/2023 17:38, avi.e.gross@gmail.com wrote:

    Of course each language has commonly used idioms


    That's the point, the correct term is probably "idiomatic"
    rather than "pythonic" but it is a defacto standard that
    idiomatic Python has become known as Pythonic. I don't
    think that's a problem. And at least we aren't in the C++
    situation where almost everything that was idiomatic up
    until 1999 is now deemed an anti-pattern and they have
    standard library modules to try and guide you to use the
    "correct" idioms!

    But being Pythonic is still a much more loose term and
    the community less stressed about it than their C++
    cousins where it has almost reached a religious fervour!

    --
    Alan G
    Author of the Learn to Program web site
    http://www.alan-g.me.uk/
    http://www.amazon.com/author/alan_gauld
    Follow my photo-blog on Flickr at:
    http://www.flickr.com/photos/alangauldphotos

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Peter J. Holzer@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 22:17:13 2023
    On 2023-03-04 12:38:22 -0500, avi.e.gross@gmail.com wrote:
    Of course each language has commonly used idioms as C with pointer
    arithmetic and code like *p++=*q++ but my point is that although I live near a seaway and from where C originated, I am not aware of words like "c-way" or "scenic" as compared to the way people keep saying "pythonic".

    Oh, you're talking about the term, not the concept?

    You may have something there. I remember lots of discussions about
    "idiomatic C" or "idiomatic Perl", but not about "C-nic" (nice pun, btw)
    or "Perlish" code. The Python community may be unique in having invented
    an adjective for that.

    hp

    --
    _ | Peter J. Holzer | Story must make more sense than reality.
    |_|_) | |
    | | | hjp@hjp.at | -- Charles Stross, "Creative writing
    __/ | http://www.hjp.at/ | challenge!"

    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEETtJbRjyPwVTYGJ5k8g5IURL+KF0FAmQDtVQACgkQ8g5IURL+ KF1pAQ/8ChHM/RyE3PE9/WmHfLXaijTCA7Rh31r+oulaTyA4SFTFIIGP177z7Wdu ZTxbyRCRo2lR96Q6roEapWlVHMmnU4wetP3ziSuTMY3eYo8dBhT8q3p7Vn90OXpd Pp6/pgNUAVcJtXiXSfFmatFoAJGHNWTl8EbyXqWvEuSn3KmEDyQyYzcjiqAT0nfs wl2Sj0Pmx7B0VX8wrflMWzsmujs5V9HYO5Doft/aouAwpGmkdAp3z1R6hh+gdv0D 0gB6ZoUN2gxD4ALZCaH0Hv1xadFBU/ZNs5yk0sMtyV5GH05sTrq1q6A42HQxMLpo oRtWMM9kCtct9T0H3g/B1HQOtgWuf9Khs6nZaAldqFzPwNKa00Zf7XKPNKYL6ahQ zdfn8IvosSlJVp1ZMZ5bb2bkX19OFreflxMU1Z/q9mRpQY/XF8qKtSaHiFH+MlD9 pgm5PHe76gE/DtXZyTSKyMKchxHFl+RYqrnjXGSWFSFNF4XlRQcjfScgyn3ElIp2 +XAFcwuyBX6W7NFfc1ISSFgRuH8UOMPw2rTgByUtcCluFBDvaGLn9WemmNJciCbi 7d2eEVahEcaPRY/znIQoxKIAYtlEdFR4xDQR/MjeHv2QoYeO4iNvKs5gl9O4hrWb EDUfq+ax0DB1SYai3Eq9xjVLdl7IByn9GtiQrQX
  • From avi.e.gross@gmail.com@21:1/5 to Peter J. Holzer on Sat Mar 4 16:25:42 2023
    Great idea, DN!

    A whole series of books can be written such as:

    - Python for virgin dummies who never programmed before.
    - Python for former BASIC programmers
    - Python for former LISP programmers with a forked tongue
    - Python for former Ada Programmers
    - Python for ...
    - Python for those who find a dozen former languages are simply not enough.
    - Python for people who really want to mainly use the modules like pandas
    or sklearn ...
    - Pythonic upgrades to the methods used in former inferior languages ...
    - How to speak with a Pythonese accent and lose you old accent based on your former native language(s).

    I am sure some books along these lines have already been written!

    Who wants to collaborate?

    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of dn via Python-list
    Sent: Saturday, March 4, 2023 1:26 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 04/03/2023 20.47, Peter J. Holzer wrote:
    On 2023-03-03 13:51:11 -0500, avi.e.gross@gmail.com wrote:

    ...
    No. Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python"). Also quite similar to natural languages where you can guess the native language of an L2
    speaker by their accent and phrasing.

    With ph agree I do...

    or do you want that in a DO-loop with a FORMAT?

    --
    Regards,
    =dn
    --
    https://mail.python.org/mailman/listinfo/python-list

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to Peter J. Holzer on Sat Mar 4 16:18:37 2023
    I don't know, Thomas. For some simple programs, there is some evolutionary benefit by starting with what you know and gradually growing from there. He first time you need to do something that seems to need a loop in python,
    there are loops to choose from.

    But as noted in a recent discussion, things are NOT NECESSARILY the same
    even with something that simple. Did your previous languages retain
    something like the loop variable outside the loop? What are your new scoping rules? Do you really want to keep using global variables, and so on.

    And, another biggie is people who just don't seem aware of what comes easily
    in the new language. I have seen people from primitive environments set up programs with multiple arrays they process the hard way instead of using
    some forms of structure like a named tuple or class arranged in lists or use
    a multidimensional numpy/pandas kind of data structure.

    So ignoring the word pythonic as too specific, is there a way to say that something is the way your current language supports more naturally?

    Yes, there are sort of fingerprints in how people write. Take the python concept of truthy and how some people will still typically add a test for equality with True. That may not be pythonic to some but is there much harm
    in being explicit so anyone reading the code better understands what it doe?

    I have to wonder what others make of my code as my style is likely to be considered closer to "eclectic" as I came to python late and found an
    expanding language with way too many ways to do anything and can choose. But
    I claim that too is pythonic!

    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Thomas Passin
    Sent: Saturday, March 4, 2023 1:09 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 3/4/2023 2:47 AM, Peter J. Holzer wrote:
    Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python").

    What Peter didn't say is that this statement is usually used in a
    disparaging sense. It tends to imply that a person can write (or is
    writing) awkward or inappropriate code anywhere.

    --
    https://mail.python.org/mailman/listinfo/python-list

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 16:46:44 2023
    Alan,

    I got divorced from the C++ crowd decades ago when I left Bell Labs. You are making me glad I did!

    I do accept your suggestion that you can be idiomatic if you follow the common methods of whatever language you use. That will take you quite far as long as you are not a total slave to it.

    But I note some idioms catch on and some are imposed and some become almost moot. I am not sure which aspects of C++ have changed drastically and may go re-study the modern version as I was a very early adoptee within AT&T and saw changes even back then.

    But I consider something like the half dozen or so major print variants in python and wonder how much longer some of them will be seen as worth using, let alone idiomatic. Something like an fstring may dominate for many purposes.

    I know in R, that I used to use some convoluted methods to assemble output that I often now ignore once a "glue" package gave me something similar to fstring abilities where all kinds of variables and calculations can now be embedded withing a string to
    be dynamically evaluated in your current environment. Some of the documents I write now similarly embed parts of programs and also have an inline ability to evaluate small amounts of code in one of many languages that inserts directly into the text as
    it is being typeset.

    So I see moving targets where what was formerly at or near the state of the art, becomes passé. So much of my early work rapidly became trivial or irrelevant or never caught on or became lost in an environment I no longer used. To keep going forward
    often involves leaving things behind.

    Some new features in Python will be interesting to watch. I mentioned the match statement. I was using a similar construct in a JVM language called SCALA ages ago. There it was a sort of core part of the language and often replaced constructs normally
    used by other languages such as many simple or nested IF statements. I am sure someone will point out where they borrowed parts from or who did it better, but what I am saying is that I want to see if it becomes an exotic addition to Python in a way that
    loosely melds, or if it becomes the PYTHONIC way ...



    -----Original Message-----
    From: Alan Gauld <learn2program@gmail.com>
    Sent: Saturday, March 4, 2023 1:38 PM
    To: avi.e.gross@gmail.com; python-list@python.org
    Subject: Re: RE: Which more Pythonic - self.__class__ or type(self)?

    On 04/03/2023 17:38, avi.e.gross@gmail.com wrote:

    Of course each language has commonly used idioms


    That's the point, the correct term is probably "idiomatic"
    rather than "pythonic" but it is a defacto standard that
    idiomatic Python has become known as Pythonic. I don't
    think that's a problem. And at least we aren't in the C++
    situation where almost everything that was idiomatic up
    until 1999 is now deemed an anti-pattern and they have
    standard library modules to try and guide you to use the
    "correct" idioms!

    But being Pythonic is still a much more loose term and
    the community less stressed about it than their C++
    cousins where it has almost reached a religious fervour!

    --
    Alan G
    Author of the Learn to Program web site
    http://www.alan-g.me.uk/
    http://www.amazon.com/author/alan_gauld
    Follow my photo-blog on Flickr at:
    http://www.flickr.com/photos/alangauldphotos

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 17:04:03 2023
    On 3/4/2023 4:18 PM, avi.e.gross@gmail.com wrote:
    I don't know, Thomas. For some simple programs, there is some evolutionary benefit by starting with what you know and gradually growing from there. He first time you need to do something that seems to need a loop in python, there are loops to choose from.

    But as noted in a recent discussion, things are NOT NECESSARILY the same
    even with something that simple. Did your previous languages retain
    something like the loop variable outside the loop? What are your new scoping rules? Do you really want to keep using global variables, and so on.

    And, another biggie is people who just don't seem aware of what comes easily in the new language. I have seen people from primitive environments set up programs with multiple arrays they process the hard way instead of using
    some forms of structure like a named tuple or class arranged in lists or use a multidimensional numpy/pandas kind of data structure.

    So ignoring the word pythonic as too specific, is there a way to say that something is the way your current language supports more naturally?

    Yes, there are sort of fingerprints in how people write. Take the python concept of truthy and how some people will still typically add a test for equality with True. That may not be pythonic to some but is there much harm in being explicit so anyone reading the code better understands what it doe?

    I have to wonder what others make of my code as my style is likely to be considered closer to "eclectic" as I came to python late and found an expanding language with way too many ways to do anything and can choose. But I claim that too is pythonic!

    I think you are over-thinking this, Avi :)


    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Thomas Passin
    Sent: Saturday, March 4, 2023 1:09 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 3/4/2023 2:47 AM, Peter J. Holzer wrote:
    Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a
    language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python").

    What Peter didn't say is that this statement is usually used in a
    disparaging sense. It tends to imply that a person can write (or is
    writing) awkward or inappropriate code anywhere.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Weatherby,Gerard@21:1/5 to All on Sat Mar 4 12:32:40 2023
    Nope. No consensus.

    I’d use self.__class__ . Seems more explicit and direct to me.

    From: Python-list <python-list-bounces+gweatherby=uchc.edu@python.org> on behalf of Ian Pilcher <arequipeno@gmail.com>
    Date: Thursday, March 2, 2023 at 4:17 PM
    To: python-list@python.org <python-list@python.org>
    Subject: Which more Pythonic - self.__class__ or type(self)?
    *** Attention: This is an external email. Use caution responding, opening attachments or clicking on links. ***

    Seems like an FAQ, and I've found a few things on StackOverflow that
    discuss the technical differences in edge cases, but I haven't found
    anything that talks about which form is considered to be more Pythonic
    in those situations where there's no functional difference.

    Is there any consensus?

    --
    ========================================================================
    Google Where SkyNet meets Idiocracy ========================================================================
    -- https://urldefense.com/v3/__https://mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!iK8xBvLrRYfAR0KdkDmK-VwyL0ZZUjFJZ9Tj4j-IBz3_B1M0iQFFE3dV-f4bV41DQwnFL_wC2xWRni-0pMUqAw$<https://urldefense.com/v3/__https:/mail.python.org/mailman/listinfo/
    python-list__;!!Cn_UX_p3!iK8xBvLrRYfAR0KdkDmK-VwyL0ZZUjFJZ9Tj4j-IBz3_B1M0iQFFE3dV-f4bV41DQwnFL_wC2xWRni-0pMUqAw$>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From avi.e.gross@gmail.com@21:1/5 to avi.e.gross@gmail.com on Sat Mar 4 22:38:20 2023
    I think you are over-thinking this, Avi :)

    Is overthinking the pythonic way or did I develop such a habit from some
    other language?

    More seriously, I find in myself that I generally do not overthink. I
    overtalk and sort of overwrite, so for now, I think I will drop out of this possibly non-pythonic topic and go read another book or a few hundred so
    when it comes up again ...

    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of Thomas Passin
    Sent: Saturday, March 4, 2023 5:04 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 3/4/2023 4:18 PM, avi.e.gross@gmail.com wrote:
    I don't know, Thomas. For some simple programs, there is some evolutionary benefit by starting with what you know and gradually growing from there.
    He
    first time you need to do something that seems to need a loop in python, there are loops to choose from.

    But as noted in a recent discussion, things are NOT NECESSARILY the same
    even with something that simple. Did your previous languages retain
    something like the loop variable outside the loop? What are your new
    scoping
    rules? Do you really want to keep using global variables, and so on.

    And, another biggie is people who just don't seem aware of what comes
    easily
    in the new language. I have seen people from primitive environments set up programs with multiple arrays they process the hard way instead of using
    some forms of structure like a named tuple or class arranged in lists or
    use
    a multidimensional numpy/pandas kind of data structure.

    So ignoring the word pythonic as too specific, is there a way to say that something is the way your current language supports more naturally?

    Yes, there are sort of fingerprints in how people write. Take the python concept of truthy and how some people will still typically add a test for equality with True. That may not be pythonic to some but is there much
    harm
    in being explicit so anyone reading the code better understands what it
    doe?

    I have to wonder what others make of my code as my style is likely to be considered closer to "eclectic" as I came to python late and found an expanding language with way too many ways to do anything and can choose.
    But
    I claim that too is pythonic!

    I think you are over-thinking this, Avi :)


    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org>
    On
    Behalf Of Thomas Passin
    Sent: Saturday, March 4, 2023 1:09 PM
    To: python-list@python.org
    Subject: Re: Which more Pythonic - self.__class__ or type(self)?

    On 3/4/2023 2:47 AM, Peter J. Holzer wrote:
    Even before Python existed there was the adage "a real programmer
    can write FORTRAN in any language", indicating that idiomatic usage of a
    language is not governed by syntax and library alone, but there is a
    cultural element: People writing code in a specific language also read
    code by other people in that language, so they start imitating each
    other, just like speakers of natural languages imitate each other.
    Someone coming from another language will often write code which is
    correct but un-idiomatic, and you can often guess which language they
    come from (they are "writing FORTRAN in Python").

    What Peter didn't say is that this statement is usually used in a
    disparaging sense. It tends to imply that a person can write (or is
    writing) awkward or inappropriate code anywhere.


    --
    https://mail.python.org/mailman/listinfo/python-list

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)