Python的阶乘实现(装饰器、函数、类实现)

it2025-02-05  9

Python阶乘实现

装饰器实现普通方法实现类方法实现

题目:自然数的阶乘 n ! = 1 ⋅ 2 ⋅ 3 ⋯ n , 0 ! = 1 {n!=1 \cdot 2 \cdot 3 \cdots n, 0!=1}\\ n!=123n,0!=1

今天被要求简单实现下阶乘算法,但是没有做容错处理,现在整理一下,解决了输入为bool类型数据的bug

装饰器实现

def is_natural_num(func): """校验函数的第一个参数是否是自然数""" def call_func(*args, **kwargs): # 参数校验:判断args[0]是否是自然数 assert type(args[0]) == int and args[0] >= 0, '请输入大于等于0的整数' return func(*args, **kwargs) return call_func @is_natural_num def factorial(num: int): """求自然数的阶乘""" if num == 0: return 1 else: return num * factorial(num-1) if __name__ == '__main__': print(factorial(17))

此方法的业务逻辑分离较好,逻辑性较好

普通方法实现

def factorial(num): """求自然数的阶乘""" # 参数校验:自然数才有阶乘 assert type(num) == int and num >= 0, '请输入大于等于0的整数' def func(num): if num == 0: return 1 else: return num * func(num-1) return func(num) if __name__ == '__main__': print(factorial(17))

此方法逻辑未分开,但是实现了递归时不会多次进行数据校验,此前的方法实现较差,贴出来做个对比

类方法实现

class Factorial(object): def __init__(self, num: int): # 校验num的数据类型是否为int,并且其值是否大于等于0 assert type(num) == int and num >= 0, '请输入大于0的整数' self.num = num def __call__(self): return self.factorial(self.num) def factorial(self, num): if num == 0: return 1 else: return num * self.factorial(num-1) if __name__ == '__main__': factorial = Factorial(0) print(factorial())

旧版本判断太复杂,贴出来提醒下自己

最新回复(0)