函数调用:
python内置了很多有用的函数,我们可以直接调用。
要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从python的官方网站查看文档:
https://docs.python.org/3/library/functions.html#abs
也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
print(abs(100))
print(abs(-200))
print(abs(12.34))
调用函数时,如果传入的参数数量不对,会报TypeError的错误,并且python会明确告诉你abs()有且仅有一个参数;
如果传入的参数数量是对的,但是参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息;
max函数max()可以接收任意多个参数,并返回最大的那个:
print(max(1,2,5,11))
print(max(-2,3,5))
定义函数:
在python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
例:
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-10))
注:
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可简写为return
空函数:
如果想定义一个什么事也不做的空函数,可以用pass语句:
其实pass可以用作为占位符,比如还没有想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
缺少pass,代码运行就会有语法错误.
参数检查:
调用函数时,如果参数个数不对,python解释器会自动检查出来,并抛出TypeError;但是如果参数类型不对,python解释器就无法帮我们检查。
试一下my_abs和内置函数abs的差别:
>>>print(my_abs("A"))
Traceback (most recent call last):
File "C:/Users/ljz/PycharmProjects/python_stu/函数.py", line 20, in <module>
print(my_abs("A"))
File "C:/Users/ljz/PycharmProjects/python_stu/函数.py", line 15, in my_abs
if x >= 0:
TypeError: '>=' not supported between instances of 'str' and 'int'
>>>print(abs("A"))
Traceback (most recent call last):
File "C:/Users/ljz/PycharmProjects/python_stu/函数.py", line 21, in <module>
print(abs("A"))
TypeError: bad operand type for abs(): 'str'
注:
当传入了不恰当的参数时,内置函数abs会检查出参数错误,而我们定义的my_abs没有参数检查,会导致if语句出错,出错信息和abs不一样。
我们来完善一下my_abs的定义,对参数类型做检查,只允许整数和浮点数类型的参数。
数据类型检查可以用内置函数isinstance()实现:
>>> def my_abs(x):
if not isinstance(x,(int,float)):
raise TypeError("bad operand type")
if x >= 0:
return x
else:
return -x
print(my_abs("A"))
Traceback (most recent call last):
File "C:/Users/ljz/PycharmProjects/python_stu/函数.py", line 22, in <module>
print(my_abs("A"))
File "C:/Users/ljz/PycharmProjects/python_stu/函数.py", line 16, in my_abs
raise TypeError("bad operand type")
TypeError: bad operand type
转载于:https://blog.51cto.com/limingyu/2114304