亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從另一個python文件執行`if __name__ ==“__main__”`中的代碼

如何從另一個python文件執行`if __name__ ==“__main__”`中的代碼

蠱毒傳說 2021-12-17 10:48:25
在我的 python 文件中,我有一個接受一些參數的函數,在同一個文件中我有一個if __name__ == "__main__"子句,它使用一組特定的參數運行這個函數(供用戶展示它的作用)。像這樣,def foo(arg1, arg2):    passif __name__ == "__main__":    arg1 = 1    arg2 = 2    foo(arg1, arg2)此外,我還有另一個包含 pytest 使用的測試文件。我想讓其中一個測試完全按照上面提到的 if 子句中所寫的內容運行,即執行arg1 = 1arg2 = 2foo(arg1, arg2)如果不將代碼復制到包含測試的文件中,這可能嗎?
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

好吧,我不是這方面的專家,但是如何將您的重定向if __name__ == "__main__": 到另一個函數并從您的另一個文件中調用該函數?


文件 1:


def main_file1:

  arg1 = 1

  arg2 = 2

  foo(arg1, arg2)


if __name__ == "__main__":

  main_file1()

文件2:


from file1 import *


def somefunc():

  main_file1()

但是,我不確定您為什么要這樣做。通常,您的整個項目中只有 1 個主要功能來使事情順利進行并從那里調用其他功能。


最終這種失敗的文件的主要功能的目的


查看完整回答
反對 回復 2021-12-17
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

如果你有文件


文件1.py

def foo(arg1, arg2):

    pass


if __name__ == "__main__":

    arg1 = 1

    arg2 = 2

    foo(arg1, arg2)

并且file2.py在同一目錄中,您可以:


文件2.py

from file1 import foo

arg1 = 1

arg2 = 2

foo(arg1, arg2)

您將需要重新定義arg1并arg2像您一樣,但這只是導入您想要的功能的問題。這將為您提供函數,但沒有任何全局變量,file1.py因為它們受if __name__ == "__main__"語句保護


更新


如果您不想在內部重新分配,則file2.py可以執行以下操作:


文件1.py

def foo(arg1, arg2):

    pass


def new_function(): #make a new function that you can import

    arg1 = 1

    arg2 = 2

    foo(arg1, arg2)


if __name__ == "__main__":

    new_function()

文件2.py

from file1 import new_function

new_function()

這還不是最糟糕的,因為您仍然包含arg1和arg2作為局部變量,所以沒有巨大的命名空間問題,但現在您可以導入它們,因為它們在if name == main您的代碼部分中不受保護。


查看完整回答
反對 回復 2021-12-17
  • 2 回答
  • 0 關注
  • 425 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號