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

2024-09-30 10:38:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一个字符串调用一个函数,但是当我这样做的时候,这个函数只是使用这个函数的参数名。你知道吗

我的函数被定义为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')

列表“djulista”是一个字符串列表,每个字符串都是一个对象“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)

Tags: 函数字符串selfagedefprintstrart
3条回答

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

如果删除对attribute的引用之前的x,是否仍会出现相同的错误?你知道吗

您应该使用[Python 3.Docs]: Built-in Functions - getattr(object, name[, default]),而不是x.attribut(其中attribute是一个字符串,x是一个Djur实例):

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

使用x[attribute],而不是x.attribute

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')

相关问题 更多 >

    热门问题