2020-12-03

函数中

1. 函数的返回值

1.返回值就是函数执⾏以后返回的结果
2.通过return来指定函数的返回值
3.return后⾯可以跟任意对象,返回值甚⾄可以是⼀个函数

2. ⽂档字符串

1.help()是Python中内置函数,通过help()函数可以查询Python中函数的⽤法
2.在定义函数时,可以在函数内部编写⽂档字符串,⽂档字符串就是对函数的
  说明

3. 函数的作⽤域

1.作⽤域(scope)
2.作⽤域指的是变量⽣效的区域
3.在Python中⼀共有两种作⽤域
  (1)全局作⽤域
  (2)全局作⽤域在程序执⾏时创建,在程序执⾏结束时销毁
  (3)所有函数以外的区域都是全局作⽤域
  (4)在全局作⽤域中定义的变量,都是全局变量,全局变量可以在程序的任意
     位置进⾏访问
  (5)函数作⽤域
  (6)函数作⽤域在函数调⽤时创建,在调⽤结束时销毁
  (7)函数每调⽤⼀次就会产⽣⼀个新的函数作⽤域
  (8)在函数作⽤域中定义的变量,都是局部变量,它只能在函数内部被访问 

4. 命名空间

1.命名空间实际上就是⼀个字典,是⼀个专⻔⽤来存储变量的字典
2.locals()⽤来获取当前作⽤域的命名空间
3.如果在全局作⽤域中调⽤locals()则获取全局命名空间,如果在函数作⽤域中
  调⽤locals()则获取函数命名空间
4.返回值是⼀个字典

5. 递归函数

1.递归是解决问题的⼀种⽅式,它的整体思想,是将⼀个⼤问题分解为⼀个个
  的⼩问题,直到问题⽆法分解时,在去解决问题
2.递归式函数有2个条件
  (1). 基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不
       执⾏了
  (2). 递归条件 可以将问题继续分解的条件

1. 函数的返回值

# 函数的返回值可以是任意类型的对象
# 当你不写return语句和只写一个return的时候,返回的是None


# def fun(*args):
#     # res = 0
#     # for i in args:
#     #     res += i
#
#     # print(res)
#     # return 123
#     # return 'abc'
#     # return [1, 2, 3]
#     def fun1():
#         print(111)
#
#     return
#
#
# res = fun()
#
# print(res)


# return后的代码都不会执行,return一旦执行,函数自动结束
def fun2():
    # print(111)
    # return
    # print('hahah')
    for i in range(5):  # range(0, 5, 1)  左闭右开型
        if i == 3:
            # break   用来退出当前循环
            # continue  用来跳过当次循环
            return
        print(i)
    print('循环执行完毕')


fun2()

# fun 是函数名(函数对象)  打印fn就是打印函数对象的地址
# fun() 是调用函数  打印fun()就是在打印fun()的返回值


2. ⽂档字符串

def fun(a, b, c):
    """
    这是一个文档字符串的示例
    这个函数是做什么用的。。。。

    :param a: 作用  类型  默认值
    :param b: 作用  类型  默认值
    :param c: 作用  类型  默认值
    :return:  需不需要返回值
    """
    return 123

# help(fun)
help(print)


3. 函数的作⽤域

# 函数内部的变量只能在函数内部访问,不能再函数外部访问
b = 456

def fun():
    global a  # 声明a是全局变量
    a = 123
    print('函数内部 a = ', a)
    print('函数内部 b = ', b)


    def fun1():
        print('函数fun1内部 a = ', a)
        print('函数fun1内部 b = ', b)

    fun1()

fun()

print('函数外部 a = ', a)
print('函数外部 b = ', b)

4. 命名空间

# locals()用来获取当前作用域的命名空间,返回一个字典

a = 123
b = 456
c = 789
# space = locals()
# space['d'] = 100
# print(space)

def fun():
    a = 1
    b = 2
    c = 3
    # space = locals()
    space = globals()
    print(space)

fun()

5. 递归函数

# 求10的阶乘
# 1!= 1
# 2!= 2*1
# 3!= 3*2*1
# 10!= 10*9*8*7*6*5*4*3*2*1
# print(10*9*8*7*6*5*4*3*2*1)
#
#
# res = 1
# for i in range(1, 11):
#     res *= i
#
# print(res)
#
#
# def fun(n):
#     res = 1
#     for i in range(1, n+1):
#         res *= i
#
#     return res
#
#
# res = fun(10)
# print(res)

# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚讲故事:
# 。。。。。。。。。。
# 无穷递归
# 递归的简单李建就是自己引用自己
# 递归式的函数, 在函数中自己调用自己

# 无穷递归
# def fun():
#     fun()
# fun()

# 递归函数的两个条件
# 1. 基线条件  问题可以被分解为最小的问题,当满足基线条件的时候,再去解决问题  (设定的最大递归深度)
# 2. 递归条件  将问题继续分解的条件
# 10!            n!          fun(n)   是求n的阶乘的函数
# 10! = 10 * 9!  n*(n-1)!    n * fun(n-1)   求n-1的阶乘的函数
# 9! = 9 * 8!
#.....
# 2! = 2*1!
# 1! = 1


def fun(n):  # fun求n的阶乘
    # 基线条件
    if n == 1:
        return 1

    # 递归条件
    return n * fun(n-1)


res = fun(10)  # res = 10*fun(9)/10*9*fun(8)/
print(res)

6. 递归函数练习

# 求任意数的任意次幂运算
# n ** m   10 ** 5
# 10 * 10 ** 4
# 。。。。。
# 10 ** 1


# def fun(n, m):   # fun是求n的m次幂的结果
#     if m == 1:
#         return n
#     return n * fun(n, m-1)
#
#
# res = fun(10, 5)
# print(res)


# 定义一个函数, 用来检验一个字符串是不是一个回文字符串,如果是返回True,不是返货False
# abcdefghgfedcba
# bcdefghgfedcb
# cdefghgfedc
# h

def fun1(s): # fun1 判断是否是回文字符串
    if len(s) < 2:
        return True
    elif s[0] != s[-1]:
        return False
    return fun1(s[1:-1])


print(fun1('abcdefggfedca'))

def fun():
    a = 10
    def fun1():
        nonlocal a

第九讲作业

  1. ⽤函数实现⼀个判断⽤户输⼊的年份是否是闰年的程序
    1.能被400整除的年份
    2.能被4整除,但是不能被100整除的年份
    以上2种⽅法满⾜⼀种即为闰年
def fun():
 a = int(input('请输入年份'))
 if (a//400) or (a//4 and a/100) :
    print('是润年')
 else:
      print('是平年')
fun()

  1. 猴⼦吃桃问题(递归):
    猴⼦第⼀天摘下若⼲个桃⼦,当即吃了⼀半,还不瘾,⼜多吃了⼀个。第
    ⼆天早上⼜将剩下的桃⼦吃掉⼀半,⼜多吃了⼀个。以后每天早上都吃了前
    ⼀天剩的⼀半零⼀个。到第10天早上想再吃时,⻅只剩下⼀个桃⼦了,求第
    ⼀天共摘了多少桃⼦?
def fun(n):
 if n>10 or n<1:
   return
 elif  n==10:
   return 1
 else:
   return (fun(n+1)+1)*2
print(fun(1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值