基本函数
函数基本形式:
def 函数名(参数列表):
代码块
return 返回值
示例:
def sum(a,b):
c = a + b
return c
c = sum(3, 4)
print(c)
tips:
- 函数体内部可以用return随时返回函数结果;
- 函数执行完毕也没有return语句时,自动return None;
- 函数可以同时返回多个值,但返回的是一个tuple.
递归函数
定义:在一个函数体内调用他自身,被称为函数递归。
tip: 在定义递归函数时,有一条最重要的规定:递归一定要向已知方向进行。
def fn(n):
if n == 1:
return 1
else:
return n * fn(n-1)
print(fn(5))
递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
解决递归调用栈溢出的方法是通过尾递归优化。
def fn(n):
return fn_iter(n, 1)
def fn_iter(num, product):
if num == 1:
return product
return fn_iter(num - 1, num * product)
print(fn(5))
函数的参数
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
- 默认参数:一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
- 可变参数:*args是可变参数,args接受的是一个tuple
- 关键字参数:*****kw是关键字参数,kw接收的是一个dict.
- 命名关键字参数:以分隔符*****显示,否则定义的就是位置参数
位置参数
# x为位置参数
def power(x):
return x*x
power(5)
默认参数
必选参数在前,默认参数在后,否则python解释器会报错。
多个默认参数时,调用时,可按顺序提供默认参数,也可不按顺序提供部分默认参数,但需要把参数名写上。
# n为默认参数
def power(x,n=2):
s = 1
while n> 0:
s = s*x
n = n-1
return s
power(4,2) # 等同于 power(4)
# 多个默认参数
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll('haha','F',city='Nanjing')
可变参数
可变参数允许传入0个或多个参数,在函数调用时自动组装为一个tuple。
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
nums = [1,2,3]
print(calc(*nums)) # *nums表示把num这个list的所有元素作为可变参数传进去
关键字参数
关键字参数允许传入0个或多个参数,在函数调用时自动组装为一个dict。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
extra = {'chinses':90,'math':88,'english':89}
person('Nacy',18,**extra)
# **extra表示把extra这个dict所有的key-value用关键字参数传到**kw参数,kw将获得一个dict
命名关键字参数
可传入不受限制的关键字参数。
def person(name, age, *, city, job):
print(name, age, city, job)
print(person('Jack', 24, city='Beijing', job='Engineer'))