python函数—调用函数+定义函数
抽象
函数就是最基本的一种代码抽象的方式。
调用函数
可以通过help(abs)查看abs函数的帮助信息
abs(x) : return position number # 常见报错:abs() takes exactly one argument (2 given )abs()有且仅有1个参数, 不能为两个 # TypeError: bad operand type for abs(): 'str' str是错误的参数类型 max() : return the max of the argument # max()可以接收任意多个参数,并返回最大的那个 int() ,float() ,bool(), str() ,float() #常用函数还包括数据类型转换函数,可以把其他数据类型转换为对应类型 # 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”: a = max print(a(1,2,3)) # hex()函数把一个整数转换成十六进制表示的字符串 print(hex(123)) #0x7b print(sum([1,2,3,4])) #10 这里参数要一个列表***
定义函数
Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回
def boolean_position_num(x): if x >= 0 : return True else : return False print(boolean_position_num(int(input())))
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return
def boolean_position_num(x): if x >= 0 : print('position num') else : print('not position num') # 默认return None print(boolean_position_num(int(input()))) # 10 None
命令行格式
#调用别的文件里的函数 # main.py from func import boolean_position_num print(boolean_position_num(int(input()))) # func.py def boolean_position_num(x): if x >= 0 : print('position num') else : print('not position num')
空函数
#定义一个什么事也不做的空函数,可以用pass语句 def non(): pass #pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。不加pass就会报错 if x >= 18: pass
参数检查
TypeError: my_abs() takes 1 positional argument but 2 were given : 参数数量不对
自己写的函数跟内置函数的区别为:自己写的函数很多都不能支持其他的数据类型,内置函数可以
数据类型检查可以用内置函数isinstance()实现:
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
返回多个值? 只是返回一个tuple值 Python函数返回的仍然是单一值。
用途:在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:
def return_nums(x , y): return int(x),int(y) if __name__ == '__main__': print(return_nums(1,2)) # (1 , 2)
小结
定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用return随时返回函数结果;
函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是一个tuple。
练习
ax^2+bx+c=0
from cmath import sqrt def quadratic(a, b, c): a = float(a) b = float(b) c = float(c) temp = pow(b, 2) - 4 * a * c if temp<0 : print('该方程无解') x1 = (-b + (sqrt(temp))) / (2 * a) x2 = (-b - (sqrt(temp))) / (2 * a) if temp == 0: print('该方程只有一个解') return x1 return x1, x2 if __name__ == '__main__': print('quadratic(2, 3, 1) =', quadratic(2, 3, 1)) print('quadratic(1, 3, -4) =', quadratic(1, 3, -4)) if quadratic(2, 3, 1) != (-0.5, -1.0): print('测试失败') elif quadratic(1, 3, -4) != (1.0, -4.0): print('测试失败') else: print('测试成功') ------------------------------------------------------------------------------- import cmath def quadratic(a,b,c): if not (isinstance(a,(int,float) ) and isinstance(b,(int,float)) and isinstance(c,(int,float)) ): raise TypeError('bad operation type') elif b**2-4*a*c < 0 : print('该方程没有实数解') 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 print(quadratic(3,5,1)) print(quadratic(a,c,1))