Python函数
Posted zhangcd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python函数相关的知识,希望对你有一定的参考价值。
- 定义函数
- 函数的参数
- 递归函数
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋值给一个变量,相当于给这个函数起了一个“别名”。
>>> a = abs # 变量a指向abs函数 >>> a(-1) # 所以也可以通过a调用abs函数 1
定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop(): pass
pass还可以用在其他语句里,比如:
if age >= 18: pass
# 缺少了pass,代码运行就会有语法错误
返回多个值
Python返回的任然是单一值,返回值是一个tuple。但是在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
函数的参数
Python函数除了正常的必选参数外,还可以使用默认参数、可变参数和关键字参数。
# 当调用power(5)时,相当于调用power(5, 2) # 而对于n > 2的其他情况,就必须明确地传入n,比如power(5, 3) def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
默认参数使用不当的情况:当正常调用时,结果是对的;当使用默认参数调用时,一开始结果是对的,但是当再次调用add_end()时,结果就不对了。
默认参数是[],但是函数似乎每次都“记住了”上次添加了‘END‘后的list。
原因如下:Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
注意:默认参数必须指向不变对象。
>>> def add_end(L=[]): ... L.append(‘END‘) ... return L ... >>> add_end([1, 2, 3]) [1, 2, 3, ‘END‘] >>> add_end([‘x‘, ‘y‘, ‘z‘]) [‘x‘, ‘y‘, ‘z‘, ‘END‘] >>> add_end() [‘END‘] >>> add_end() [‘END‘, ‘END‘] >>> add_end() [‘END‘, ‘END‘, ‘END‘]
可变参数就是传入的参数个数是可变的。
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,在调用该函数时,可以传入任意个参数,包括0个参数。
如果已经有一个list或者tuple,要调用一个可变参数时,可以在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去。
>>> def calc(*numbers): ... sum = 0 ... for n in numbers: ... sum = sum + n * n ... return sum ... >>> calc(1, 2) 5 >>> calc() 0
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
>>> def person(name, age, **kw): ... print(‘name:‘, name, ‘age:‘, age, ‘other:‘, kw) ... >>> person(‘Mike‘, 30) name: Mike age: 30 other: {} >>> person(‘Bob‘, 29, city=‘Beijing‘) name: Bob age: 29 other: {‘city‘: ‘Beijing‘} >>> person(‘Adam‘, 23, gender=‘M‘, job=‘Engineer‘) name: Adam age: 23 other: {‘gender‘: ‘M‘, ‘job‘: ‘Engineer‘}
以上是关于Python函数的主要内容,如果未能解决你的问题,请参考以下文章