本文仅供个人记录和复习,不用于其他用途
函数的用处
一般来说,函数有两个作用:
- 将代码分离,使整体结构清晰
- 可以直接调用函数,避免重复编写代码
调用函数
Python有很多内置函数,我们可以直接调用,具体可以查看官方文档。
这里举两个简单的例子,比如abs()
函数,这个是用于将数值转为绝对值:
>>> abs(100)
100
>>> abs(-100)
100
>>> abs(-12.34)
12.34
还有一个就是cmp(x, y)
函数,用于比较两个值的大小。如果x < y
,那么返回-1
,如果x == y
,返回0
,如果x > y
,返回1
:
>>> cmp(1, 2)
-1
>>> cmp(2, 2)
0
>>> cmp(2, 3)
-1
数据类型转换
Python内置了类型转换用到的函数,比如我们之前用到过的int()
:
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> unicode(100)
u'100'
>>> bool(1)
True
>>> bool(0)
False
函数名
学过C的都知道,函数名其实就是一个指针,指向函数体。Python也是一样,我们可以直接把函数赋值给变量,,相当于给变量起了一个名字:
>>> a = abs
>>> a(-1)
1
定义函数
Python中定义函数需要使用def
语句,依次写出函数名、括号、参数、冒号:
,然后编写函数体,使用return
返回数值:
|
|
写完之后可以调用一下这个函数,看看代码是否有误。Python的函数和其他语言的函数是一样的,运行到return
时,函数执行完毕,并将结果返回。如果没有return
语句,那么函数执行完后会返回一个None
。
空函数
如果什么都不想做,可以使用pass
语句:
|
|
那么一个空函数有什么用呢?比如你还没有想好代码怎么写,那么你可以使用pass
充当占位符,让代码可以先运行。
或者你也可以这么做:
|
|
参数检查
在调用函数时,如果参数个数不对,那么Python就会给出提示。但是如果是类型不对,那么Python就无法检查。我们可以对比一下myAbs
和abs
,如果类型错误,abs
就会给出具体的错误位置,而我们自定义的则不能。
为了自定义函数能够给与报错,我们需要对参数类型进行检查,只允许传入整数和浮点型数。数据类型检查可以使用isinstance
:
|
|
这个时候如果我们再传入其他的数据类型,那么Python就会报错:
Traceback (most recent call last):
File "def.py", line 9, in <module>
print myAbs('A')
File "def.py", line 3, in myAbs
raise TypeError('bad operand type')
TypeError: bad operand type
返回多个值
如果你的函数需要返回多个值,比如返回一个坐标,那么Python能够做到吗?答案是能:
|
|
那么我们可以得到返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0
不过你要知道,C、JAVA等语言都只能够返回一个值。所谓的多个返回值,其实大都使用数组或者类来实现的,本质上还是只能够返回一个值。Python当然也不例外:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)
你会发现返回值其实是一个tuple,而由于tuple只有1个元素时括号可以省略,多个参数可以按照次序赋值给多个变量,所以看起来是返回了多个值。
因此,请牢记,Python返回的是tuple,本质上是一个值。