【问题标题】:attempt at a nested functions尝试嵌套函数
【发布时间】:2020-12-24 04:14:42
【问题描述】:

公平地说,我对 python 很陌生。我试图了解嵌套函数,但是我无法获得我想要的输出。我希望我的 IQ_multiplier 函数返回通过clever_multiplier 输入的IQ 分数,后跟字符串“with multiplier”。 例如 158.4 ,“带乘数” 72、“有乘数” 等等。

...但是,我的第一次尝试一直给我没有字符串的乘数分数,而我的第二次尝试给了我乘数分数和字符串,但在第一个分数处停止。我知道可能有更简单的方法来执行我试图得到的输出(没有嵌套函数),但是我试图理解我对嵌套函数的尝试有什么问题。谢谢

IQ = [132, 92, 75, 97, 118]
def IQ_multiplier(IQ):
     def clever_multiplier(IQ):
        for val in IQ:
         if val > 100:
            return val * 1.2
         else:
            return val - 20
     return (clever_multiplier(IQ), "with multiplier")
print(IQ_multiplier(IQ))



IQ = [132, 92, 75, 97, 118]
def IQ_multiplier(IQ):
     def clever_multiplier(IQ):
        for val in IQ:
         if val > 100:
            print (val * 1.2)
         else:
            print (val - 20)
     return (clever_multiplier(IQ), "with multiplier")
print(IQ_multiplier(IQ)) 

【问题讨论】:

  • 在您的第一次尝试中,您在列表上调用clever_multiplier,但在第一次迭代时立即返回。我怀疑您实际上打算在列表的每个元素上调用clever_multiplier,而不是在整个列表上。 for 循环必须是外部函数的一部分,而不是内部函数。对于第二个,您的内部功能只是打印,但返回 None。所以你的结果将是无。同样,您可能希望在外部函数中使用 for 循环,而不是在内部函数中。

标签: python function printing nested return


【解决方案1】:

我做了一个在教育上不好的东西......

def IQ_multiplier(IQs=None):
    if not hasattr(IQ_multiplier, 'IQs'):
        IQ_multiplier.IQs = []
    if IQs is None and len(IQ_multiplier.IQs) != 0:
        val = IQ_multiplier.IQs.pop(0)
        if val > 100:
            return (val * 1.2, 'with multiplier')
        else:
            return (val - 20, 'with multiplier')
    elif IQs is None and len(IQ_multiplier.IQs) == 0:
        return None
    else:
        IQ_multiplier.IQs.extend(IQs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2017-05-30
    • 2015-05-09
    • 1970-01-01
    • 2017-05-26
    • 2015-12-13
    相关资源
    最近更新 更多