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内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
随机推荐
- 理解 EventLoop
链接 链接 node 浏览器 执行顺序有差异 macrotask microtask 一个线程会有 堆 栈 消息队列; 栈函数执行是用的, 堆用了存放定义的对象, 消息队列来处理异步的操作 a() ...
- python中的赋值与拷贝(浅拷贝与深拷贝)
1.赋值与拷贝 直接赋值(b=a)是传引用,b改动a也会改动. a = [1, 2, 3, 4] b = a b[1] = 999 print(a, b) #[1, 999, 3, 4] [1, 99 ...
- 命令行工具jdb调试Java程序
一直在gdb 下调试c/c++程序. 突然要写个java程序,又不是很喜欢使用eclipse,那怎么调试程序呢.你还可以使用 jdb. 它是jdk 内置的一个java debug工具.类似与 gdb. ...
- RIPng 知识要点
RIPng --------------------------------------------------------- UDP:521 多播地址:FF02::9 -------------- ...
- Linux下Apache配置局域网访问出现的问题
在网站安装好之后,本机可以访问,但是局域网内无法访问,我查看了 /etc/httpd/conf/httpd.conf 看到我的配置如下 <Directory ......> Allow A ...
- 20165222 实验一java开发环境的熟悉
实验内容及步骤 实验一 Java开发环境的熟悉-1 1 建立“自己学号exp1”的目录 2 在“自己学号exp1”目录下建立src,bin等目录 3 javac,java的执行在“自己学号exp1”目 ...
- 几个ADB常用命令
http://blog.163.com/ymguan@yeah/blog/static/14007287220133149477594/ 1. 显示当前运行的全部模拟器: adb devices ...
- Flyway客户端使用
一.flyway介绍 Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要 ...
- mysql字段详细
http://www.runoob.com/mysql/mysql-data-types.html
- loj 6053 简单的函数 —— min_25筛
题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...