# 函数 # 计算个圆的面积 r1 = 12.34 r2 = 9.08 r3 = 73.1 # s1 = 3.14 * r1 * r1 s2 = 3.14 * r2 * r2 s3 = 3.14 * r3 * r3 # 调用函数 # abs() 求绝对值 print(abs(-20)) # 调用函数的时候,如果传入的参数数量不对,会报TypeError的错误 # print(abs(1,-1)) # print(abs('abc')) # max() 返回最大的参数 print(max(2,3,1,-5)) # 数据类型转换 int() float() str() bool() print(int('123')) print(float('12.34')) print((str(1.23))) print(bool(1)) print(bool('a')) print(bool('')) print(bool(None)) # 函数别名 a = abs print(a(-1)) # hex()把整数转换为十六进制 n1 = 255 n2 = 1000 print(hex(n1)) print(hex(n2)) # 定义函数 def 函数名(参数): # 在缩紧块中编写函数;返回值用 return def my_abs(x): if x >= 0: return x else: return -x print(my_abs(-2333)) # 如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。 # return None可以简写为return。 # 回到刚开始,计算圆的面积 import math def area(r): s = 3.14 * r * r return s print(area(r1),s1) print(area(r2),s2) print(area(r3),s3) # 空函数 # 如果想定义一个什么事也不做的空函数,可以用pass语句 # 实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。 def nop(): pass # pass还可以用在其他语句里,比如: # if age >= 18: # pass # 参数检验 调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError # print(my_abs(1,2)) # TypeError: my_abs() takes 1 positional argument but 2 were given # 当传入了不恰当的参数时,内置函数abs会检查出参数错误,而我们定义的my_abs没有参数检查,会导致if语句出错 # print(my_abs('z')) # TypeError: '>=' not supported between instances of 'str' and 'int' # 使用isinstance()检查数据类型 def my_abs2(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x print(my_abs2(-233)) # print(my_abs2('z')) # TypeError: bad operand type # 返回多个值 import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny x, y = move(100, 100, 60, math.pi / 6) print(x, y) # 但其实这只是一种假象,Python函数返回的仍然是单一值,是一个tuple(在语法上,返回一个tuple可以省略括号) r = move(100, 100, 60, math.pi / 6) print(r) # 练习: 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2 + bx + c = 0 def quadratic(a, b, c): x1 =(-b + math.sqrt(b*b-4*a*c)) / (2*a) x2 =(-b - math.sqrt(b*b-4*a*c)) / (2*a) return x1, x2 a1 = quadratic(2,3,1) a2 = quadratic(1,3,-4) if a1 != (-0.5, -1.0): print('测试失败') elif a2 != (1.0, -4.0): print('测试失败') else: print(('测试成功'))