如果__name__ ==" __ main __"来自其他文件的调用函数:

时间:2017-03-03 21:17:01

标签: python youtube-api

我正在尝试调用函数" searchF"在其他文件中使用重新定义的变量"搜索",但我认为它不起作用,因为函数调用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)

1 个答案:

答案 0 :(得分:1)

if __name__ == "__main__": 

(非常)简单地说,它表示如果从终端启动脚本应该做什么,就像这样

>>> python FileA.py

可以找到更加深入的讨论here。但这不是你的导入不起作用的原因。

根据您粘贴的代码,您的问题似乎就是您调用searchF函数的方式。目前,它没有在FileA.py范围内定义(模块的符号表是精确的)。当你试图调用它时,它根本不存在,它没有被定义。但是,你可以这样调用它来达到它:

FileB.searchF(search)

如果您想像现在一样调用该功能,则应将导入更改为:

from FileB import searchF

这样您就可以在没有前缀的情况下到达该功能。阅读更多相关信息的好地方是the docs