1.定义函数
定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。例:
def my_abs(x): if x >= 0: return x else: return -x
空函数:
def nop(): pass
pass语句什么也不做,可做为占位符
2.函数参数
A. 默认参数
参数设置支持默认参数,即在调用函数的时候,如果没有输入有默认值的参数,函数依旧可以执行。
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
如上面定义的函数,如果调用时写 power(3), 默认做的是平方。
注意事项:
一 必选参数在前,默认参数在后
二 如何设置默认参数。
三 默认参数必须指向不变对象!
下面举例说明第三点
在设置默认参数的时候,要注意,如果默认值为L=[],函数内又改变了它的值,如在尾部添加END,那么下次调用,会在这基础上再添加END,就有bug。例:
def add_end(L=[]): L.append('END') return L
>>> add_end() ['END'] >>> add_end() ['END', 'END']
因为Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
改进:
def add_end(L=None): if L is None: L = [] L.append('END') return L
B. 可变参数
如果要想参数个数可以改变,第一想法是参数是list或tuple类型,则调用函数的时候,需要以list或tuple的形式传入。
def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
>>> calc([1, 2, 3]) 14 >>> calc((1, 3, 5, 7)) 84
利用可变参数就可以直接将数字传入,具体改进为,在参数前加 * ,例子见下:
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
>>> calc(1, 2) 5 >>> calc() 0
这里的调用就无需再组成list再调用,如果输入参数是列表,也无需一个一个输入,可以这样调用:
>>> nums = [1, 2, 3] >>> calc(*nums) 14
C. 关键字参数
关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'} >>> person('Jack', 24, **extra) name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}函数内对kw进行改动,不会改变函数外的。
命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数,
命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
def person(name, age, *, city, job): print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer') Jack 24 Beijing Engineer调用时,命名关键字参数必须传入参数名。即city,job
。
D. 参数类型检查:
可以在函数内对参数类型进行检查,以便出错时候方便查看出错信息。
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x数据类型检查可以用内置函数 isinstance()
函数介绍:
isinstance(obj, class_or_tuple, /)
Return whether an object is an instance of a class or of a subclass thereof.A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
or ...`` etc.
3.调用函数
Tip: 可以使用 help(函数名) 看帮助信息。
部分常用函数:abs(); max(); hex(); int();类型转换
—————————————————
本学习笔记很多例子引用于廖雪峰的网站。