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
posted @ 2023-05-24 20:13  TNTksals  阅读(14)  评论(0编辑  收藏  举报