Python:使用字符串调用函数将返回参数的描述

时间:2019-05-18 20:25:44

标签: python function arguments

我试图用一个字符串调用一个函数,但是当我这样做时,该函数只是利用了该函数的参数名称。

我的函数定义为sortering(attribut),当我用例如sortering('age')调用它时,它使用的是'attribut',而不是'age'。

这是代码,我是python的新手,所以我不熟悉它可能很明显。

def sortering(attribut):
 try:
    val1 = input("Vill du sortera stigande eller fallande? s/f")
    if val1 == "s":
        djurlista.sort(key=lambda x: x.attribut)
        print(*djurlista,sep='\n' + ' ' + '\n')
    elif val1 == "f":
        djurlista.sort(key=lambda x: x.attribut, reverse=True)
        print(*djurlista,sep='\n' + ' ' + '\n')
 except ValueError:
    print("Svara med s för stigande eller f för fallande!")


sortering('age')

列表“ djurlista”是一个字符串列表,每个字符串都是一个对象“ Djur”,具有以下属性:art,namn,ålder,kön,gravid

这是代码:

class Djur:
def __init__(self, art, namn, ålder, kön, gravid):
    self.art = art
    self.namn = namn
    self.age = ålder
    self.gender = kön
    self.gravid = gravid

    x = Djur(art, namn, ålder, kön, gravid)
    self.djurlista.append(x)
def __str__(self):
    return ("Art: " + str(self.art) + " " + "\n"
            "Namn: " + str(self.namn) + " " + "\n"
            "Ålder: " + str(self.age) + " " + "\n"
            "Kön: " + str(self.gender) + " " + "\n"
            "Gravid: " + str(self.gravid))
def __repr__(self):
    return str(self)

3 个答案:

答案 0 :(得分:0)

使用x [attribut]而不是x.attribut

def sortering(attribut):
 try:
    val1 = input("Vill du sortera stigande eller fallande? s/f")
    if val1 == "s":
        djurlista.sort(key=lambda x: x[attribut])
        print(*djurlista,sep='\n' + ' ' + '\n')
    elif val1 == "f":
        djurlista.sort(key=lambda x: x[attribut], reverse=True)
        print(*djurlista,sep='\n' + ' ' + '\n')
 except ValueError:
    print("Svara med s för stigande eller f för fallande!")

sortering('age')

答案 1 :(得分:0)

您似乎正在尝试从名为x的全局类/ obj(通过x.attribut)获取.attribut参数,如果该参数不存在,则应该抛出错误,但如果存在则可能会抛出错误以某种方式存储在您的python cli中。

如果删除x。在引用属性之前,您还会遇到相同的错误吗?

答案 2 :(得分:0)

而不是x.attribut(其中 attribute 是字符串,而 x Djur 实例),则应使用{ {3}}:

djurlista.sort(key=lambda x: getattr(x, attribut))