[英]How to compose a nested function g=fn(…(f3(f2(f1()))…) from a list of functions [f1, f2, f3,…fn]
[英]Calling function f from within f
我正在做一个小程序,将二进制数字转换为十六进制。 为此,我首先将给定的数据分为4位块,如您所见。
def binary_to_hex(n):
if len(n)%4 != 0:
n = "0"+n
return binary_to_hex(n)
return n
现在,该示例可以顺利运行,返回四个位的块。
但是,当我省略if
子句中的第一个return
语句时,只会添加一个0
。 如果n
不能被4整除,那就是。
我猜想它与可变范围有关。 在这种情况下, 类似的问题似乎并不适用。 您能否解释一下发生的情况以及在不使用第一个return语句的情况下将如何进行。
另外,这种函数会在满足给定要求之前自行调用的名称是什么?
这是我们正在讨论的代码:
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)
调用该函数并忽略result 。 由于该调用没有可观察到的副作用(即,它没有执行呼叫者可以观察到的任何操作),因此实际上是无操作的,并且代码等效于:
def binary_to_hex(n):
if len(n)%4 != 0:
n = "0"+n
return n
这说明了您所看到的行为。
[H]现在不用第一个return语句就可以解决[[]
尝试使用循环或字符串重复运算符( *
)。
正如评论中已经提到的那样,调用自身的函数称为递归。
如果要不递归地实现此功能,请将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.