簡體   English   中英

從f內調用函數f

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM