修改两个单词的字符串函数以在 Python 中获取 **kwargs?
Modifying A Two-Word String Function To Take **kwargs in Python?
我写了一个基本函数,它接受任何两个单词的字符串作为参数传递,检查两个单词的索引是否匹配,并且 returns 为真,否则为假。
def alliteration_check(str):
sp1, sp2 = str.split()
if sp1[0].upper() == sp2[0].upper():
return True
else:
return False
我想知道是否可以在这里更改 str 的参数以接收 **kwargs?我最近才了解这个概念,所以想了解如何将其付诸实践。
本质上,我的预期函数输出是用户可以放置与参数一样多的单词,并且只有 returns 如果每个字符串的所有第一个索引都匹配,它才为真。我只是不确定如何编写该函数,或者它是否可能?
提前致谢!
不要命名变量(包括参数)str
,因为它会隐藏内置 str
function/type!您可以使用 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")
如果您希望用户能够使用任意数量的 positional 参数而不是 keyword 参数调用函数,请使用*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
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")
这是我得到的解决方案。对于您的具体情况,您应该使用 *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
你会这样使用它:
print(alliteration_check("hello", "Hello", "hi"))
输出:
True
我写了一个基本函数,它接受任何两个单词的字符串作为参数传递,检查两个单词的索引是否匹配,并且 returns 为真,否则为假。
def alliteration_check(str):
sp1, sp2 = str.split()
if sp1[0].upper() == sp2[0].upper():
return True
else:
return False
我想知道是否可以在这里更改 str 的参数以接收 **kwargs?我最近才了解这个概念,所以想了解如何将其付诸实践。
本质上,我的预期函数输出是用户可以放置与参数一样多的单词,并且只有 returns 如果每个字符串的所有第一个索引都匹配,它才为真。我只是不确定如何编写该函数,或者它是否可能?
提前致谢!
不要命名变量(包括参数)str
,因为它会隐藏内置 str
function/type!您可以使用 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")
如果您希望用户能够使用任意数量的 positional 参数而不是 keyword 参数调用函数,请使用*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
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")
这是我得到的解决方案。对于您的具体情况,您应该使用 *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
你会这样使用它:
print(alliteration_check("hello", "Hello", "hi"))
输出:
True