43

我正在学习 python,我只是想知道是否有一种方法可以编写如下代码:

def f(x):
    if x>1:
       return(x)
    else:
        # don't return anything

我在问代码的 else 部分。我不需要返回任何东西x<=1,如果返回None是不可接受的。

4

10 回答 10

65

在 Python 中没有“不返回任何内容”这样的东西。每个函数都会返回一些值(除非它引发异常)。如果没有return使用显式语句,Python 将其视为返回None

因此,您需要考虑什么最适合您的功能。您应该返回None(或其他一些标记值)并向调用代码添加适当的逻辑以检测这一点,或者您应该引发异常(调用代码可以捕获,如果它愿意)。

于 2013-03-27T01:49:53.200 回答
14

从字面上返回“无”使用pass,如果放入函数中,它基本上返回值 None (函数必须返回一个值,所以为什么不“无”)。不过,您可以明确地执行此操作return None

所以要么:

if x>1:
    return(x)
else:
    pass

或者

if x>1:
    return(x)
else:
    return None

会成功的。

于 2013-03-27T01:49:41.213 回答
4

没有什么比不返回任何内容更好的了,但是您尝试做的事情可以通过使用空return语句来完成。它返回一个None.

您可以在下面看到一个示例:

if 'account' in command:
    account()

def account():
    talkToMe('We need to verify your identity for this. Please cooperate.')
    talkToMe('May I know your account number please?')
    acc_number = myCommand()
    talkToMe('you said your account number is '+acc_number+'. Is it right?')
    confirmation = myCommand()
    if confirmation!='yes' or 'correct' or 'yeah':
        talkToMe('Let\'s try again!')
        account()
    else:
        talkToMe('please wait!')
    return

这不会向调用函数返回任何内容,但会停止执行并到达调用函数。

于 2019-08-24T12:11:51.013 回答
3

这个怎么样?

def function(x):
     try:
         x = x+1
         return (x)
     except:
         return ('')
于 2017-11-30T22:42:38.487 回答
2

你可以这样做:

>>> def f(x):
...    return x if x>1 else None
... 
>>> f(1),f(2)
(None, 2)

它似乎“什么都不返回”:

>>> f(1)
>>> 

但即使是替代方案也返回 None:

>>> def f2(x): 
...    if x>1: return x
... 
>>> f2(1),f2(2)
(None, 2)

或者:

>>> def f2(x):
...    if x>1: 
...        return x
...    else:
...        pass
... 
>>> f2(1),f2(2)
(None, 2)

因此,无论您如何编写它们,它们在功能上都是相同的。

于 2013-03-27T02:31:47.537 回答
1

正如其他人在上面提到的,在你的情况下它总是会返回 None 。但是,如果您不想返回 None 类型,则可以将其替换为空格

定义测试(x):
    如果 x >1:
        返回(x)
    别的:
        返回打印('')
于 2019-09-05T09:12:20.777 回答
0

You can use lambda function with filter to return a list of values that pass if condition.

Example:

    myList = [1,20,5,50,6,7,2,100]
    result = list(filter(lambda a: a if a<10 else None, (item for item in myList)))
    print(result)

Output:

    [1,5,6,7,2]
于 2019-04-24T18:49:40.897 回答
0

只是为了添加所有答案,不返回函数的唯一实际方法是引发异常。至少,只要程序需要运行,即使没有返回任何东西。

所以你的代码可以是:

def f(x):
    if x>1:
        return x
    raise Exception

(请注意,我没有使用else块来引发异常,因为如果满足条件,它已经返回值。但是,您也可以在else块中执行此操作)

试运行时:

num1 = f(2)    # 2
num2 = f(0)    # Unbound; and error raised

现在,如果您还想在某些条件下继续返回None选项,而在某些其他条件下不返回任何内容,这将很有用:

def f(x):
    if x > 0:
        return x
    elif x == 0:
        return None  # pass
    raise Exception

>>> num1 = f(1)  # 1
>>> num2 = f(0)  # None
>>> num3 = f(-1) # Unbound; and error raised

如果您不希望程序退出并显示错误,您可以让它在函数之外捕获异常:

try:
    num = f(0)
except:
    pass

这样,如果f(0)发生异常(它会),它将被捕获为except块,您可以愉快地继续程序,请放心,num不是None,而是简单地未绑定。


一个有趣的事实:

不返回任何东西的唯一另一种方法可能是简单地退出程序,这就是做什么exit()quit()做什么。当我在我的代码编辑器中检查返回类型时exit()quit()它会显示我NoReturn,这与它显示None的常规函数​​不同:)

于 2022-02-05T20:48:10.793 回答
0

您可以在没有字符的情况下使用返回chr(0) 原因,因此将其留空0ASCII

于 2021-12-20T14:26:27.333 回答
0

我可能有一个提示给你!如果没有返回值,编写 print(f(x)) 将输出 None ,但如果你只是在没有'print'的情况下调用你的函数,而是在函数中写入一些'print(s)',你将不会有无值

于 2020-06-16T00:09:00.827 回答