В скомпилированных и некоторых интерпретируемых языках существует четкое разделение между определением, объявлением и исполнением.Но в питоне это проще.Есть только операторы!
Python EXECUTES ваш скрипт / программа / модуль, как только он будет вызван.Это может помочь увидеть def
и class
как "синтаксический сахар".Например, класс - это удобная оболочка для Foo = type("class-name", (bases), {attributes})
.
. Таким образом, python выполняет:
class Foo #equivalent to: Foo = type("class-name", (bases), {attributes})
class Foo
def bar
def bar
print(Foo.__module__ + Foo.__name__)
, что сводится к перезаписи имен Foo
и bar
с последним "объявлением",Так что это просто работает так, как задумано от Python-pov - но, возможно, не так, как вы задумали!; -)
, так что это также типичная ошибка для разработчиков с неправильным пониманием фона:
def some_method(default_list = []):
...
default_list здесь является синглтоном.Каждый вызов some_method
использует один и тот же default_list
, поскольку объект списка создается при первом выполнении.
Python не входит в тело функции, а только выполняет сигнатуру / заголовок, как тольконачинается разбор.