关于函数实参的问题
def countStr(*str_long):lenghth = len(str_long)
# print(lenghth)
for i in range(lenghth):
str_num = 0
digit_num = 0
punctuation_num = 0
space_num = 0
for each in str_long:
if each.isalpha():
str_num += 1
elif each.isdigit():
digit_num += 1
elif each.isspace():
space_num += 1
else:
punctuation_num += 1
print(f'第{i+1}个字符串共有:英文字母{str_num}个,数字{digit_num}个,空格{space_num}个,其他字符{punctuation_num} 个。')
str_long = ('I love fishc.com.', 'I love you, you love me.')
countStr(str_long)
以上这段代码是查找句子中的字母、数字、空格、其他符号个数的函数,但是只有
countStr('I love fishc.com.', 'I love you, you love me.')才能运行,如果我把元组赋给变量,再用函数实参为变量运行结果就是错的。是不是实参必须直接引用。 实际上,您的问题不在于函数参数的传递方式,而是在于代码中的一个小错误。
当您将元组赋值给变量`str_long`后,`str_long`本身就成为了一个元组,而不再是多个参数。所以,在函数调用时,应该使用`*`操作符来拆包这个元组,使其成为多个参数。
修改代码如下:
def countStr(*str_long):
length = len(str_long)
for i in range(length):
str_num = 0
digit_num = 0
punctuation_num = 0
space_num = 0
for each in str_long:
if each.isalpha():
str_num += 1
elif each.isdigit():
digit_num += 1
elif each.isspace():
space_num += 1
else:
punctuation_num += 1
print(f'第{i+1}个字符串共有:英文字母{str_num}个,数字{digit_num}个,空格{space_num}个,其他字符{punctuation_num}个。')
str_long = ('I love fishc.com.', 'I love you, you love me.')
countStr(*str_long)
在这个修改后的代码中,我们通过拆包操作`*str_long`,将元组中的每个元素都作为单独的参数传递给`countStr()`函数。
现在,您可以将元组赋值给变量,并且使用变量作为函数参数,结果会正确输出。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]