调用函数
python内置了很多有用的函数,我们可以直接调用。
要调用一个函数,需要知道函数的名称和参数,可从python官方网站文档 查看python的内置函数(Built-in Function).
例如 求绝对值的函数abs
,只有一个参数,可从文档查看,也可在交互式命令行通过help(abs)
看abs
函数的帮助信息
help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
调用abs
函数:
abs(-2.718218)
2.718218
python内置的常用函数还包括数据类型转换函数,比如int()
汉画素可以把其他数据类型转换为整数:
print(int('123'))
print(int(12.34))
123
12
float('12.34')
12.34
str(1.23)
'1.23'
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
a = abs #变量a指向abs函数
a(-1)
1
函数定义
定义函数使用def
语句,一次写出 函数名、括号、括号中的参数和冒号:
; 然后在缩进快中编写函数体,函数的返回值用return
语句返回。
自定义一个求绝对值的函数my_abs
:
# -*- coding: utf-8 -*-
def my_abs(x):
if x>=0:
return x
else:
return -x
print(my_abs(-2.71828))
2.71828
函数体内部的语句在执行时,一旦执行到return
时,函数就执行完毕,并将结果返回
空函数
如果想定义一个什么事也不做的空函数,可以用pass
语句,pass
可以用来作为占位符。
def nop():
pass
pass
还可用于其他语句,例如:
age = input('please input your age:')
age = int(age)
if age >= 18:
pass
please input your age:18
此处若缺少了pass
,代码运行将有语法错误
参数检查
调用函数时,如果参数个数不对,python解释器会自动检查出来,并抛出TypeError
;
但如果参数类型不对,python解释器就无法检查。
传入不恰当参数时,内置函数abs
会检查出参数错误,而我们定义的my_abs
无参数检查,会导致if
语句出错,出错信息和abs
不一样。所以这个函数定义不够完善。
修改my_abs
的定义,对参数类型做检查,只允许整数和浮点型参数。数据类型检查可以用内置函数isinstance()
实现:
abs('A')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-6eee3e7a739d> in <module>()
----> 1 abs('A')
TypeError: bad operand type for abs(): 'str'
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
my_abs('A')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-3a4b4137ec2c> in <module>()
----> 1 my_abs('A')
<ipython-input-20-c24a51d84b1e> in my_abs(x)
1 def my_abs(x):
2 if not isinstance(x, (int, float)):
----> 3 raise TypeError('bad operand type')
4 if x >= 0:
5 return x
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 / 3)
print(x, y)
130.0 48.03847577293369
其实这是一种假象,python函数返回的仍然是单一值:
r = move(100, 100, 60, math.pi / 3)
print(r)
(130.0, 48.03847577293369)
实时上,返回值是一个tuple,但在语法上,返回一个tuple可以省略,而多个变量可以同时接收一个tuple,按位置赋给对应的值;
所以,python的函数返回多值,其实就是返回一个tuple.
小结
- 定义函数时,需要确定函数名和参数个数;
- 如果有必要,可以先对参数的数据类型做检查;
- 函数体内部可以用
return
随时返回函数结果; - 函数执行完也没有
return
语句时,自动return None
; - 函数可以同时返回多个值,但其实就是一个tuple.
参考文献:
笔记内容多源于廖雪峰python教程