python
import math
def quadratic(a,b,c):
if not isinstance(a+b+c,(int,float)):
raise TypeError('bad operand type')
elif b**2-4*a*c<0:
raise TypeError('no real solver')
else:
x1=(-b+math.sqrt(b**2-4*a*c))/(2*a)
x2=(-b-math.sqrt(b**2-4*a*c))/(2*a)
return x1,x2
#昨天的一元二次方程成功解决,果然是各种细节
def power(x,n=2):
s=1
while n>0:
n=n-1
s=s*x
return s
print('power(5)=',power(5))
#为什么默认参数不能放在必选参数前面
#默认参数必须指向不变对象
关键字参数调用方式和注意事项很多,要多看几遍,好记性不如烂笔头,more coding
def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num==1:
return 1
return fact_iter(num-1,num*product)
尾递归优化避免栈溢出,python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题