[英]Python - print values not being returned by function
我目前正在學習python,並遇到了以下代碼:
class Simple:
def __init__(self, str):
print("Inside the Simple constructor")
self.s = str
# Two methods:
def show(self):
print(self.s)
def showMsg(self, msg):
print(msg + ':',
self.show())
我正在python shell中進行操作,並執行以下操作:
x = Simple("A constructor argument")
x.show()
輸出:
A constructor argument
這對我來說很有意義,但是我隨后輸入:
x.showMsg("A message")
哪個輸出:
A constructor argument
A Message:None
這就是我感到困惑的地方。 當x.Show()產生“構造函數參數”時,為什么對showMsg()中的self.show()的調用導致“ None”? 我以為在創建類實例之前self是一個占位符,這意味着在這種情況下self.show()等同於x.show()?
任何幫助,將不勝感激。
養成讓函數return
值的習慣。 沒有return
語句的函數默認情況下返回None
。
這是一個如何重寫程序的示例:
class Simple:
def __init__(self, str):
self.s = str
# Two methods:
def show(self):
return self.s
def showMsg(self, msg):
return msg + ': ' + self.show()
x = Simple("A constructor argument")
print(x.show())
# A constructor argument
print(x.showMsg('A message'))
# A message: A constructor argument
雖然可以在類中進行print
,但最好是讓類處理邏輯並靈活處理結果(打印結果,將其存儲在列表中,將其傳遞給另一個函數等)。
類中的show()
方法所做的只是打印存儲的消息,但是, showMsg
試圖通過調用show
方法來將某些msg
與存儲的msg
連接起來,但是,因為show()不返回任何內容,否則返回None ,它會像這樣受到關注,您將不得不將您的方法更改為:
def show(self):
return self.s
要么
def show(self):
print(self.s)
return self.s
在第二種情況下,您將保留這兩種情況的功能,但這是不明智的做法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.