On Fri, Oct 16, 2015 at 06:35:14PM +0300, Serhiy Storchaka wrote: > I suggest to add only randrange(). randint() is historical artefact, we > shouldn't repeat this mistake in new module. The secrets module is not > good way to generate dice rolls. In most other cases you need to > generate integers in half-open interval [0; N). > > And randbelow() is absolute redundant. Random._randbelow() is > implementation detail and I inclined to get rid of it (implementing > randrange() in C instead).
This was discussed on Python-Ideas, and there was little consensus there either. (Looks like Tim Peters' prediction is coming true :-) Putting aside your inflammatory description of randint() as a "mistake", if you are correct that in most cases people will need to generate integers in the half-open interval [0...n) then we should keep randbelow, since that is precisely what it does. randrange([start=0,] end [, step=1]) is a complex API. It can take one, two or three arguments, like range. Are there any use-cases for providing the step argument? If not, then why offer such a complex API that will never be used? Personally, I have no sense of which of the three functions will be most useful, but if you are right about the half-open [0...n) interval, then randbelow seems to be the right API to offer. But I have seen people argue in favour of randint, and others argue in favour of randrange. Given that these are just thin wrappers or aliases to methods of random.SystemRandom, I don't think there is any harm in providing all three. I've also raised this issue on the python-list mailing list. -- Steve _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com