Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中修改两个单词的字符串函数以获取**kwargs?_Python_String_Function_Split_Boolean - Fatal编程技术网

在Python中修改两个单词的字符串函数以获取**kwargs?

在Python中修改两个单词的字符串函数以获取**kwargs?,python,string,function,split,boolean,Python,String,Function,Split,Boolean,我已经编写了一个基本函数,它接受作为参数传递的任何两个单词字符串,检查两个单词的索引是否匹配,并返回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,否则返回False

def alliteration_check(str):

    sp1, sp2 = str.split()

    if sp1[0].upper() == sp2[0].upper():
        return True
    else:
        return False
我想知道是否可以将str的参数更改为接收**kwargs?我最近才了解这个概念,所以我试图理解如何将它付诸实践

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


提前谢谢

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

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

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

alliteration_check(thing1="zig zag", other_thing="awkward alligator")
print(alliteration_check("hello", "Hello", "hi"))
如果希望用户能够使用任意数量的位置参数而不是关键字参数调用函数,请使用*args:

您还可以将两者结合使用,即使用一个同时使用*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

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

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

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

alliteration_check(thing1="zig zag", other_thing="awkward alligator")
print(alliteration_check("hello", "Hello", "hi"))
如果希望用户能够使用任意数量的位置参数而不是关键字参数调用函数,请使用*args:

您还可以将两者结合使用,即使用一个同时使用*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而不是**kwargs

def alliteration_check(*args):
    allit = True
    for arg in args:
        if arg[0].upper() != args[(args.index(arg))-1][0].upper():
            allit = False

    return allit

基本上,这会将输入函数的每个参数与前一个参数进行比较,并确保所有参数的第一个字母都相同。如果在任何一点不相等,它会将allit变量更改为false并中断循环。

这是我得到的解决方案。对于您的特定情况,您应该使用*args而不是**kwargs

def alliteration_check(*args):
    allit = True
    for arg in args:
        if arg[0].upper() != args[(args.index(arg))-1][0].upper():
            allit = False

    return allit

基本上,这会将输入函数的每个参数与前一个参数进行比较,并确保所有参数的第一个字母都相同。如果在任何时候它不相等,它会将allit变量更改为false并中断循环。

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

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

def alliteration_check(*args):
    return len(set(s[0].upper() for s in args)) == 1
您可以这样使用它:

alliteration_check(thing1="zig zag", other_thing="awkward alligator")
print(alliteration_check("hello", "Hello", "hi"))
输出:

True

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

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

def alliteration_check(*args):
    return len(set(s[0].upper() for s in args)) == 1
您可以这样使用它:

alliteration_check(thing1="zig zag", other_thing="awkward alligator")
print(alliteration_check("hello", "Hello", "hi"))
输出:

True

谢谢你的回答!我还没有学习->bool,所以我将尝试一行一行地分割代码,以了解它在做什么。感谢您对未使用str作为var或param的更正,我将注意这一点,以备将来参考!->bool是一个类型注释,表示此函数返回bool。这是一种非常有用的方法,可以向阅读代码的人以及mypy等工具指示您应该如何使用该函数以及它应该做什么。感谢您提供了这个非常有用的答案!我还没有学习->bool,所以我将尝试一行一行地分割代码,以了解它在做什么。感谢您对未使用str作为var或param的更正,我将注意这一点,以备将来参考!->bool是一个类型注释,表示此函数返回bool。这是一种非常有用的方式,可以向阅读代码的人以及mypy等工具指示应该如何使用该函数以及它应该做什么。