zoukankan      html  css  js  c++  java
  • Python函数之返回值、作用域和局部变量

    一、函数返回值

      说到返回值,相信大家肯定都认识,没错,就是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

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

      

  • 相关阅读:
    plsql-游标
    pl/sql--基本的语法及操作
    Oracle数据库管理
    JMS-ActiveMq-订阅发布模式
    JMS-ActiveMq-点对点模式
    JMS-ActiveMq
    poi之excel的模板导入(随后分享)
    数据流写出util
    dba_tables、all_tables、user_tables
    oracle的一些操作
  • 原文地址:https://www.cnblogs.com/schut/p/8415453.html
Copyright © 2011-2022 走看看