[英]Plot using python to check the number of elements occurring once, twice, thrice and so on in a dataset?
[英]Python printing thrice while I called the function twice, why is this so?
我是python的新手,我试图了解self是如何工作的。 当我来自JavaScript时,我认为它与此相似。 如果我错了,请纠正我。 同时,我编写了以下代码:
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
print("branch opened")
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
print(x.open_branch())
并得到输出:
None
branch opened
None
当我两次调用open_branch()时。 它不应打印三次。 我认为它应该打印,
branch opened // for first call
None // for 2nd call
您可以在此处粘贴代码,然后查看“请有人解释”。
最后的两个打印语句仅打印该方法的返回结果:
print(y.open_branch())
print(x.open_branch())
由于python在没有显式指定return语句的情况下默认情况下返回None
,并且您两次调用方法,因此可以看到两个None
语句。
如果调用的方法,无需打印,你会看到一个单一的印刷信息。
y.open_branch()
x.open_branch()
您可以通过在方法中添加return语句并在外部进行打印来改进代码,就像现在所做的那样。 就像是
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
return "branch opened"
return "branch closed"
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
# output:'branch closed'
print(x.open_branch())
# output: 'branch opened'
好的,您有以下代码:
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
print("branch opened")
x = Restaurant()
y = Restaurant()
到这里为止,您有两个类型为“餐厅”的对象。
y.bankrupt = True
在这里,您更改了存储在变量y
中的对象的属性bankrupt
print(y.open_branch())
这将输出
None
只要; 为什么? 首先,您要调用函数y.open_branch()
但是此函数将不会输出任何内容,因为属性bankrupt
为true,因此, if not self.bankrupt
的值不为false,则不会执行print语句。 但是,函数open_branch()
也没有返回任何内容(没有return true
语句左右。因此print(y.open_branch())
等于print(None)
,它将输出None
。
print(x.open_branch())
对于x,属性bankrupt
为false,因此, if not self.bankrupt
不是true,则将评估打印语句print("branch opened")
。 之后None
会出于同样的原因是为什么输出None
得到通过输出print(y.open_branch())
您正在执行的操作是在open_branch
的返回值上调用print
。
因此,当您看到它显示None
,您会看到print(x.open_branch()
和print(y.open_branch()
。
当你看到branch opened
,这是内部的打印结果open_branch
。
尝试这个:
class Restaurant(object):
bankrupt = False
def open_branch(self):
result = ""
if self.bankrupt:
result = "Restaurant is bankrupt"
else:
result = "Branch opened"
return result
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
print(x.open_branch())
有一些事情在这里给您带来问题:
您的open_branch
函数不会返回任何内容,因此,当您调用print(self.open_branch(x))
它将显示None
,这是Python中所有函数默认情况下在没有return
语句的情况下return
。 您可以通过替换来解决此问题
if not self.bankrupt: print("branch opened")
与
if not self.bankrupt: return "branch opened"
您要调用print
三次,这就是为什么您要在控制台上print
三行的原因(尽管如果您用上面详述的return
语句替换函数中的print
,这将自行解决)。
您应该在if
子句下放置一个else
语句,以便它将返回有用的内容(如果self.bankrupt == True
,则返回None
),并且可以判断分支是否已打开。 我建议类似的东西:
if not self.bankrupt: return "branch opened" else: return "Restaurant is bankrupt, branch could not be opened"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.