对函数调用序列的混淆

时间:2011-11-20 20:42:29

标签: python

我在这里有一种愚蠢的困惑。我的代码中有以下main(),我将transcriptionFilephonemeFile作为输入。是先调用time()函数然后调用coart()函数吗?但是我将这些函数中传递的文件一起输入一行,所以不必同时调用它们吗?

我只是python的初学者。我正在分别处理time()函数和coart()函数,但现在我必须将coart()函数中生成的列表传递给time()函数。因此,如果首先调用time()函数,那么即使我传递它也不会识别该列表。我希望我明白我的问题。谢谢。

if __name__ == "__main__" :

if len(sys.argv) != 3 :   
    Usage()

else :
    transcriptionFile = sys.argv[1]

    time("transcriptions.txt")

    phonemeFile = sys.argv[2]

    coart("syllabifiedPhonemes.txt")

3 个答案:

答案 0 :(得分:1)

语句始终按列出的顺序执行。因此,在您的情况下,sys.argv [1]将首先分配给全局变量transcriptionFile。然后,将调用时间函数。然后将sys.argv [2]的值分配给phonemeFile变量,最后将调用coart函数。如果时间函数使用了coart函数产生的东西,那么您将需要首先调用coart函数。它与sys.argv中的命令行参数以不同的顺序发生无关紧要。

答案 1 :(得分:1)

  

首先调用time()函数然后调用coart()函数吗?

是。语句按照它们在文件中列出的顺序排列,除非被if - elsewhileraise等控制流构造中断。

  

但是我将这些函数中传递的文件一起输入一行,所以不必同时调用它们吗?

在常见的Python解释器CPython中,您无法以任何简单的方式同时执行两个函数。你必须做出选择。如果函数完全独立,则两个选项都有效。

答案 2 :(得分:1)

Python像许多(大多数)编程语言一样,按照程序控制流(决策if/then/else,循环while, for, foreach)的顺序执行命令,只有一个任务是在程序中的任何一点执行。这既是为了简化编程语言的设计和实现,也是由于硬件设计和性能的历史限制。因此,它是计算机硬件实现和软件(语言)开发的工件。

直到最近,大多数计算机才有一个CPU,它只能在给定时间执行单个任务。使用了几种技术来模拟多个任务(进程,线程,用户界面)的协同处理,这些技术称为multi-tasking(合作或抢先),多用户(又名“分时”), multi-threaded(操作系统查看threadsprocesses更轻量级)由单个处理器通过以不同方式划分CPU的使用情况来同时运行多个任务的外观,但从技术上讲,它们只是停止并且启动速度太快以至于(人类)用户无法检测到暂停。您可以将其视为与电影电影中多个图像帧的观看类似,当以“正常”速度显示时,人类观察者将其视为连续运动。

现在有一些技术可以“同时”执行多个任务(无论是单独的CPU和多任务操作系统,还是真正同时由多个CPU或CPU核心执行,都可以同时执行多个任务。

因此,我的默认Python程序将按顺序执行指令,除非您使用许多更高级的技术来告诉计算机何时尝试同时执行函数。语言和计算机不会使顺序程序并行执行部分,而无需程序员输入。

(AFAIK没有关于可并行化代码自动检测的研究已经取得了普遍成功)