一、函数返回值

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

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

  

Python函数之返回值、作用域和局部变量的更多相关文章

  1. Python函数的返回值和作用域

    函数的返回值和作用域 1.返回值 def guess(x):    if x > 3:        return "> 3"    else:        retu ...

  2. Python 函数作为返回值

    函数作为返回值高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. def lazy_sum(*args): def sum(): ax=0 for n in args: ax = ax ...

  3. 『无为则无心』Python函数 — 27、Python函数的返回值

    目录 1.返回值概念 2.return关键字的作用 3.返回值可以返回的数据类型 4.函数如何返回多个值 5.fn5 和 fn5()的区别 6.总结: 1.返回值概念 例如:我们去超市购物,比如买饮料 ...

  4. python函数的返回值 讲解

    我们一起来聊聊python函数返回值的特殊情况,之前我也碰到过类似方面的问题,到后来查阅了一些资料后,发现原来是这样. 首先,写函数的时候,一定要写函数的文档,这样方便我们识别函数是做什么的.我记得很 ...

  5. python函数的返回值

    返回值:return1.没有返回值    #不写return    #只写return:结束一个函数    #return None2.有一个返回值    #可以返回任何数据类型    #只要返回就可 ...

  6. ~~函数基础(二):返回值&作用域~~

    进击のpython 函数的返回值和作用域 上文我们讲到了函数的基础--参数的相关问题 举的例子也都是带有print的函数定义 但是有个问题就出现了:我不想打印这个函数处理后的参数 我想拿到这个参数然后 ...

  7. Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()

    一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...

  8. Python入门篇-返回值和作用域

    Python入门篇-返回值和作用域 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.返回值 1>.返回值概述 Python函数使用return语句返回“返回值” 所有函数都 ...

  9. Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器

    函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

随机推荐

  1. Qt5学习笔记——QRadioButton与QbuttonGroup

    [我是小标题:使用QToolButton实现radio button功能.] QRadioButton是什么?  下图是Windows系统中典型的radio button显示效果.    QRadio ...

  2. 《Unity 3D游戏客户端基础框架》概述

    框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...

  3. 高级C/C++编译技术之读书笔记(二)之库的概念

    最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...

  4. wlan接收器如何共享网络

    无线局域网络(Wireless Local Area Networks: WLAN)是相当便利的数据传输系统,它利用射频(Radio Frequency: RF)的技术,取代旧式碍手碍脚的双绞铜线(C ...

  5. [CF662C]Binary Table

    luogu 题意 你有一个\(n*m\)的\(01\)矩阵.你可以把任意一行或者一列的\(01\)取反.求矩阵中最少的\(1\)的数量. \(n\le20,m\le10^5\) sol 很自然地有一个 ...

  6. 洛谷 P2212 [USACO14MAR]浇地Watering the Fields

    传送门 题解:计算欧几里得距离,Krusal加入边权大于等于c的边,统计最后树的边权和. 代码: #include<iostream> #include<cstdio> #in ...

  7. .NET系统框架

    本书是一本讲解.NET技术的书籍,目标读者群也是在.NET框架(.NET Framework)下进行开发的程序员,因此我们无法回避的问题就是:什么是.NET框架?它包含了哪些内容?为开发程序提供了哪些 ...

  8. bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的 ...

  9. 通过IHttpModule,IHttpHandler扩展IIS

    IIS对Http Request的处理流程 当Windows Server收到从浏览器发送过来的http请求,处理流程如下(引用自官方文档): 最终请求会被w3wp.exe处理,处理过程如下: 左边蓝 ...

  10. WebService简单实现

    1. WebService SOAP.WSDL.UDDISOAP(Simple Object Access Protocal,简单对象访问协议),是在分散或在分布式环境中交换信息的简单协议.WSDL( ...