This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2015年02月09日 04:03 by martin.panter, last changed 2022年04月11日 14:58 by admin.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| split-result-default.patch | martin.panter, 2015年02月10日 05:05 | review | ||
| Messages (3) | |||
|---|---|---|---|
| msg235584 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2015年02月09日 04:03 | |
This would be a simple API enhancement and would allow easier building of URLs, like
>>> SplitResult("rtp", address, query=urlencode(query)).geturl()
"rtp://localhost:5004?rtcpport=5005"
It seems the best way to do this at the moment is annoyingly verbose:
SplitResult("rtp", address, path="", query=urlencode(query), fragment="").geturl()
The way hinted by the documentation can leave an ugly empty query string:
>>> query = ()
>>> "rtp://%s?%s" % (address, urlencode(query))
"rtp://localhost:5004?"
This enhancement would also allow easy parsing of usernames, ports, etc:
>>> SplitResult(netloc="[::1]:0").hostname
"::1"
>>> SplitResult(netloc="[::1]:0").port
0
Looking at the code, I think this could be implemented by adding an explicit constructor to each of the concrete classes, with arguments defaulting to "" or b"" as appropriate.
|
|||
| msg235664 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2015年02月10日 05:05 | |
Adding a patch implementing my suggested enhancement |
|||
| msg256104 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年12月08日 09:08 | |
I agree that it would be nice to have. But this feature has a cost.
$ ./python -m timeit -s 'from urllib.parse import ParseResult' -- "ParseResult('http', 'User@example.com:Pass@www.python.org:080', '/doc/', '', 'query=yes', 'frag')"
Unpatched: 1.61 usec per loop
Patched: 2.1 usec per loop
$ ./python -m timeit -s 'from urllib.parse import urlparse' -- 'urlparse("http://User@example.com:Pass@www.python.org:080/doc/?query=yes#frag")'
Unpatched: 8.87 usec per loop
Patched: 9.22 usec per loop
Is this cost significant?
The cost can be decreased by using global _tuple_new = tuple.__new__. But this couples the code too tight to implementation details of namedtuple.
|
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:12 | admin | set | github: 67604 |
| 2015年12月08日 09:08:05 | serhiy.storchaka | set | nosy:
+ rhettinger, serhiy.storchaka messages: + msg256104 |
| 2015年02月10日 05:05:45 | martin.panter | set | files:
+ split-result-default.patch keywords: + patch messages: + msg235664 versions: + Python 3.5 |
| 2015年02月09日 04:03:57 | martin.panter | create | |