sin*_*ash 13 python python-2.7
我一直在学习python大约一周,下面是问题:
码
def Foo():
pass
def Bar():
return None
Run Code Online (Sandbox Code Playgroud)
用法
a = Foo()
print(a)
# None
b = Bar()
print(b)
# None
Run Code Online (Sandbox Code Playgroud)
问题:1.当我们已经返回时,为什么我们需要通过?是否有一些情况,返回无法处理但传递可以?
Vin*_*ent 11
pass是一个"空"命令,但return停止函数/方法.
例子:
def func():
do_something() #executed
pass
do_something_else() #also executed
Run Code Online (Sandbox Code Playgroud)
但:
def func2():
do_something() #executed
return None
do_something_else() #NOT executed
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,return None是:"停止该功能并返回None".但pass就像"走到下一行"
在像Python这样的语言中,您有两种类型的"事物"被评估:表达式和语句.表达式是,好,表达式,评估到一些东西.例如1,1+1或者f(x)是所有表达式,评估某些东西.
相比之下,陈述并非"返回"任何东西,相反,它们"依赖于环境".例如,x=3将变量x设置为值3.def f(x): return x + 1设置f函数的值.这不会"评估"任何东西,它会修改评估事物的当前环境.
考虑到这一点,您有时需要一个空的陈述.出于语法原因,Python中有些地方你需要一个语句,但如果你不想在这里发生任何事情,你可能想表达所发生的事情恰恰是"没有".一种方法是评估表达式并对其无效:
def f():
1
Run Code Online (Sandbox Code Playgroud)
但一个偶然一瞥,可能意味着这个函数返回 1:不是,你可以使用pass如明确地指出:"什么都不做":
def f():
pass
Run Code Online (Sandbox Code Playgroud)
现在,还有另一个问题:我之前提到过这f(x)是一个表达.但是在上面的两个例子中,我没有放任何东西return,那么这些评价是什么呢?答案是:函数调用返回(即求值为)None,除非另有说明.所以:
def f():
pass
def g(x):
if x > 2:
return x
def h():
return None
f() # None
g(3) # 3 -> we explicitely say `return x`
g(1) # None -> no return specified for that path
h() # None -> we explicitely say `return None`
Run Code Online (Sandbox Code Playgroud)
其他人提到pass可以在其他地方使用(例如在空类中,在异常处理中......).原因是所有这些都需要一些声明,并pass允许指定一个空声明.这与None除了指定的函数返回的事实相结合,导致您观察到的行为(尽管它们在概念上是不同的).
Examples which should answer both questions:
Pass can be used in exception handling:
try:
something()
except:
pass # does not return
this_still_executes()
Run Code Online (Sandbox Code Playgroud)
Pass can be used to declare classes without any new elements:
class CustomError(Exception):
pass
Run Code Online (Sandbox Code Playgroud)
return None最后,Python 中的所有函数/方法/可调用对象,当然,除非您手动返回任何其他值。您可以想象每个函数return None在所有自定义代码后面都有一个隐式语句。如果您使用自己的return语句提前退出该函数,则它根本无法到达并且没有任何效果。return没有值的裸露也会自动返回None为默认值。
pass在这种语言中需要语句(“不执行任何操作”),因为我们使用不同的缩进级别定义代码块,而不使用括号(例如在{ ... }C、Java 等中)或关键字(例如if ... fi在 Bash 中)。
因此,如果您需要在某个地方有一个空代码块(尚未执行任何操作的函数、空类、空异常捕获器等),在其他语言中,您只需在左括号或关键字之间不放置任何内容即可。在Python中,你需要一段缩进的代码,否则就会出现语法错误。因此,尽管我们必须pass在那个地方编写代码,但我们什么也不做。
一些例子:
class MyPersonalException(Exception):
# simple exception without any additional information or functionality
# 'return None' would not work.
pass
Run Code Online (Sandbox Code Playgroud)def lazy_function():
# too lazy to do anything...
# often used if a method needs to be implemented to match an interface,
# but should not do anything.
# 'return None' would work here as well.
Run Code Online (Sandbox Code Playgroud)try:
# [do something here]
catch:
# we don't have to do anything if it fails, just catch and suppress the exception
pass
Run Code Online (Sandbox Code Playgroud)所以pass简单的意思就是什么也不做,只是继续处理下一行。
概括:
return None是(或可以想象是)总是隐式添加到每个函数定义的最后一行下方。它也只能出现在函数中并立即退出函数,返回一个值(或None作为默认值)。
pass没有语义意义,它不会以任何方式被解释。它的唯一目的是允许创建空代码块,这在 Python 中是不可能的,因为我们不使用括号等来包围块。它可以写在任何地方并且总是做同样的事情:什么也不做。