【问题标题】:List elements as argument in decorator (Python)在装饰器中列出元素作为参数(Python)
【发布时间】:2021-11-26 08:00:36
【问题描述】:

我正在尝试解决这个任务:创建一个生成随机数数组的函数,并使用装饰器对数组中的每个元素进行平方。 我不知道如何将数组元素作为装饰器中的参数。

import random


def square_them(function):
    def case(*args, **kwargs):
        numbers = function(*args, **kwargs)
        return numbers ** 2

    return case


@square_them
def array_creator():
    randomlist = []
    for i in range(1, 10):
        numbers = random.randint(1, 100)
        randomlist.append(numbers)
    print(randomlist)


array_creator()

我收到一个错误:

第 7 行,以防万一 返回数字** 2 类型错误:** 或 pow() 不支持的操作数类型:'NoneType' 和 'int'

有什么想法吗?谢谢。

【问题讨论】:

  • 请参阅How to Askhelp center。你到底在问什么?您是否遇到错误?出乎意料的输出?如果是这样,究竟是什么错误?什么是出乎意料的输出,你期待什么?
  • 请把它归结为minimal reproducible example。如果您遇到错误,请生成一个演示该错误的示例,并删除不相关的详细信息。几乎可以肯定,您使用装饰器这一事实完全无关紧要。请理解,这不是调试服务或辅导服务。
  • 至于“我不知道如何将数组元素作为装饰器中的参数。”好吧, list 已成功作为参数传递给装饰器中的包装函数。那不是问题。再次,请回来minimal reproducible example
  • 注意,你的array_creator函数返回None
  • #juanpa.arrivillaga 非常感谢您的所有 cmets。我尽力了,对不起。我是新来的,也是 Python 的初学者。我看到该函数返回 None,但不知道如何避免这种情况。

标签: python arrays arguments decorator


【解决方案1】:

使用列表推导:

import random

def square_them(function):
    def case(*args, **kwargs):
        numbers = function(*args, **kwargs)
        return [i ** 2 for i in numbers]
    return case


@square_them
def array_creator():
    randomlist = []
    for i in range(1, 10):
        numbers = random.randint(1, 100)
        randomlist.append(numbers)
    return randomlist


print(array_creator())

输出:

[2809, 3364, 400, 8100, 3025, 4096, 4, 2601, 144]

【讨论】:

    【解决方案2】:
    import random
    print([i*2 for i in random.sample(range(10), 5)])
    

    【讨论】:

    • 谢谢。但我需要使用@decorator
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2021-12-30
    • 2011-11-21
    • 2014-07-21
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多