On Fri, Jan 26, 2018 at 7:42 PM, INADA Naoki <songofaca...@gmail.com> wrote:
> Hi.
>
> Currently, int(), str.isdigit(), str.isalnum(), etc... accepts
> non-ASCII strings.
>
>>>> s =  123"
>>>> s
> '123'
>>>> s.isdigit()
> True
>>>> print(ascii(s))
> '\uff11\uff12\uff13'
>>>> int(s)
> 123
>
> But sometimes, we want to accept only ascii string.  For example,
> ipaddress module uses:
>
> _DECIMAL_DIGITS = frozenset('0123456789')
> ...
> if _DECIMAL_DIGITS.issuperset(str):
>
> ref: 
> https://github.com/python/cpython/blob/e76daebc0c8afa3981a4c5a8b54537f756e805de/Lib/ipaddress.py#L491-L494
>
> If str has str.isascii() method, it can be simpler:
>
> `if s.isascii() and s.isdigit():`
>
> I want to add it in Python 3.7 if there are no opposite opinions.
>

I'm not sure that the decimal-digit check is actually improved by
this, but nonetheless, I am in favour of this feature. In CPython,
this method can simply look at the object headers to see if it has the
'ascii' flag set; otherwise, it'd be effectively equivalent to:

def isascii(self):
    return ord(max(self)) < 128

Would be handy when working with semi-textual protocols, where ASCII
text is trivially encoded, but non-ASCII text may require negotiation
or a protocol header.

ChrisA
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to