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
在函数里修改了全局变量,当函数有很多个的时候,就会很蒙逼了(再次友情提示)。
Python函数之返回值、作用域和局部变量的更多相关文章
- Python函数的返回值和作用域
函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: retu ...
- Python 函数作为返回值
函数作为返回值高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. def lazy_sum(*args): def sum(): ax=0 for n in args: ax = ax ...
- 『无为则无心』Python函数 — 27、Python函数的返回值
目录 1.返回值概念 2.return关键字的作用 3.返回值可以返回的数据类型 4.函数如何返回多个值 5.fn5 和 fn5()的区别 6.总结: 1.返回值概念 例如:我们去超市购物,比如买饮料 ...
- python函数的返回值 讲解
我们一起来聊聊python函数返回值的特殊情况,之前我也碰到过类似方面的问题,到后来查阅了一些资料后,发现原来是这样. 首先,写函数的时候,一定要写函数的文档,这样方便我们识别函数是做什么的.我记得很 ...
- python函数的返回值
返回值:return1.没有返回值 #不写return #只写return:结束一个函数 #return None2.有一个返回值 #可以返回任何数据类型 #只要返回就可 ...
- ~~函数基础(二):返回值&作用域~~
进击のpython 函数的返回值和作用域 上文我们讲到了函数的基础--参数的相关问题 举的例子也都是带有print的函数定义 但是有个问题就出现了:我不想打印这个函数处理后的参数 我想拿到这个参数然后 ...
- Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()
一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...
- Python入门篇-返回值和作用域
Python入门篇-返回值和作用域 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.返回值 1>.返回值概述 Python函数使用return语句返回“返回值” 所有函数都 ...
- Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
随机推荐
- Qt5学习笔记——QRadioButton与QbuttonGroup
[我是小标题:使用QToolButton实现radio button功能.] QRadioButton是什么? 下图是Windows系统中典型的radio button显示效果. QRadio ...
- 《Unity 3D游戏客户端基础框架》概述
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...
- 高级C/C++编译技术之读书笔记(二)之库的概念
最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...
- wlan接收器如何共享网络
无线局域网络(Wireless Local Area Networks: WLAN)是相当便利的数据传输系统,它利用射频(Radio Frequency: RF)的技术,取代旧式碍手碍脚的双绞铜线(C ...
- [CF662C]Binary Table
luogu 题意 你有一个\(n*m\)的\(01\)矩阵.你可以把任意一行或者一列的\(01\)取反.求矩阵中最少的\(1\)的数量. \(n\le20,m\le10^5\) sol 很自然地有一个 ...
- 洛谷 P2212 [USACO14MAR]浇地Watering the Fields
传送门 题解:计算欧几里得距离,Krusal加入边权大于等于c的边,统计最后树的边权和. 代码: #include<iostream> #include<cstdio> #in ...
- .NET系统框架
本书是一本讲解.NET技术的书籍,目标读者群也是在.NET框架(.NET Framework)下进行开发的程序员,因此我们无法回避的问题就是:什么是.NET框架?它包含了哪些内容?为开发程序提供了哪些 ...
- bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的 ...
- 通过IHttpModule,IHttpHandler扩展IIS
IIS对Http Request的处理流程 当Windows Server收到从浏览器发送过来的http请求,处理流程如下(引用自官方文档): 最终请求会被w3wp.exe处理,处理过程如下: 左边蓝 ...
- WebService简单实现
1. WebService SOAP.WSDL.UDDISOAP(Simple Object Access Protocal,简单对象访问协议),是在分散或在分布式环境中交换信息的简单协议.WSDL( ...