首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改一个双字字符串函数,以便在Python中使用**kwargs?

修改一个双字字符串函数,以便在Python中使用**kwargs?
EN

Stack Overflow用户
提问于 2020-12-06 16:06:56
回答 4查看 192关注 0票数 1

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

代码语言:javascript
复制
def alliteration_check(str):

    sp1, sp2 = str.split()

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

我想知道是否有可能改变这里的标准来吸收**kwargs?我最近才学到这个概念,所以我试着理解如何将它付诸实践。

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

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-12-06 16:14:46

不要给变量(包括参数)命名str,因为它会隐藏内置的str函数/类型!您可以使用str作为类型注释,但它应该在参数名称(如)的之后出现。

**kwargs的思想是让您的函数能够接受一组任意的关键字参数(而不是位置参数)。在函数的实现中,参数可以作为dict使用。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
alliteration_check(thing1="zig zag", other_thing="awkward alligator")

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

代码语言:javascript
复制
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
代码语言:javascript
复制
alliteration_check("zig zag", "awkward alligator")

您还可以将两者结合在一起(即,具有一个同时使用*args**kwargs的函数),以便能够在以下两种语法中处理参数:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-12-06 16:27:46

在您的例子中,使用*args --一个非键的、可变长度的参数列表--可能更合适,因为您想检查可变的单词数。然后你可以像一个列表一样迭代这个。

在您的情况下,您只想检查每个单词的第一个字母是相同的大小写-不敏感。我将构建一个集合,并检查它只包含一个元素:

代码语言:javascript
复制
def alliteration_check(*args):
    return len(set(s[0].upper() for s in args)) == 1

你会像这样使用它:

代码语言:javascript
复制
print(alliteration_check("hello", "Hello", "hi"))

输出:

代码语言:javascript
复制
True
票数 1
EN

Stack Overflow用户

发布于 2020-12-06 16:20:55

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65170159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档