Python查缺补漏2
Python查缺补漏2
函数名也是变量
在Python中,函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,类似于C++的函数指针:
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1
空函数
如果想定义一个什么事也不做的空函数,可以用pass
语句:
def nop():
pass
pass
可以用来作为占位符,当还没想好怎么写函数的代码时,就可以先放一个pass
,让代码能跑起来
类型检查
内置函数isinstance()
用于检查一个对象是否是指定类或其子类的实例。语法如下:
"""
object 要检查的对象
classinfo 类型或类型元组
如果 object 是该类型或其子类的实例,则返回 True,否则返回 False
"""
isinstance(object, classinfo)
因此,可以用内置函数isinstance()
实现数据类型检查:
>>> isinstance(1, (int, float))
True
>>> ch = 'a'
>>> isinstance(ch, (int, float))
False
>>> isinstance(0.2, (int, float))
True
函数返回多个值
函数可以返回多个值,可以用多个变量同时进行接收
>>> def func(a, b):
... return a, b
...
>>> c, d = func(3, 5)
>>> print(c, d)
3 5
然而这只是一种假象,Python函数的返回值仍然是单一值,只不过当返回值增加时,Python将返回值包装成了元组,然后返回这个元组
>>> print(func(6, 9))
(6, 9)
可以看到,其实返回值是一个 tuple,但是,在语法上,返回一个 tuple 可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值
函数默认参数
看一下下面这个例子
>>> def add_end(L=[]):
... L.append('END')
... return L
...
>>> add_end()
['END']
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']
造成这种现象的原因在于,默认参数L
也是一个变量,它指向对象[]
。每次调用函数时,如果改变了L
指向的内容,那么下次调用时,默认参数的内容就变了,不再是函数定义时的[]
了
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
另外,要修改上述例子,可以用None
这个不变对象来实现:
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L