函数(二)

函数第二课

1.函数的返回值

• 返回值就是函数执行以后返回的结果
• 通过return来指定函数的返回值
• return后面可以跟任意对象,返回值甚至可以是一个函数
return 有几个比较重要的特点:

  • 只写return表示没有返回值,它的返回值是None
  • return可以终止函数的执行,即return之后的代码不会再被执行,函数会返回那个return值

2.文档字符串

文档字符串就是对函数进行注释以方便使用者使用

 def sum(*args, **kwargs): # real signature unknown
    """
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers
    
    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.
    """
    pass

这是python内置函数中sum()函数,中间的三引号括住的内容就是文档字符串

3. 函数的作用域

python中有两种作用域:
全局作用域

  • 1.全局作用域在程序执行时创建,在程序执行结束时销毁
  • 2.所有函数以外的区域都是全局作用域
  • 3.在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问
    函数作用域
  • 1.函数作用域在函数调用时创建,在调用结束时销毁
  • 2.函数每调用一次就会产生一个新的函数作用域
  • 3.在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问
    我们可以通过global来讲一个变量转换为全局变量

4. 命名空间

• 命名空间实际上就是一个字典,是一个专门用来存储变量的字典
• locals()用来获取当前作用域的命名空间
• 如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()
   则获取函数命名空间
• 返回值是一个字典

5. 递归函数

• 递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题
• 递归式函数有2个条件:
基线条件
问题可以被分解为最小问题,当满足基线条件时,递归就不执行了
递归条件
可以将问题继续分解的条件
比如:我们在算n的阶乘时:

#n!=n*(n-1)!
#n=1
#第一个注释是递归条件
#第二个注释是基线条件

作业

作业一,判断是否为闰年
def leap_year(year):
    if year%4==0 and year%100!=0:
        print(f'{year} is leap year')
    elif year%400==0:
        print(f'{year} is leap year')
    else:
        print(f'{year} is common year')
while True:
    leap_year(int(input()))
    print('是否继续,按y继续,按n退出')
    response=input()
    if response=='y':#给循环加上限制条件,否则为死循环
        break
    elif response=='n':
        continue
    else:
        print('错误')
        break
作业二,猴子吃桃

有若干桃子,猴子每天吃一半多一个,第十天剩一个,问第一天有多少桃子?
分析

  • 第十天的时候剩1个
  • 第九天的时候应该剩4个
  • 以此类推,求出第一天的桃子树
  • 我们算的是第n+1天的桃子数,第n天的桃子数*2+2就是所求,依次类推,基线条件就是第十天的桃子数。中间的推导只是简单的数学运算。
#用函数递归的方法代码非常简洁
def monkey(n):#第n天剩下的桃子个数
    if n==10:
        return 1
    else:
        return 2*monkey(n+1)+2
print(monkey(1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值