使用函数统计指定数字的个数_使用装饰器获取函数的参数个数

该博客介绍了Python中的装饰器使用,通过`functools.wraps`保持被装饰函数的元信息。示例中定义了`decorate1`装饰器,用于计算并打印函数参数个数,然后应用到`sum2`和`printf`两个函数上,展示了装饰器如何增强函数功能。

代码如下:

from functools import wraps #从functools库导入wrapsdef decorate1(func): #定义函数decorate1,参数是func @wraps(func) #使用wraps进行装饰,装饰的参数是func def wrapper(*args,**kwargs): #定义wrapper函数,参数是*args,**kwargs,即所有的数据都是参数 lens=len(args)+len(kwargs) #定义参数的长度,并赋值给lens print(func.__name__+"参数个数是:{}个".format(lens)) #打印函数func的名字,参数个数是lens个 return func(*args,**kwargs) #返回func函数,参数是*args,**kwargs return wrapper #返回wrapper函数@decorate1 #使用decorate1函数对下面的函数进行装饰def sum2(x,y): #定义sum2函数,参数是x,y print(x+y) #打印x+y的值sum2(11,21) #调用sum2函数的值,参数是11,21@decorate1 #使用decorate1函数对下面的函数进行装饰def printf(name,age,love): #定义printf函数,参数name是名字,age是年龄,love是爱好 print(name+str(age)+"岁,喜欢"+love) #打印name年龄多少岁,喜欢什么爱好printf("张三",30,"骑马") #调用printf函数,参数是张三,30,骑马

代码运行结果如下:

sum2参数个数是:2个

32

printf参数个数是:3个

张三30岁,喜欢骑马

图片示例如下:

a3e2879033197528686bc26b1bb18089.png
在PTA平台使用函数统计指定数字个数,通常需要实现一个名为`CountDigit`的函数,该函数接收两个参数:`number`(整数)和`digit`(指定统计数字,范围在`[0, 9]`区间内),并返回`number`中`digit`出现的次数。以下是具体的实现方法和代码示例: ### 函数接口定义 ```c int CountDigit( int number, int digit ); ``` ### 代码实现 ```c #include <stdio.h> // 函数定义 int CountDigit( int number, int digit ){ int num = 0; if(number < 0){ number = -number; // 将负整数变为整数 } while (number > 0){ if (number % 10 == digit){ // 判断最低位是否相同 num = num + 1; } number = number / 10; // 去掉最低位 } return num; } int main() { int number, digit; scanf("%d %d", &number, &digit); printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit)); return 0; } ``` ### 代码解释 1. **函数`CountDigit`**: - 首先,检查`number`是否为负数,如果是负数,则将其转换为正数,因为负数的统计与正数相同。 - 然后,使用`while`循环遍历`number`的每一位。在每次循环中,检查`number`的最低位是否等于`digit`,如果相等,则计数器`num`加1。 - 最后,将`number`除以10,去掉最低位,继续下一次循环,直到`number`变为0。 2. **主函数`main`**: - 从标准输入读取`number`和`digit`。 - 调用`CountDigit`函数统计`digit`在`number`中出现的次数。 - 输出统计结果。 ### 复杂度分析 - **时间复杂度**:$O(log_{10}n)$,其中$n$是`number`的大小。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值