Olá Leonardo, tudo bem com você?
Gostaria de pedir desculpas pela demora em lhe responder.
Quando fazemos o teste para verificarmos se o módulo atual é o __ main__, estamos testando se o arquivo está sendo importado ou sendo executado diretamente. Quando um arquivo é importado a variável __ name__ terá o mesmo nome do arquivo, mas se for executado diretamente através do comando python nome_do_arquivo.py
, __ name__ será definido por padrão como __ main__.
Para sabermos em qual modulo estamos podemos usar a função print()
para lermos o que o está salvo no __ name__.
print(__name__)
Da forma que foi apresentada em seu código, o que está dentro da condição if não será executado. Toda vez que trabalhamos com a importação de uma função o __ name__ receberá o nome do arquivo, no seu exemplo ele será func fazendo com que o teste do if sempre seja falso. Geralmente, o teste para verificar se está ou não no módulo principal, é feito fora da função, como mostro no exemplo abaixo:
arquivo somatoria.py
def soma():
print(1 + 2)
if __name__ == '__main__':
soma()
# Resultado
3
No caso acima, a função soma()
só será executada se executarmos diretamente o arquivo somatoria.py, através do comando python somatoria.py
, mas, caso estivéssemos importando o arquivo somatoria.py em outro arquivo, a função soma não seria executada, pois, não estaria no contexto do módulo principal (__main__
).
Para o seu caso, uma correção que pode ser feita é fazer o teste de verificação dentro do outro arquivo onde você invoca a função main, como mostro abaixo:
# arquivo jogar.py
import func
def jogar():
print('jogo iniciado')
if __name__ == "__main__":
func.main(jogar)
# arquivo func.py
def main(i):
i()
Vale ressaltar que para contornar a repetição de código, uma das coisas que são feitas é a utilização de funções, o trecho if name == __main__
, é para evitar que códigos desnecessários sejam executados quando fazemos importação de arquivos em outros.
Para saber mais a respeito desse assunto, recomendo a leitura do artigo: Python: O que significa if name == 'main'?
Em caso de mais dúvidas me coloco à disposição.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!