簡體   English   中英

如何使用此代碼返回打印到控制台?

[英]How do I get return to print to console in this code?

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        return abs(distance)
        print(distance)
    else:
        return "Nope"
        print distance_from_zero(distance)

distance_from_zero(18)

您應該在返回之前進行打印。 返回后,您的打印對帳單將無法訪問。

更換:

return abs(distance)
print(distance)

與:

print(distance)
return abs(distance)

和這個:

return "Nope"
print distance_from_zero(distance)

與:

print distance_from_zero(distance)
return "Nope"

返回后的代碼將永遠不會執行。

您必須還原訂單。

就像是:

print(distance)
return abs(distance)

這是原始代碼,其中打印語句放置在正確的位置。 請注意,仍然出現無限遞歸錯誤。

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        print(distance)
        return abs(distance)
    else:
        # This print forces infinite recursion because of distance
        # print distance_from_zero(distance)
        return "Nope"

這是一種測試方法

def distance_from_zero(distance):
    if type(distance) == int or type(distance) == float:
        print(distance)
        return abs(distance)
    else:
        try:
            distance = float(distance)
            print(distance)
            return abs(distance)
        except:
            print ("invalid distance specified", distance)
            return "Nope"

當然,可以刪除初始if,因為float(int)float(float)仍返回正常的float。

def distance_from_zero(distance):
    try:
        distance = float(distance)
        print(distance)
        return abs(distance)
    except:
        print ("invalid distance specified", distance)
        return "Nope"

首先,為什么在調用abs()之前需要檢查參數的類型? 隨便叫吧。 abs()最清楚可以使用的操作數類型。 如果看到它無法處理TypeError異常,則將引發該異常,調用方可以對其進行處理。

如果您確實想處理函數中的錯誤,請使用try/except塊,而不要嘗試猜測abs()支持的類型,例如,支持復數; abs(complex(1, 2))完全有效:

try:
    distance = abs(distance)
except TypeError as e:
    print('{!r} is not a valid distance'.format(distance))
    return None    # or some other error
else:
    print(distance)
    return distance

最后,如果您確實只想將支持范圍限制為intfloat類型,則使用isinstance()type()更好,因為isinstance()支持繼承:

if isinstance(distance, (int, float)):
    # it's a float or an int
    distance = abs(distance)

還有兩點需要注意:

  • 在函數中調用return之前,請先調用print() return終止該函數並將執行返回給調用代碼,因此return之后的任何語句都不會執行。
  • 您似乎想 abs() 之后打印distance的值,因此您需要將結果存儲在變量中(或執行兩次計算):

     distance = abs(distance) print(distance) return distance 

我認為Python在return某些內容后會停止讀取定義,因此您應該交換printreturn命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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