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内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
随机推荐
- bat中for /f 如何截取任意行
一.概述 for命令开关有很多,/L,/F,/R.这里仅对含有/F的for进行分析,这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果. 1.命令格式:(1).FOR /F [& ...
- for-in和for 循环 的区别
以前早就知道,for...in 语句用于对数组或者对象的属性进行循环操作,而for循环是对数组的元素进行循环,而不能引用于非数组对象, 但咱在js项目里,遇到循环,不管是数组还是对象,经常使用for- ...
- (八)java运算符
算数运算符 + - * / % ++ -- class Ysf { public static void main(String[] args) { System.out.println(5/2);/ ...
- Shell 参数(2) --解析命令行参数工具:getopts/getopt
getopt 与 getopts 都是 Bash 中用来获取与分析命令行参数的工具,常用在 Shell 脚本中被用来分析脚本参数. 两者的比较 (1)getopts 是 Shell 内建命令,geto ...
- timer用作timestamp及其他
niosii中使用时间戳是很有用的,可以查看代码的执行时间是多少,在使用timestamp的过程中遇到一些问题现在做一下记录. 1.硬件部分构建软核没什么,就加一个timer就行了,加完之后自动获得基 ...
- button和input type=button的区别及注意事项
<button>标签 定义和用法 <button>标签定义一个按钮. 在button元素内部,您可以放置内容,比如文本或图像.这是该元素与使用input元素创建的按钮之间的不同 ...
- terraform 阿里云基本使用
1. 预备环境 安装了terraform 的软件的操作系统(windows linux mac 均可) 具有阿里云账户的 access_key secret_key 2. 配置 // terrafor ...
- openfaas 架构介绍
此为官方介绍 Overview of OpenFaaS Function Watchdog You can make any Docker image into a serverless fun ...
- 系列文章--WCF后传学习文章
WCF后传系列(10):消息处理功能核心 摘要: WCF是一个通信框架,同时也可以将它看成是一个消息处理或者传递的基础框架,它可以接收消息.对消息做处理,或者根据客户端给定的数据构造消息并将消息发送到 ...
- bzoj 1415 [Noi2005]聪聪和可可——其实无环的图上概率
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 乍一看和“游走”一样.于是高斯消元.n^2状态,复杂度n^6…… 看看TJ,发现因为聪 ...