python3-函数

基本函数

函数基本形式:

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'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值