仅当表达式的值不是 None 时才返回表达式的 Python 语法

标签 python function nested return

我想知道如果嵌套函数的返回值不是None,如何使函数返回嵌套函数的返回值。

为了让我的代码工作,我可以在我的主函数中复制嵌套函数的代码,但这太重复了(DRY)。我调查了一些关于使用 from functool import partial 复制函数的问题,但这只允许您拥有另一个具有不同变量或文档字符串的函数。此外,我浏览了所有相关问题,但似乎都没有一段优雅的代码(简单地做到这一点)。

这里主要函数 ExtractOne 被提供了一个数字列表。通常(与我的代码相关)第 4 个元素是一个,因此使用 CheckIfOne 函数检查该元素。如果是这种情况,函数返回 1 并退出。如果不是这种情况,则代码继续检查馈送列表中的所有元素是否是一个元素,再次对每个元素使用 CheckIfOne。如果元素是一个,ExtractOne 应该返回 1,从而打破 for 循环和函数。

这是有效的片段。它将 CheckIfOne(嵌套函数)的返回值复制到变量 a 上,检查 a 是否不是 None,如果是这种情况,则返回 a

示例 1:

def CheckIfOne(part):
    if part == 1:
        return 1

def ExtractOne(parts):
    #4th element is generally 1
    a = CheckIfOne(parts[3])
    if a:
        return a
    
    #else scan through the list for 1
    for part in parts:
        a = CheckIfOne(part)
        if a:
            return a

>>> ps = [1,2,3,4,5]
>>> ExtractOne(ps)
1
>>>

这是我希望它看起来的样子,但当然这不是嵌套函数的工作方式,嵌套函数返回一个值,并且必须将其复制到一个变量上,如果它不是 None<,则检查该变量 然后返回,就像上面的代码片段一样。

示例 2:

def CheckIfOne(part):
    if part == 1:
        return 1

def ExtractOne(parts):
    #4th element is generally 1
    CheckIfOne(parts[3])
    
    #else scan through the list for 1
    for part in parts:
        CheckIfOne(part)

>>> ps = [1,2,3,4,5]
>>> ExtractOne(ps)
>>> 

然而,当我只是复制CheckIfOne的代码时它确实有效,但这违反了DRY规则。

示例 3:

def ExtractOne(parts):
    #4th element is generally 1
    if parts[3] == 1:
        return 1
    
    #else scan through the list for 1
    for part in parts:
        if part == 1:
            return 1

>>> ps = [1,2,3,4,5]
>>> ExtractOne(ps)
1
>>>

我希望有一个简单的 pythonic python 语法来将嵌套函数的代码复制到示例 3 中的主要代码段。

最佳答案

暂时忽略您的代码并不总是有返回值,命名约定本身并不是“pythonic”,并且有更简单的方法来降低复杂性,并假设您只是问一般的问题。

调用一个单独的方法并没有错,但是如果你只是想让自己有另一个顶级函数并且你将只使用你函数中的代码,你可以在函数内部定义函数,如下所示。

def ExtractOne(parts):

    def CheckIfOne(part):
        if part == 1:
            return 1

    #4th element is generally 1
    a = CheckIfOne(parts[3])
    if a:
        return a

    #else scan through the list for 1
    for part in parts:
        a = CheckIfOne(part)
        if a:
            return a

ps= [1,2,3,4,5]
print(ExtractOne(ps))

关于仅当表达式的值不是 None 时才返回表达式的 Python 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57637395/

相关文章:

python - 在没有 pip/anaconda 的 Ubuntu 上安装 numpy

python - 将具有多值字段的 CSV Python 列表转换为 Python 嵌套列表,对嵌套列表值进行排序并导出为 CSV

function - 我可以有一个在 Rust 中不被类型化为闭包的匿名函数吗?

r - R中这个函数的逻辑有什么问题?

angularjs - 嵌套的ng-Grids?

sass - SCSS/SASS 从第 n 个嵌套映射中获取值

python - 对起点和终点字符串列表进行排序

python - Windows批处理文件运行Python脚本来检查安装的包版本?

python - 如何创建形状为 (0, 2) 的 numpy 数组?

javascript - 函数和函数有什么区别