精华内容
下载资源
问答
  • 一、函数返回值  说到返回值,相信大家肯定都认识,没错,就是return。  所谓返回值可以这样理解:函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回。  那具体怎么用呢?接着往下...

    一、函数返回值

      说到返回值,相信大家肯定都认识,没错,就是return。

      所谓返回值可以这样理解:函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回。

      那具体怎么用呢?接着往下看: 

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    # write by congcong
    
    # return 表示一个程序的结束,他可以返回任意的元素,列表或字典
    def stu_info(name,age,course):
        print(name,age,course)
        if age > 18:
            return True
        else:
            return False
    
    stu_return = stu_info('hope',19,'life')
    print(stu_return) # 输出:True
    
    def stu_info(name,age,course):
        print(name,age,course)
        return 'good','work'
        return 0 #不执行
    
    stu_return = stu_info('hope',19,'life')
    print(stu_return) #输出 ('good', 'work') ,中间逗号分隔时返回转为元组,第二个连续return不执行

     注意:

      1、函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束。

      2、如果未在函数中指定return,那这个函数的返回值为None。

     怎么样,这回不敢小看我了吧!

     

    二、作用域

      作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

      还可以结合函数这么理解:

          python中函数就是一个作用域,局部变量放置在其作用域中代码完成后,作用域便生成了,作用域链向上查找。

      看代码:

    # -*-coding:utf-8-*-
    
    age = 21
    def func1():
        age = 19
        print('func1输出:',age) # 输出:19
        def func2():
            print('func2输出:',age) # 输出:19
        return func2  # 返回函数名
    
    val = func1()  # 调用func1并将返回值赋给变量val,val = func2
    print(val)  # 输出:<function func1.<locals>.func2 at 0x000002CE667298C8>
    val() # 等于调用func2,返回函数定义处执行
    print('全局输出:',age)  # 输出:21

     

    三、函数局部变量和全局变量

      定义:

        在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

      区别:

        1、全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。

        2、当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。

      注意:

        在函数内部,可以引用全局变量;如果全局和局部都有一个变量,函数查找,由内而外,局部没有,再到全局找

      看实例:

    #-*- coding:utf-8 -*-
    
    name_out = 'daydayup'
    
    def change_name():
        # name_in = 'dayup' # 局部变量
        # print('内部-》',name_in,id(name_in))  #内部定义时,优先调用,此时输出:dayup  1997485691096
        print(name_out) # 内部未定义时,便调用函数外面的
    
    change_name()
    print('外部-》',name_out,id(name_out)) #输出:外部-》 daydayup   1997485709552

      再看一个关于函数内部修改列表的实例:

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    # write by congcong
    ''''''
    names = ['dream','hope','life']
    
    #整体修改无法实现,但删除可以实现
    def change_name():
       # del names[1] # 此处会报错,不能使用del删除列表元素,如此会修改全局变量names
        names = ['Dream','Poem'] # 整体赋值并未修改全局,除非用global声明names
        print(names)  #输出:['Dream', 'Poem']
    
    change_name()
    print(names)  #输出:['dream', 'hope', 'life']
    
    
    #修改内部元素,可以实现,例如列表,字典,集合,元祖中的列表,类,对象等,但数字,字符串,不行
    def change_name():
        names[-1] = 'poem'
        print(names)  #输出:['dream', 'hope', 'poem']
    
    change_name()
    print(names) #输出:['dream', 'hope', 'poem']

      那么函数里只能定义局部变量吗?

      当然,但是一般不推荐使用,只能说慎用。看下面的实例:

    #-*- coding:utf-8 -*-
    
    name = 'life'
    def change_name():
        global name     #定义全局变量
        name = 'poem'
        print('函数里面-》',name) #输出:函数里面-》 poem
    
    change_name()
    print('函数外面-》',name) #输出:函数外面-》 poem

       在函数里修改了全局变量,当函数有很多个的时候,就会很蒙逼了(再次友情提示)。

     

     

      

     

    转载于:https://www.cnblogs.com/schut/p/8415453.html

    展开全文
  • 递归函数Python实现决策树算法中出现过,这里记录下关于递归函数return的理解,以及递归函数的执行流程 假如有一个列表[4, [3, [2, [1]]]],现在要你计算这个列表里所有数字的和,该怎么实现呢? 先遍历最外面的...

    递归函数在Python实现决策树算法中出现过,这里记录下关于递归函数return的理解,以及递归函数的执行流程

    假如有一个列表[4, [3, [2, [1]]]],现在要你计算这个列表里所有数字的和,该怎么实现呢?

    先遍历最外面的列表,如果是数字,就累加,如果是列表,就继续遍历这个列表,这个列表里面的元素是数字,就累加,如果是列表,则继续遍历…遍历完最后一个数字后,将层层递归函数的累加值,原路返回,层层return出去,期间每层递归函数return的累加值需要和上一层递归函数的累加值相加,最终,函数终止时return的累加值就是我们需要的所有列表内数字之和了,下面是示意图:

    下面是代码的实现,代码比较简单,就是程序内部逻辑的执行流程比较难懂,需要知道的是递归函数的return不是返回一个值然后程序结束,而是返回一个值到上一层的递归函数,直到return到最外层,也就是第一次执行的递归函数时,程序终止,为了验证这个逻辑,可以将下面代码中的注释打开,然后运行,会发现依次打印出了1,3,6,10,这个结果和上面的图示流程吻合

    data = [4, [3, [2, [1]]]]
    
    def sum_list_num(data):
        list_num = 0
        for i in data:
            if isinstance(i, list):
                list_num += sum_list_num(i)
            else:
                list_num += i
        # print(list_num)
        return list_num
    
    if __name__ == '__main__':
        print(sum_list_num(data))
    

    下面看个复杂的,用递归的方法算出决策树的层数,决策树如下图所示:在这里插入图片描述
    算法逻辑:

    1.从第一个判断节点开始,最大层数置为0,遍历该判断节点下的所有子节点;

    2.如果子节点是叶子节点,那么,当前层数记为1,最大层数和当前层数中,较大的值置为最大层数,然后遍历下一个子节点;

    3.如果子节点为判断节点,那么,重复1的操作;

    4.如果当前遍历的是叶子节点,且是最后一个,那么,递归结束,将值层层return回上层函数,直至最开始的递归函数层,程序终止

    代码如下

    data = {'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: {'fin': {0: 'no', 1: 'yes'}}}}, 1: {'warm blooded': {0: {'gill': {0: 'no', 1: {'jaw': {0: 'no', 1: 'yes'}}}}, 1: 'no'}}}}}}
    
    def get_tree_depth(my_tree):
        max_depth = 0
        my_tree = list(my_tree.values())[0]
        for value in my_tree.values():
            this_depth = 1
            if isinstance(value, dict):  # 字典,即节点,需要进行一次递归
                r_max_depth = get_tree_depth(value)
                # print(r_max_depth, this_depth)
                this_depth += r_max_depth
            # print(this_depth, max_depth)
            max_depth = max(this_depth, max_depth)
        # print(max_depth)
        return max_depth
    
    if __name__ == '__main__':
    	print(get_tree_depth(my_tree))
    

    程序内部逻辑执行流程图:
    在这里插入图片描述
    可以将注释打开,查看输出,配合流程图理解内部逻辑的执行过程

    展开全文
  • Python 函数知识汇总

    2020-08-16 18:21:48
    Python 函数知识汇总 1. 函数理解和定义 ① 是什么 函数是一段具有特定功能、可重用的语句组,是一种功能的抽象。 ② 作用 降低编程难度和代码复用 ③ 怎么用 def <函数名>(<参数(0个或多个)>): <...

    1. 函数的理解和定义

    ① 是什么 函数是一段具有特定功能、可重用的语句组,是一种功能的抽象。
    ② 作用 降低编程难度和代码复用
    ③ 怎么用
    def <函数名>(<参数(0个或多个)>):
    <函数体>
    return <返回值>

    说明:
    -函数定义时,所指定的参数是一种占位符
    -函数定义后,不经调用,不会被执行
    -函数定义时,参数是输入、函数体是处理、结果是输出(IPO)

    2. 函数的使用及调用过程

    调用:运行函数代码的方式
    调用时要给出实际参数,替换定义中的参数
    调用后得到实际参数运行的返回值

    3. 函数的参数传递

    ① 无参数
    函数可以无参数,但定义时括号不可省略
    ② 可选参数
    函数定义时可以为某些参数指定默认值,构成可选参数(即调用函数时,可以不提供的参数)
    注意:Python强制约定所有可选参数必须放在必选参数之后
    例:

    def fact(n,m=1):
        s = 1
        for i in range(1,n+1):
            s *= i
        return s//m
    
    a = fact(4)
    print(a)
    
    b = fact(4,2)
    print(b)
    

    ③ 可变参数
    格式

    def <函数名>(<参数>,*b):
    <函数体>
    return <返回值>

    def fact(n,*b):
        s = 1
        for i in range(1,n+1):
            s *= i
        for item in b:
            s *= item
        return s
    
    a = fact(10,3)
    print(a)
    b = fact(10,3,5,8)
    print(b)
    

    ④ 参数传递的两种方式
    默认:按照位置传递
    另:按照名称传递

    def fact(n,m=1):
        s = 1
        for i in range(1,n+1):
            s *= i
        return s//m
    
    a = fact(10,5)#位置传递
    print(a)
    b = fact(m=5,n=10)#名称传递
    print(b)
    

    4. 函数的返回值

    函数可以返回0个或多个结果
    -return后面可以不加任何返回信息,也可以不使用return

    def fact(n,m=1):
        s = 1
        for i in range(1,n+1):
            s *= i
        return s//m,n,m
    
    a,b,c = fact(10,5)
    print(a,b,c)
    d = fact(10,5)
    print(d)
    输出
    725760 10 5
    (725760, 10, 5) (该类型为元组类型)
    

    5. 局部变量和全局变量

    全局变量:函数之外的变量
    局部变量:函数内部的变量

    记住如下两条规则:

    ① 局部变量和全局变量是不同变量
    -局部变量是函数内部的占位符,可能与全局变量重名,但一定不同
    -函数运算结束后,局部变量被释放
    -可以使用global保留字在函数内部使用全局变量

    n,s = 10,100
    
    def fact(n):
        global s#之后函数内出现的s全都是全局变量
        for i in range(1,n+1):
            s *= i
        return s
    
    print(fact(n),s)
    输出
    362880000 362880000
    

    ② 局部变量如果是组合数据类型且未在函数内部创建,等同于全局变量
    例1 组合数据类型+未创建

    ls = ["F","f"]
    #通过使用[]真实创建了一个全局变量列表ls
    def func(a):
        ls.append(a)
        #此处ls是列表类型,未真实创建则等同于全局变量
        return
    func("C")
    #全局变量ls被修改
    print(ls)
    输出
    ['F', 'f', 'C']
    

    例2 组合数据类型+已创建

    ls = ["F","f"]
    #通过使用[]真实创建了一个全局变量列表ls
    def func(a):
        ls = []
        #此处ls是列表类型,真实创建,ls是局部变量
        ls.append(a)
        return ls
    ls1 = func("C")
    #局部变量ls被修改
    print(ls,ls1)
    输出
    ['F', 'f'] ['C']
    

    6. lambda函数

    是一种匿名函数,即没有名字
    -使用lambda保留字定义,返回函数名作为结果
    -用于定义简单的、可以在一行内表示的函数

    <函数名> = lambda <参数>:<表达式>
    等价于
    def <函数名>(<参数>):
    <函数体>
    return <返回值>
    不同的是,只能使用表达式而不能使用
    例1

    f = lambda x,y:x+y
    print(f(5,10))
    输出 15
    

    例2

    f = lambda : "lambda函数"
    print(f())
    输出 lambda函数
    

    建议:
    lambda函数要谨慎使用,主要用作一些特定函数或方法的参数,建议使用def定义普通函数
    lambda函数有一些固定使用方式,建议逐渐掌握

    出处:北理工Python慕课

    展开全文
  • Python闭包怎么理解

    2020-04-17 19:52:03
    闭包是对函数来说的,是一种语法结构。如果一个内部函数引用了外部函数作用域中的变量,那么这个内部...事实上,在Python中创建闭包还要一个条件:外部函数需要将嵌套函数名作为返回值返回 def people(peoplename):...

    闭包是对函数来说的,是一种语法结构。如果一个内部函数引用了外部函数作用域中的变量,那么这个内部函数就称为闭包或闭包函数。被引用的变量将和这个内部函数一同存在,即使离开了它的外部函数也依旧存在。所以闭包函数是由 内部函数内部函数引用的外部函数的变量组成 的实体。

    事实上,在Python中创建闭包还要一个条件:外部函数需要将嵌套函数名作为返回值返回

    def people(peoplename):
        def print_age(peopleage):
            print(peoplename, peopleage)
        return print_age
    
    
    peo = people('李白')
    peo('5岁')		#运行后输出结果为	李白 5岁
    

    people函数是外部函数,他有一个peoplename参数,print_age是内部函数,也有一个peopleage参数,输出两个参数的值之后,内部函数就运行结束了,然后外部函数就返回内部函数的函数名。7行调用people函数并传了一个值,然后将函数的返回值赋给peo变量,最后又向peo传一个值。

    两个函数是嵌套函数;print_age函数中使用了外部函数的变量peoplename;外部函数返回内部函数的函数名。这样就创建了一个闭包。people(‘李白’)调用了外部函数,使peoplename变量获得了值,由于peoplename是闭包的一部分,所以该变量的值一直存在,函数运行结束后返回的值是print_age函数,将返回值赋给peo变量,相当于peo=print_age,使用peo(‘5岁’)相当于print_age(‘5岁’),结果输出‘李白 5岁’又一次说明了内部函数引用的外部变量的值还是存在的。

    展开全文
  • 我们平时写的 Python 程序中充斥着大量的函数包括系统自带函数和自 定义函数当我们调用函数时直接将参数传递进去然后坐等接收返回值即 可简直不要太好用那么你知道函数的参数是怎么传递的么是值传递 还是引用传递呢...
  • python的lambda函数也叫匿名函数 它的正确书写格式:冒号前是参数,可以有多个,用逗号隔开,lambda和参数之间要有个空格,...那怎么理解lambda返回的是一个函数的引用呢?我们先看一段简单的代码: def test(x, y):
  • return如果没有定义python函数返回值,那么结果就是None对象,可以作为终止程序运行,结束函数。 通俗理解: (以下内容来自网络) 函数就是个你招来的工人。你给他一些材料,告诉他怎么用这些材料拼装,然后他负责...
  • 本章节内容如下一,前言二,函数的定义与使用1,函数理解与定义2,函数的使用及调用过程(1)函数的使用(2)函数的调用过程3,函数的参数传递4,函数返回值5,局部变量和全局变量6,lambda函数三,代码复用与...
  • python装饰器理解

    2021-01-11 13:54:18
    在实际的应用场景中,需要记录函数的执行过程和函数的运行状态,比如说日志系统、函数的运行时间、函数的异常状态、返回值等。而在项目中,很多函数都需要进行这样的操作,那么怎么来实现呢? 第一种方式:我们可以...
  • 首先要理解装饰器,首先要先理解Python 中很重要的一个概念就是:“函数是 First Class Member” 。这句话再翻译一下,函数是一种特殊类型的变量,可以和其余变量一样,作为参数传递给函数,也可以作为返回值返.....
  • 我在项目中就学会怎么函数了,但是没有看过书,看完书后觉得有了更加清晰地理解,内容很简单,但是达到目的了。 在初学的时候,我在下面3,4标题下的代码都做了注释,为了加深理解。 2 命令、变量、代码和函数 ...
  • python函数的意义和初等数学中函数的意义一样,在我们初中高中所学习的函数怎么定义的呢?函数是一种抽象概念,是发生在集合之间的一种对应关系。意思就是用抽象的变量来表示一种数字间的关系,在此基础上可以...
  • python MOOC-1函数

    2020-07-20 17:09:42
    定义:函数可以理解为:IPO的实现和一代完整代码封装。 ###2.调用:实际参数替换函数中的形式参数。定义不执行,调用才执行。 ###3.参数传递 参数传递指的是在函数调用的时候,怎么将实际的值给定到参数上。可以...
  • 2、怎么函数参数和返回值注解? 加注释 3、闭包中,怎么对数字、字符串、元组等不可变元素更新。 需要 nonlocal 关键字去声明,然后修改 但是如果是列表,字典这样的就可以不用,直接用索引修改。 这里关于函数...
  • OK,我们今天来简单讲一下Python中的几个高级...在理解匿名函数之前,我们先来回顾下我们之前创建函数怎么创建的: def 函数名(参数1,参数2[,……]): 函数主体 return 返回值 标标准准的函数构建方法,但是有...
  • 在定义函数时,为了使代码更加易读,我们应该养成写函数文档的好习惯。那么函数文档怎么写?怎么调阅?...比如该函数没有返回值,仅仅输 出一条语句。''' print('Hello world!') 函数文档可以用两种...
  • 我用motor在tornado框架下来操作mongodb,...我这种写法a.py中print出来的是一个`<tornado.concurrent.Future object at 0x7fa83c900e10>`我不知道怎么获得future里面的数据。 哪位大神帮我看看!或者我哪里理解错了
  • 我想这不就乱套了,该怎么理解呢?   其实这里的函数有多个返回值,返回的是一个元组tuple,只是为了简便起见,元组外面的小括号去掉。 2、测试代码 """ @author:li kunlun @time:2020-10-17 @description: python...
  • python ->的作用

    2019-05-22 20:56:05
    python函数返回值的注解,而冒号后面的就是参数的注解了,十分好理解. 在官方文档指明你写的注释将被保存在__annotations__这个方法中.但是这并不意味着和c/c++ 中一样会限制你的变量类型,它对你的程序没有...
  • python学习6

    2020-07-26 22:56:36
    函数与lambda表达式 练习题: 1怎么函数编写⽂档? 参考python学习 给函数编写说明⽂档 还有另⼀种编写注释的⽅式,就是在def语句后⾯,添加⼀段说明字符串很有⽤。...2 怎么函数参数和返回值注解? 参考链接
  • 装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。 详细描述: importlogging #定义装饰器,接收旧函数 defdecorator(oldfunc): ...
  • Python装饰器的那些事儿...3.外部函数将内部函数作为返回值返回 此时的内部函数就叫闭包 怎么缩呢?来看个例子吧!(滑稽) #先定义一个外部函数 def wai(n): #在外部函数中定义一个内部函数 def nei(): # 内部函...
  • Python之面向对象

    2018-09-14 18:40:09
    过程:是早期的一个编程概念,过程类似于函数,只能执行,但是没有返回值 函数:不仅能执行,还可以返回结果(return) 二、深刻理解什么时面向对象和面向过程 1、面向过程:—-侧重于怎么做? 把完成某个需求...
  • 1.1.概述:装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。 1.2.详细描述: 1.importlogging8.ret=oldfunc(*args,**kwargs)9....
  • 过程:是早期的一个编程概念,过程类似于函数,只能执行,但是没有返回值 函数:不仅能执行,还可以返回结果(return) 二、深刻理解什么时面向对象和面向过程 面向过程:----侧重于怎么做? 把完成某个需求的所有...
  • 肯定是需要构造一个遍历树的函数,关键是这个函数里面返回值以及操作应该怎么进行。很明显的是分成两种情况:1.当前节点在删除列表里需要被删除,那么有两件事需要做,一件事是这个节点与他的父节点的连接需要切断,...
  • (十四)装饰器

    2019-09-28 17:01:16
    装饰器,顾名思义就是对某个东西进行化妆,让它更好看一些,在Python中装饰器的作用就是对函数进行装饰。那么问题来了,怎么装饰呢?这里就用到了前面介绍函数时,说过的几个点: 函数名可以赋值给其他变量 ...
  • # function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的list。 # lambda argument_list: expression # 其中lambda是Python...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

python函数返回值怎么理解

python 订阅