python初学一(函数二)

八、函数中变量的作用域:

        1、全局变量与局部变量:

                      (1) 同一级的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响

                      (2)  定义在函数内部的变量拥有一个局部作用域,定义在函数外的相当于这个函数的全局作用域。局部作用域

                                 可以访问全局作用域,反之不行。

         2、局部作用域修改全局变量:

                  (1)可变数据类型:对于可变类型的全局变量来说,要在函数中修改可以不使用global声明。

                  (2)不可变数据类型:对于不可变类型的全局变量来说,要在函数中修改需要global声明。

a = 1
def func():
    global a
    a = 2
    print(a)       2
func()
print(a)           2

九、匿名函数(lambda表达式):

      1、lambda 来创建匿名函数规则

                                     lambda匿名函数的表达式规则是:lambda  行参列表: 表达式

              lambda只是一个表达式,函数体比def简单很多

              lambdaJavascript不同的是,python中匿名函数与非匿名函数需要使用不同的语法

              ●lambda的主体是一个表达式,而不是一个代码块,所以不能写太多的逻辑进去。

              ●lambda函数拥有自己的命名空间,且不能访问自有 型参列表 之外或全局命名空间里的参数。

              ●lambda定义的函数的返回值就是表达式的返回值,不需要return语句

              ●lambda表达式的主要应用场景就是赋值给变量、作为参数传入其它函数

        2、与列表解析混合实例:

                   注意:列表解析属于表达式,其得到的结果是列表,列表解析并不是函数。

list1 = [1,2,3,4,5,6,7]
func1 = lambda list:[i for i in list if i > 3]   # 赋值函数名
func1(list1)              #  没有结果 ,需要打印返回值
print(func1(list1))         #  [4, 5, 6, 7]


列表解析:
print([i for i in list if i > 3])          #  [4, 5, 6, 7]

             

十、递归函数:

      1、特性:

  •                      (1)递归函数本质:一句话,自己调用自己 并且  等待 最深层 的 返回值。
  •                      (2)递归函数的适用场景 :大量 动态次数 递进式 重复代码
  •                      (2)递归函数一定有极限值。
  •                      (3)递归函数倒着来计算极限值(第一项)。

      2、简单例子:

                   

       3、代码:

题目:求未知层数的嵌套列表中所有元素的和:
list1 = [1,2,3,5,[1,2,3,[10,10,[3,4,5],10],4],6,7]
def list_sum(list_):
    num = 0
    for once in list_:
        if type(once) == list: 
            num += list_sum(once)    -------------- 递归下一层并等待返回值
        else:
            num += once
    return num
print(list_sum(list1))
================================== 斐波那契数列 =====================================================
def feibo(day):
    if day == 1:
        return 1
    if day == 2:
        return 1
    return feibo(day -1) + feibo(day -2)
# print(feibo(9))
list1 = [feibo(x) for x in range(1,11)]   -------- 列表解析
----------------- 返回值解析---------
return feibo(day -1) + feibo(day -2)
feibo(5) = feibo(4) + feibo(3) >>>>> feibo(3) + feibo(2) + feibo(2) + feibo(1) >>>
feibo(2) + feibo(1) +  feibo(2) +  feibo(2) + feibo(1)  == 5  即找到最里面的return值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值