&引用;通行证;同「;返回“无”;用Python?
我已经学习python大约一周了,下面是一个问题: 代码&引用;通行证;同「;返回“无”;用Python?,python,python-2.7,Python,Python 2.7,我已经学习python大约一周了,下面是一个问题: 代码 def Foo(): pass def Bar(): return None a = Foo() print(a) # None b = Bar() print(b) # None 用法 def Foo(): pass def Bar(): return None a = Foo() print(a) # None b = Bar() print(b) # None 问题: 1.既然我们已经一无
def Foo():
pass
def Bar():
return None
a = Foo()
print(a)
# None
b = Bar()
print(b)
# None
用法
def Foo():
pass
def Bar():
return None
a = Foo()
print(a)
# None
b = Bar()
print(b)
# None
问题:
1.既然我们已经一无所获,为什么还需要通行证?是否存在返回None不能处理但传递can的场景?应回答这两个问题的示例: Pass可用于异常处理:
try:
something()
except:
pass # does not return
this_still_executes()
Pass可用于声明没有新元素的类:
class CustomError(Exception):
pass
另一种情况是
pass
意味着现在还没有实现,但将来会实现。例如,在编写实际逻辑之前,您定义了一些API:
def get():
pass
def post():
pass
def put():
pass
...
此语义不能替换为返回None
。正如viraptor所说,如果使用returnnone
而不是pass
,有时会出现语法错误 pass
是一个“空”命令,但是return
停止函数/方法
示例:
def func():
do_something() #executed
pass
do_something_else() #also executed
但是:
在第二种情况下,returnnone
是:“停止函数并返回None”。
但是pass
就像“转到下一行”
如您所见,这些函数完全相同。除了样式,或者告诉其他程序员函数的意图之外,没有理由使用一个而不是另一个(在这个具体的例子中)
但总的来说是有区别的
return
语句中断当前函数的执行,而pass
语句则不中断当前函数的执行。在Python等语言中,有两种类型的“东西”被计算:表达式和语句。表达式是,嗯,表达式,它的计算结果是。例如1
,1+1
,或f(x)
都是表达式,计算结果都有一定的意义
相比之下,语句不是“返回”任何东西,而是“作用于环境”。例如,x=3
将变量x
设置为值3
def f(x):返回x+1
设置函数的f
值。它不会“评估”任何东西,它会修改当前的评估环境
考虑到这一点,您有时需要一个空语句。出于语法方面的原因,Python中有些地方需要一个语句,但如果您不希望在这里发生任何事情,您可能希望表示发生的事情恰恰是“无”。一种方法是对表达式求值,而不对其进行任何处理:
def f():
1
但随便一看,这可能表明此函数返回1
:相反,您可以使用pass
作为明确声明:“什么也不做”:
def f():
pass
现在,还有另一个问题:我前面提到,f(x)
是一个表达式。但是在上面的两个例子中,我没有输入任何返回值
,那么这些值是用来做什么的呢?答案是:除非另有规定,否则函数调用返回(即计算为)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`
其他人提到pass可以在其他地方使用(例如,在空类中,在异常处理中…)。原因是所有这些都需要一些语句,而
pass
允许指定一个空语句。这一点,再加上函数返回None(除非另有规定)这一事实,导致了您观察到的行为(尽管它们在概念上不同)。Python中的所有函数/方法/可调用项最终都返回None(无),当然,除非您手动返回任何其他值。您可以想象,在所有自定义代码之后,每个函数都有一个隐式的returnnone
语句。如果您更早地使用自己的return
语句退出该函数,则无法访问该函数,也没有任何效果。另外,没有值的裸返回
也会自动返回默认值None
在这种语言中需要
pass
语句(“DoNothing”),因为我们使用不同的缩进级别定义代码块,而不使用括号(例如C、Java等中的{…}
)或关键字(例如Bash中的if…fi
)
因此,如果您需要某个空代码块(尚未执行任何操作的函数、空类、空异常捕捉器等),在其他语言中,您只需在开始和结束括号或关键字之间放置任何内容。在Python中,需要一段缩进的代码,否则就是语法错误。因此,我们必须传递——什么也不做,尽管我们必须在那个地方编写代码
一些例子:
类MyPersonalException(异常): #没有任何附加信息或功能的简单异常 #“不返回”不起作用。 通过
def lazy_函数(): #懒得做任何事。。。 #通常在需要实现方法以匹配接口时使用, #但不应该做任何事情。 #“不返回”在这里也适用。
试试看: #[在这里做点什么] 捕获: #如果它失败了,我们不必做任何事情,只要捕获并抑制异常即可 通过
pass
的意思就是什么都不做,继续处理下一行
总结:
return None
总是隐式添加到每个函数定义的最后一行下面。它也只能出现在函数中并立即退出,返回一个值(或默认值为None
)
pass
没有语义含义,它不会以任何方式被解释。它的唯一目的是允许创建空代码块,这在Python中是不可能的,因为我们不使用括号等来包围代码块。它可以写在任何地方,而且总是这样:什么都不做。我发现瓦尔的回答更详细,我想