Предел связан с тем, как скомпилированный байт-код рассматривает вызов функции с аргументами позиции и / или аргументами ключевого слова.
Байт-код op проблемы - CALL_FUNCTION
, который несет op_arg
, который равен 4 байтов в длину, но используются два младших байта. Из них наиболее значимый байт представляет количество аргументов ключевого слова в стеке и наименее значимый байт - количество позиционных аргументов в стеке. Следовательно, вы можете иметь не более аргументов ключевого слова 0xFF == 255
или 0xFF == 255
.
Этот предел не применяется к *args
и **kwargs
, поскольку вызовы с этой грамматикой используют optecode ops CALL_FUNCTION_VAR
, CALL_FUNCTION_KW
и CALL_FUNCTION_VAR_KW
в зависимости от подписи. Для этих кодов операций стек состоит из итерации для *args
и dict
для **kwargs
. Эти элементы передаются непосредственно получателю, который разворачивает их по мере необходимости.
Привести null
к типу:
Func((Class1)null);
Использование as
для отливки делает его немного более читаемым с той же функциональностью.
Func(null as Class1);
Вы должны иметь возможность приводить null к любому из них, так же, как к переменной Func((Class1)null)
.