Compreender o principal método de pitão

Sou novo em Python, mas tenho experiência em outras línguas OOP. O meu curso não explica o método principal em python.

Por favor, diga-me como funciona o método principal em python ? Estou confuso porque estou a tentar compará-lo com Java.

def main():
# display some lines

if __name__ == "__main__": main()

Como é executado o principal e porque preciso deste estranho "se" para executar o "principal". Meu código é terminado sem saída quando eu removo o if.

O código mínimo...

class AnimalActions:
    def quack(self): return self.strings['quack']
    def bark(self): return self.strings['bark']

class Duck(AnimalActions):
    strings = dict(
        quack = "Quaaaaak!",
        bark = "The duck cannot bark.",
    )

class Dog(AnimalActions):
    strings = dict(
        quack = "The dog cannot quack.",
        bark = "Arf!",
    )

def in_the_doghouse(dog):
    print(dog.bark())

def in_the_forest(duck):
    print(duck.quack())

def main():
    donald = Duck()
    fido = Dog()

    print("- In the forest:")
    for o in ( donald, fido ):
        in_the_forest(o)

    print("- In the doghouse:")
    for o in ( donald, fido ):
        in_the_doghouse(o)

if __name__ == "__main__": main()

Em Python, a execução NÃO tem de começar na principal. A primeira linha de "código executável" é executada primeiro.

def main():
    print("main code")

def meth1():
    print("meth1")

meth1()
if __name__ == "__main__":main() ## with if

Saída -**

meth1
main code

**Mais no main() -*** http://ibiblio.org/g2swap/byteofpython/read/module-name.html

Um módulo's `nome``

Cada módulo tem um nome e declarações em um módulo pode descobrir o nome do seu módulo. Isso é especialmente útil em uma situação em particular - Como mencionado anteriormente, quando um módulo é importado pela primeira vez, o bloco principal desse módulo é executado. E se quisermos executar o bloco somente se o programa foi utilizado por si mesmo e não quando foi importado de outro módulo? Isto pode ser conseguido utilizando o atributo nome do módulo.

**Utilizando um módulo's nome***

#!/usr/bin/python
# Filename: using_name.py

if __name__ == '__main__':
    print 'This program is being run by itself'
else:
    print 'I am being imported from another module'

Saída -**

$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>

**Como Funciona -***

Cada módulo Python tem um's __nome__ definido e se este for __main__, implica que o módulo está sendo executado isoladamente pelo usuário e nós podemos fazer as ações apropriadas correspondentes.

Comentários (3)

Python não tem um ponto de entrada definido como Java, C, C++, etc. Ao invés disso, ele simplesmente executa um arquivo fonte linha por linha. A instrução if permite criar uma função main que será executada se seu arquivo for carregado como o módulo "Main" ao invés de como uma biblioteca em outro módulo.

Para ser claro, isto significa que o intérprete Python começa na primeira linha de um arquivo e o executa. Executar linhas como class Foobar: e def foobar() cria uma classe ou uma função e as armazena na memória para uso posterior.

Comentários (3)

Se você importar o arquivo do módulo (.py) que você está criando agora de outro script python, ele não executará o código dentro de

if __name__ == '__main__':
    ...

Se você executar o script diretamente do console, ele será executado.

Python não usa ou requer uma função principal(). Qualquer código que não esteja protegido por esse guarda será executado no momento da execução ou da importação do módulo.

Isto é expandido um pouco mais em python.berkely.edu

Comentários (0)