从f内调用函数f

时间:2016-10-21 15:33:04

标签: python

我正在制作一个小程序,将二进制数转换为十六进制数。为此,我首先将给定数据拆分为4位块,如您所见。

def binary_to_hex(n):
    if len(n)%4 != 0:
        n = "0"+n
        return binary_to_hex(n)
    return n

现在这个例子没有任何障碍,返回了四位的块。

但是,当我省略return子句中的第一个if语句时,只会添加一个0。如果n不能被4整除,那就是。

我猜它与变量范围有关。 Similar problems在这种情况下似乎不适用。 你能解释一下发生了什么以及如何在不使用第一个return语句的情况下进行。

此外,这种类型的函数的名称是什么,在满足给定要求之前调用本身

2 个答案:

答案 0 :(得分:1)

以下是我们正在讨论的代码:

def binary_to_hex(n):
    if len(n)%4 != 0:
        n = "0"+n
        binary_to_hex(n)  # no `return'
    return n

此处,binary_to_hex(n)调用函数并忽略结果。由于调用没有可观察到的副作用(即,它不会执行调用者可以观察到的任何内容),因此它实际上是无操作,并且代码等同于:

def binary_to_hex(n):
    if len(n)%4 != 0:
        n = "0"+n
    return n

这解释了您所看到的行为。

  

[H]可以不使用第一个返回语句[?]

尝试使用循环或字符串重复运算符(*)。

答案 1 :(得分:0)

正如已在评论中所述,调用自身的函数称为递归函数。

如果您想在没有递归的情况下实现此功能,请将if替换为while

def add_leading_zeros_to_make_length_of_string_a_multiple_of_four(n):
    while len(n)%4 != 0:
        n = "0"+n
    return n