2017-03-03 72 views
-1

我想用重新定義的變量「search」在其他文件中調用函數「searchF」,但我認爲它不起作用,因爲函數調用主線程在if __name__ == "__main__":從其他文件調用函數if __name__ ==「__main__」:

FileA.py

import FileB 

search = "stackoverflow"  
searchF(search) 

FileB.py

from apiclient.discovery import build 
from apiclient.errors import HttpError 
from oauth2client.tools import argparser 

search = "Google"  
def searchF(search) 
    DEVELOPER_KEY = "REPLACE_ME" 
    YOUTUBE_API_SERVICE_NAME = "youtube" 
    YOUTUBE_API_VERSION = "v3" 

    def youtube_search(options): 
    youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
     developerKey=DEVELOPER_KEY) 

    search_response = youtube.search().list(
     q=options.q, 
     type="video", 
     part="id,snippet", 
     maxResults=options.max_results 
    ).execute() 

    search_videos = [] 

    for search_result in search_response.get("items", []): 
     search_videos.append(search_result["id"]["videoId"]) 
    video_ids = ",".join(search_videos) 

    video_response = youtube.videos().list(
     id=video_ids, 
     part='snippet, contentDetails' 
    ).execute() 

    videos = [] 

    for video_result in video_response.get("items", []): 
     videos.append("%s, (%s,%s)" % (video_result["snippet"]["title"], 
           video_result["contentDetails"], 
           video_result["contentDetails"])) 
    find = "licensedContent': True" 
    result = ', '.join(videos) 
    print find in result 

    if __name__ == "__main__": 
    argparser.add_argument("--q", help="Search term", default=search) 
    argparser.add_argument("--max-results", help="Max results", default=25) 
    args = argparser.parse_args() 

    try: 
     youtube_search(args) 
    except HttpError, e: 
     print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content) 
+3

「不起作用」不是一個足夠的問題陳述。你只是*假設它不起作用?它看起來應該對我很好。什麼是「主線程」?如果你真的嘗試過,錯誤是什麼。這是重要的信息。 –

+3

其實,你的代碼會拋出一個'NameError',因爲'searchF'沒有被定義。但是這與'FileB.py'中的'if __name__ =='__main __「:'無關。這是因爲你需要,如果你在'FileA.py' –

回答

1
if __name__ == "__main__": 

(非常)簡體LY說,這意味着,如果從終端推出,像這樣

>>> python FileA.py 

一個更深入的討論可以發現here腳本應該做的事。但這不是爲什麼你的進口不起作用。

從你粘貼的代碼看來,你的問題就是你調用searchF函數的方式。目前,在FileA.py範圍內沒有定義(模塊的符號表是準確的)。當你嘗試調用它時,它根本不存在,它沒有被定義。

FileB.searchF(search) 

如果你想叫你做的功能,你應該將進口改爲:

from FileB import searchF 

這樣你就能但是,您可以通過調用它像這樣實現它達到沒有前綴的功能。閱讀更多關於此的好地方是the docs

+0

使用'進口FileB'使用'FileB.searchF'謝謝你回答我的問題,並解釋如果__name做什麼。我正在使用Python 2.7並使用您的示例,現在我實際上正在控制檯中獲取某些內容。這是說NameError:名稱'FileB'沒有定義當我使用FileB.searchF(搜索) – one2gov

+1

你也許寫入導入爲'從FileB導入searchF',然後試圖調用該函數通過編寫'FileB.searchF(search )'?如果是這樣,正確的方法是調用'searchF(search)'來調用它。總之,如果你的導入是'import FileB',你應該調用如下的函數:'FileB.searchF(search)'。如果你的導入讀作'從FileB導入searchF',函數調用應該是'searchF(search)'。 – cegas

+0

它適用於我用「print'test'」測試它,但實際代碼沒有結果時,就像這段代碼剛剛跳過了一樣。 – one2gov

相關問題