在Python中修改双字字符串函数以获取**kwargs?

2024-10-02 02:35:30 发布

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

我已经编写了一个基本函数,它接受作为参数传递的任何两个单词字符串,检查两个单词的索引是否匹配,并返回True,否则返回False

def alliteration_check(str):

    sp1, sp2 = str.split()

    if sp1[0].upper() == sp2[0].upper():
        return True
    else:
        return False

我想知道是否可以将str的参数更改为接收**kwargs?我最近才了解这个概念,所以我试图理解如何将它付诸实践

本质上,我预期的函数输出是,用户可以将尽可能多的单词作为参数放置,并且只有当每个字符串的所有第一个索引匹配时,它才会返回True。我只是不知道如何编写函数,或者它是否可能

提前谢谢


Tags: 函数字符串falsetrue参数returndefcheck
3条回答
def alliteration_check(*args):
    initialWord = args[0]
    allEqual=true
    for word in args:
       if (word != initialWord):
           allEqual=false
           break
    return allEqual

alliteration_check("4", "5")
alliteration_check("10", "9")
alliteration_check('2', "3", "4")

不要命名变量(包括参数)str,因为它将隐藏内置的str函数/类型!您可以使用str作为类型注释,但它应该位于参数名称之后,例如foo: str

**kwargs的思想是让函数能够接受任意一组关键字参数(而不是位置参数)。在函数的实现中,参数以dict的形式提供

def alliteration_check(**kwargs: str) -> bool:
    for s in kwargs.values():
        w1, w2 = s.split()
        if w1[0].upper() != w2[0].upper():
            return False
    return True

您需要使用关键字参数调用此函数,如下所示:

alliteration_check(thing1="zig zag", other_thing="awkward alligator")

如果希望用户能够使用任意数量的位置参数而不是关键字参数调用函数,请使用*args

def alliteration_check(*args: str) -> bool:
    for s in args:
        w1, w2 = s.split()
        if w1[0].upper() != w2[0].upper():
            return False
    return True
alliteration_check("zig zag", "awkward alligator")

您还可以将这两种方法结合使用(即,使用一个同时使用*args**kwargs的函数),以便能够以以下任一语法处理参数:

def alliteration_check(*args: str, **kwargs: str) -> bool:
    for s in (*args, *kwargs.values()):
        w1, w2 = s.split()
        if w1[0].upper() != w2[0].upper():
            return False
    return True

在您的案例中,可能更适合使用*args(一个非关键字、可变长度的参数列表),因为您希望检查可变的字数。然后你可以像列表一样迭代

在您的情况下,您只需要检查每个单词的第一个字母是否不区分大小写。我将构建一个集合并检查它是否只包含一个元素:

def alliteration_check(*args):
    return len(set(s[0].upper() for s in args)) == 1

您可以这样使用它:

print(alliteration_check("hello", "Hello", "hi"))

输出:

True

相关问题 更多 >

    热门问题