#python #c #mutable #static-variables
Вопрос:
Мне было интересно, как я мог бы скопировать статические переменные из C в Python. Я видел много сообщений, касающихся объектно-ориентированного кода на Python и использования изменяемых аргументов по умолчанию, но мне просто было интересно узнать о простом процедурном примере.
Вот мой пример C:
void static_variable(){ static int x = 0; x ; printf("%dn", x); }
и вот мой пример с Python:
def static_variable(counter=[0]): counter[0] = 1 print(counter[0])
Оба примера работают, однако мне было интересно, несет ли использование такого подхода в Python некоторые присущие опасности — или это просто опасно, когда вы не знаете о изменяемых аргументах?
Ответ №1:
В python функции являются объектами первого класса. Это означает, что у них могут быть атрибуты. Вы можете просто использовать атрибут в качестве «статической переменной». Избегая ловушек изменяемых значений по умолчанию, код также становится намного чище:
def static_variable(): # define function attribute if hasattr(static_variable, 'counter'): static_variable.counter = 1 else: static_variable.counter = 1 print(static_variable.counter) static_variable() static_variable() static_variable()
Результаты:
1 2 3