python虚函数_Python——函数(2.2)

前面已经讲了5个函数今天准备再讲几个函数准备结束这一小章节,这次知识点内容可能比较多,请同学们认真阅读。

6.自定义虚函数详解:

我们先写一个计算x2的函数:

def chen(x):

return x * x

对于chen(x)函数,参数x就是一个位置参数。

当我们调用chen函数时,必须传入有且仅有的一个参数x

对于这个函数的扩展:

def chen(x, n): #注意这是自定义函数用来求x的n次方

s = 1

while n > 0:

n = n - 1

s = s * x

return s

>>> chen (2,2)

4 #这是输出结果

这个写法是使用了原来的while语句所以输入时必须输入两个参数,不然会出现错误。

现在写一个关于注册类的自定义函数:

>>> def chen(sex,name,age=20,weight='50kg'):

... print('name',name)

... print('sex',sex)

... print('age',age)

... print('weight',weight)

...

>>> chen('nan','zhuan') #输出结果

name zhuan

sex nan

age 20

weight 50kg

7.递归函数

def fact(n): #定义一个函数fact

if n==1: #if循环结构 判断n是否等于1

return 1 #当等于1是输出1

return n * fact(n - 1) #否则输出这个函数

使用递归函数要注意防止栈溢出,计算机中函数递归调用是通过栈(stict)这种数据结构实现的每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试fact(1000):

File "", line 4, in fact

File "", line 4, in fact

File "", line 4, in fact

File "", line 4, in fact

File "", line 4, in fact

File "", line 4, in fact

RuntimeError: maximum recursion depth exceeded

在这里先讲解一下什么是尾递归:尾递归就是说在函数返回的时候在调用本身,并且,return语句不可以包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧。

解决递归调用栈溢出的方法是通过尾递归优化。事实上尾递归和循环递归的效果是一样的,所以,把循环看作一种特殊的尾递归函数也是可以的。

def fact(n):

return fact_iter(n, 1)

def fact_iter(num, product):

if num == 1:

return product

return fact_iter(num - 1, num * product)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值