Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:将调用自身的函数_Python - Fatal编程技术网

python:将调用自身的函数

python:将调用自身的函数,python,Python,我想知道我是否能得到你的帮助,了解一个需要调用自身的函数的结构逻辑 def populate_frequency5(d,data,total_compare): freq=[] prev = None for row in d: if prev is None or prev==row[11]: freq.append(row[16]) doctor=row[10] drug=row[11][:row[11].find(' ')].capi

我想知道我是否能得到你的帮助,了解一个需要调用自身的函数的结构逻辑

def populate_frequency5(d,data,total_compare):
  freq=[]
  prev = None
  for row in d:
    if prev is None or prev==row[11]:
      freq.append(row[16])
      doctor=row[10]
      drug=row[11][:row[11].find(' ')].capitalize()
    else:
      make_image_url_doctor(freq,doctor,drug,data)
      total_compare=True
      del freq[:]
    prev=row[11]  
  if total_compare:
    (b1,bla,bla1)=medications_subset2(data,[drug.upper()])
    data1=calculate_creat_conc4(b1)
    populate_frequency5(data1,['a'],total_compare=True)
    total_compare=False
  • 第一次调用该函数时,我需要它运行以下操作:

    def populate_frequency5(d,data,total_compare):
      freq=[]
      prev = None
      for row in d:
        if prev is None or prev==row[11]:
          freq.append(row[16])
          doctor=row[10]
          drug=row[11][:row[11].find(' ')].capitalize()
        else:
          make_image_url_doctor(freq,doctor,drug,data)
          (b1,bla,bla1)=medications_subset2(data,[drug.upper()])
          data1=calculate_creat_conc4(b1)
          del freq[:]
        prev=row[11]
    
  • 第二次调用时,我需要它以这种方式运行:

    def populate_frequency5(d,data,total_compare):
     freq=[]
     prev = None
     for row in d:
       if prev is None or prev==row[11]:
         freq.append(row[16])
         doctor=row[10]
         drug=row[11][:row[11].find(' ')].capitalize()
     run_another_function()
    

  • 您当前的逻辑有错误,将导致失控的递归。如果您进行递归调用,您将向它传递一个
    True
    total\u compare
    ;但是,在该递归调用中,它不会再次设置为
    False
    ,因此当选中时,它将为true,并且不可避免地会产生另一个递归调用(具有相同的缺陷)

    调用实例中的
    total\u compare
    设置(如果它曾经执行过,由于失控的递归,它不会执行)是不相关的:它是在那里执行的最后一条语句,它设置了一个局部变量,因此当然可以在没有任何可观察效果的情况下删除它。也许您没有意识到递归调用中函数的每个实例都有自己的局部变量集(包括参数——它们也是局部变量,只是调用方获取初始值的变量),这就是我明确指出这一点的原因

    您的示例“所需代码”1和2没有真正的帮助,因为它们从未显示函数调用本身。确切地说,在什么条件下,函数需要递归调用自身(a)如果它是非递归调用的,(b)如果它已经递归调用了?请记住,为了避免失控的递归,必须最终到达一个“基本情况”,在此情况下不再发生递归


    考虑到在您的第一个(“失控递归”)示例中,递归调用似乎是调用方的最后一个操作(除去无用的、因此可移动的
    total\u compare
    局部变量设置),我还应该指出,这种“尾部递归”可以很容易地转化为迭代(在Python中,这通常是可取的,因为Python不像其他语言那样优化尾部递归)。

    我不清楚调用函数的“第一次”和“第二次”是什么意思。这是第一次调用,还是第二次调用(第三次和以后会发生什么?)还是“第一次”时间是指函数被其他代码调用的时间,“第二次”是指递归调用?此外,我们有三个同名的不同函数,但不清楚它们之间的关系。