neoits 发表于 2024-6-3 23:24:36

关于函数实参的问题

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.')才能运行,如果我把元组赋给变量,再用函数实参为变量运行结果就是错的。是不是实参必须直接引用。

FishC 发表于 2024-6-3 23:24:37

实际上,您的问题不在于函数参数的传递方式,而是在于代码中的一个小错误。

当您将元组赋值给变量`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]
查看完整版本: 关于函数实参的问题