0

Какое максимальное количество аргументов может быть у функции в Python?

11

У всех на слуху, что в Python функции могут иметь максимум 256 аргументов. Мне интересно, распространяется ли этот лимит на аргументы, передаваемые через *args и **kwargs, когда они распаковываются следующим образом:

items = [1, 2, 3, 4, 5, 6]

def do_something(*items):
    pass

Я спрашиваю, потому что гипотетически могут возникнуть случаи, когда список, содержащий более 256 элементов, будет распакован в виде набора *args или **kwargs.

2 ответ(ов)

0

Для **kwargs, если я правильно помню, это словарь. Соответственно, у него почти нет ограничений.

Что касается *args, я не уверен на 100%, но, похоже, это кортеж или список, так что также можно сказать, что ограничений нет.

Под «почти нет ограничений» я подразумеваю, что единственное ограничение - это, возможно, объем доступной памяти.

0

В вашем коде вы создали функцию с 5000 аргументами и успешно использовали её с помощью вызова f(*range(5000)). Тем не менее, при попытке вызвать функцию с 5000 аргументами через exec вы столкнулись с ошибкой SyntaxError: more than 255 arguments. Это связано с тем, что ограничение на количество аргументов применяется только на стороне вызова, когда вы используете строковую интерполяцию для создания вызова функции.

Проблема возникает потому, что часть exec 'f(' + ','.join(str(i) for i in range(5000)) + ')' формирует строку, которая содержит больше 255 аргументов в одном вызове. Python накладывает это ограничение на строковые выражения.

Таким образом, ваш вывод f(*range(5000)) работает, потому что передача аргументов происходит в развернутом виде, и это ограничение не применяется.

Итог: Ограничение на количество аргументов действительно имеет место, но оно относится к "развернутым" вызовам и строковым выражениям, а не к передаче аргументов через распаковку.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь