我正在进行编码练习,其中一个测试调用下面定义的方法get_count()
。其中一个测试调用get_count()
而不传递任何参数。我希望函数仍然返回result = {'vowels':0, 'consonants':0}
,即使在没有任何参数的情况下调用该函数。有没有办法在python中执行此操作?
def get_count(words):
result = {'vowels':0, 'consonants':0}
if not words:
return result
if type(words) is not str:
return result
for letter in words.lower():
if letter in 'aeiou':
result['vowels'] += 1
elif letter.isalpha():
result['consonants'] += 1
return result
答案 0 :(得分:3)
这是您使用default function argument。
的地方def get_count(words=None):
result = {'vowels':0, 'consonants':0}
if not words:
return result
if type(words) is not str:
return result
for letter in words.lower():
if letter in 'aeiou':
result['vowels'] += 1
elif letter.isalpha():
result['consonants'] += 1
return result
通常,对于您只想返回默认结果的情况,您希望使用None
作为默认值。如果您的函数可以在不传递参数的情况下运行,则可以使用您想要的任何值作为默认值。请注意使用可变对象作为值,因为它可能会产生一些有趣的后果。具体来说,该对象仅在首次定义函数时创建,因此每次调用该函数时,它都将保持不变。
以下是一个例子:
def mutable(x, y=[]):
y.append(x)
return y
print(mutable(1)) # Prints [1]
print(mutable(2)) # Prints [1, 2]
答案 1 :(得分:1)
是的,使用默认参数:
def get_count(words=None):
result = {'vowels':0, 'consonants':0}
if not words:
return result
if type(words) is not str:
return result
for letter in words.lower():
if letter in 'aeiou':
result['vowels'] += 1
elif letter.isalpha():
result['consonants'] += 1
return result
方便的是,你已经有了if not words
。 None
的布尔值为False
,因此如果未给出words
,则会执行if
语句。
答案 2 :(得分:0)
鉴于''
是一个字符串,您可以使用空字符串def get_count(words=''):
result = {'vowels':0, 'consonants':0}
try:
for letter in words.lower():
if letter in 'aeiou':
result['vowels'] += 1
elif letter.isalpha():
result['consonants'] += 1
except AttributeError:
pass
return result
的默认参数,然后您可以简化代码。 BTW中常见的习惯用法是EAFP,通常用来代替LBFL:
partition
如果你想完全过度设计它,你可以使用itertools
import itertools as it
def partition(pred, iterable):
t1, t2 = it.tee(iterable)
return filter(pred, t1), it.filterfalse(pred, t2)
def get_count(words=''):
p = partition(lambda c: c in 'aeiou', filter(str.isalpha, words.lower()))
return {k: sum(1 for _ in v) for k, v in zip(['vowels', 'consonants'], p)}
>>> get_count('Hello, World!')
{'consonants': 7, 'vowels': 3}
食谱:
{{1}}
抱歉,我很无聊