| Deutsch English Français Italiano |
|
<vapnu2$3v4l8$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.unix.shell,comp.unix.programmer,comp.lang.misc
Subject: Re: Python (was Re: I did not inhale)
Date: Thu, 29 Aug 2024 14:01:05 +0200
Organization: A noiseless patient Spider
Lines: 215
Message-ID: <vapnu2$3v4l8$1@dont-email.me>
References: <uu54la$3su5b$6@dont-email.me> <va4aut$3q4g0$1@dont-email.me>
<va4fbr$3qvij$1@dont-email.me> <va5108$3tmmd$1@dont-email.me>
<va51ok$3tqr9$1@dont-email.me> <va5ec2$3vluh$1@dont-email.me>
<va6q4g$c1a7$1@dont-email.me> <va6rpa$c6bg$1@dont-email.me>
<va6se9$cb8e$1@dont-email.me> <20240826083330.00004760@gmail.com>
<vaises$2k7o6$2@dont-email.me> <20240826155113.000005ba@gmail.com>
<wwvo75eicla.fsf@LkoBDZeT.terraraq.uk> <vak9k9$2ujrs$1@dont-email.me>
<valgpu$34s18$1@dont-email.me> <87y14hd4bk.fsf@nosuchdomain.example.com>
<valnei$35rt8$2@dont-email.me> <87ikvlcs7i.fsf@nosuchdomain.example.com>
<vamclm$3c4ke$1@dont-email.me> <87ttf4bdcx.fsf@nosuchdomain.example.com>
<vaoaak$3l470$3@dont-email.me> <875xrkb2iq.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 29 Aug 2024 14:01:07 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="737b96d1a4f94365fbc2f60b2f2e5810";
logging-data="4166312"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/44F5rtMgZ/s1tDEhu5lvQj1d5kOIAsdA="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.11.0
Cancel-Lock: sha1:csapkzPMd/PHSc2jF4BKVBKxOWU=
In-Reply-To: <875xrkb2iq.fsf@nosuchdomain.example.com>
Content-Language: en-GB
Bytes: 9560
On 29/08/2024 02:23, Keith Thompson wrote:
> Lawrence D'Oliveiro <ldo@nz.invalid> writes:
>> On Wed, 28 Aug 2024 13:29:18 -0700, Keith Thompson wrote:
>>> But ok, I found your post and removed all the #end comments. I found it
>>> just as readable without them as with them.
>>
>> You know what? You are right. That example was just too
>> well-structured.
So why not try to write /all/ your code in a well-structured manner, so
that you don't feel the need to add these "#end" comments?
>>
>> Here’s a more dangerous one:
>>
>> def register_additional_standard(self, **kwargs) :
>> "registers additional standard interfaces that are not automatically" \
>> " installed at Connection creation time. Currently the only one is" \
>> " the object-manager interface, registered with\n" \
>> "\n" \
>> " «conn».register_additional_standard(managed_objects = True)\n"
>
> That's not the conventional way to format a docstring. If you're using
> backslashes to splice lines in Python, it's likely you're doing
> something wrong.
Agreed 100%.
>
>> for key in kwargs :
>> if kwargs[key] :
>> if key == "managed_objects" :
>> if self._managed_objects != None :
>
> I think "is not None" is more idiomatic.
I don't know if that is true or not that it is more idiomatic - I would
certainly be happy with either.
def register_additional_standard(self, managed_objects) :
"""
registers additional standard interfaces that are not automatically
installed at Connection creation time. Currently the only one is
the object-manager interface, registered with
«conn».register_additional_standard(managed_objects = True)
"""
if managed_objects :
if self._managed_objects != None :
raise asyncio.InvalidStateError("object manager
interface already registered")
self.register(
path = "/",
interface = ManagedObjectsHandler(),
fallback = True
)
self._managed_objects = {}
return self
(Usenet formatting is limited to 72 characters standard - modern
programming is not. Overly long lines are not good, but a hard limit
at, say, 80 characters is a bad idea.)
>
>> raise asyncio.InvalidStateError \
>> (
>> "object manager interface already registered"
>> )
>
> You don't need the \ if you put the ( on the same line.
Line continuation characters in Python are usually an indicator of poor
formatting, or an unhealthy obsession with line length limits.
>
>> #end if
>> self.register \
>> (
>> path = "/",
>> interface = ManagedObjectsHandler(),
>> fallback = True
>> )
>
> Again, you've decided how you want to place parentheses and you're
> forcing the syntax to cater to that. I might write that as:
>
> self.register(
> path = "/",
> interface = ManagedObjectsHandler(),
> fallback = True
> )
>
>> self._managed_objects = {}
>> else :
>
> You leave a space between "else" and ":". It's not wrong, but it's not
> something I've ever seen. It's likely to be just a little jarring to
> readers.
I personally prefer a space before the colon in Python. It is probably
less common than no space, but it is certainly not a rare habit.
>
>> raise TypeError("unrecognized argument keyword “%s”" % key)
>
> Do you have a requirement to use older versions of Python that don't
> support f-strings?
>
>> #end if
>> #end if
>> #end for
>> return \
>> self
>
> Why not just "return self"?
Indeed.
>
>> #end register_additional_standard
>>
>> versus
>>
>> def register_additional_standard(self, **kwargs) :
>> "registers additional standard interfaces that are not automatically" \
>> " installed at Connection creation time. Currently the only one is" \
>> " the object-manager interface, registered with\n" \
>> "\n" \
>> " «conn».register_additional_standard(managed_objects = True)\n"
>> for key in kwargs :
>> if kwargs[key] :
>> if key == "managed_objects" :
>> if self._managed_objects != None :
>> raise asyncio.InvalidStateError \
>> (
>> "object manager interface already registered"
>> )
>> self.register \
>> (
>> path = "/",
>> interface = ManagedObjectsHandler(),
>> fallback = True
>> )
>> self._managed_objects = {}
>> else :
>> raise TypeError("unrecognized argument keyword “%s”" % key)
>> return self
>
> Again, the #end comments don't make it any more readable *for me*.
> I suspect that would be even more true for more experienced Python
> programmers.
I don't know if I am more experienced than you in Python (I may have
been using Python for longer, but you may have worked with it more), but
I would say that the "#end" comments directly detract from readability.
>
>> I was looking for quite a tricky example I remember seeing on the
>> ArjanCodes channel on YouTube, but I can’t find it.
>
> In any language, if a block of code is so deeply indented that it's
> confusing, you should consider refactoring it. (Though that's not
> always the answer.)
Agreed.
========== REMAINDER OF ARTICLE TRUNCATED ==========