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

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

  

优质内容筛选与推荐>>
1、ansible自动安装rabbitmq
2、HDU 4285 circuits 第37届ACM/ICPC天津赛区网络赛(插头DP)
3、这是一个可怕的交易
4、北京租房心得
5、经典.net技术收藏


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn