鱼C论坛

 找回密码
 立即注册
查看: 600|回复: 1

[已解决]关于函数实参的问题

[复制链接]
发表于 2024-6-3 23:24:36 | 显示全部楼层 |阅读模式
1鱼币
  1. def countStr(*str_long):
  2.     lenghth = len(str_long)
  3.     # print(lenghth)
  4.     for i in range(lenghth):
  5.         str_num = 0
  6.         digit_num = 0
  7.         punctuation_num = 0
  8.         space_num = 0
  9.         for each in str_long[i]:
  10.             if each.isalpha():
  11.                 str_num += 1
  12.             elif each.isdigit():
  13.                 digit_num += 1
  14.             elif each.isspace():
  15.                 space_num += 1
  16.             else:
  17.                 punctuation_num += 1
  18.         print(f'第{i+1}个字符串共有:英文字母{str_num}个,数字{digit_num}个,空格{space_num}个,其他字符{punctuation_num} 个。')
  19. str_long = ('I love fishc.com.', 'I love you, you love me.')
  20. countStr(str_long)
复制代码


以上这段代码是查找句子中的字母、数字、空格、其他符号个数的函数,但是只有
countStr('I love fishc.com.', 'I love you, you love me.')才能运行,如果我把元组赋给变量,再用函数实参为变量运行结果就是错的。是不是实参必须直接引用。
最佳答案
2024-6-3 23:24:37
实际上,您的问题不在于函数参数的传递方式,而是在于代码中的一个小错误。

当您将元组赋值给变量`str_long`后,`str_long`本身就成为了一个元组,而不再是多个参数。所以,在函数调用时,应该使用`*`操作符来拆包这个元组,使其成为多个参数。

修改代码如下:

  1. def countStr(*str_long):
  2.     length = len(str_long)
  3.     for i in range(length):
  4.         str_num = 0
  5.         digit_num = 0
  6.         punctuation_num = 0
  7.         space_num = 0
  8.         for each in str_long[i]:
  9.             if each.isalpha():
  10.                 str_num += 1
  11.             elif each.isdigit():
  12.                 digit_num += 1
  13.             elif each.isspace():
  14.                 space_num += 1
  15.             else:
  16.                 punctuation_num += 1
  17.         print(f'第{i+1}个字符串共有:英文字母{str_num}个,数字{digit_num}个,空格{space_num}个,其他字符{punctuation_num}个。')

  18. str_long = ('I love fishc.com.', 'I love you, you love me.')
  19. countStr(*str_long)
复制代码


在这个修改后的代码中,我们通过拆包操作`*str_long`,将元组中的每个元素都作为单独的参数传递给`countStr()`函数。

现在,您可以将元组赋值给变量,并且使用变量作为函数参数,结果会正确输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

最佳答案

查看完整内容

实际上,您的问题不在于函数参数的传递方式,而是在于代码中的一个小错误。 当您将元组赋值给变量`str_long`后,`str_long`本身就成为了一个元组,而不再是多个参数。所以,在函数调用时,应该使用`*`操作符来拆包这个元组,使其成为多个参数。 修改代码如下: 在这个修改后的代码中,我们通过拆包操作`*str_long`,将元组中的每个元素都作为单独的参数传递给`countStr()`函数。 现在,您可以将元组赋值给变量,并 ...

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-6-3 23:24:37 | 显示全部楼层    本楼为最佳答案   
实际上,您的问题不在于函数参数的传递方式,而是在于代码中的一个小错误。

当您将元组赋值给变量`str_long`后,`str_long`本身就成为了一个元组,而不再是多个参数。所以,在函数调用时,应该使用`*`操作符来拆包这个元组,使其成为多个参数。

修改代码如下:

  1. def countStr(*str_long):
  2.     length = len(str_long)
  3.     for i in range(length):
  4.         str_num = 0
  5.         digit_num = 0
  6.         punctuation_num = 0
  7.         space_num = 0
  8.         for each in str_long[i]:
  9.             if each.isalpha():
  10.                 str_num += 1
  11.             elif each.isdigit():
  12.                 digit_num += 1
  13.             elif each.isspace():
  14.                 space_num += 1
  15.             else:
  16.                 punctuation_num += 1
  17.         print(f'第{i+1}个字符串共有:英文字母{str_num}个,数字{digit_num}个,空格{space_num}个,其他字符{punctuation_num}个。')

  18. str_long = ('I love fishc.com.', 'I love you, you love me.')
  19. countStr(*str_long)
复制代码


在这个修改后的代码中,我们通过拆包操作`*str_long`,将元组中的每个元素都作为单独的参数传递给`countStr()`函数。

现在,您可以将元组赋值给变量,并且使用变量作为函数参数,结果会正确输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表