Python return语句如何实现结果返回调用


Posted in Python onOctober 15, 2020

return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回

程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。

要返回两个数值,写成一行即可:

def a(x,y):
  if x==y:
    return x,y
print a(3,3)<br><br>>>> 3,3

但是也并不意味着一个函数体中只能有一个return 语句,例如:

def test_return(x):
  if x > 0:
    return x
  else:
    return 0

函数没有 return,默认 return一个 None 对象。

递归函数中没有return 的情况:

def gcd(a,b):
   if a%b==0:
     return b
   else:
     gcd(b,a%b)

分析:else 中没有 return 就没有出口,这个程序是自己内部运行,程序没有返回值,

python 和 print 的区别:

x = 1
y = 2
def add (x, y):
z = x + y

return z
print (add(x,y)


x = 1
y = 2
def add (x, y):

z = x + y

print z
print (add(x,y))

在交互模式下,return的结果会自动打印出来,而作为脚本单独运行时则需要print函数才能显示。

默认情况下,遇见 return 函数就会返回给调用者,但是 try,finally情况除外:

def func(): 
  try: 
    print 98 
    return 'ok' #函数得到了一个返回值 
  finally: #finally语句块中的语句依然会执行 
    print 98 
 
print fun()

输出:

98
98
ok

函数作为返回值返回:

标签: python

def lazy_sum(*args):
  def sum():
    x=0
    for n in args:
      x=x+n
    return x
  return sum
lazy_sum(1,2,3,4,5,6,7,8,9) #这时候lazy_sum 并没有执行,而是返回一个指向求和的函数的函数名sum 的内存地址。
f=lazy_sum(1,2,3,4,5,6,7,8,9)
print(type(f))
print(f()) # 调用f()函数,才真正调用了 sum 函数进行求和,

这其实就是闭包。

返回一个函数列表:

def count():
  fs = []
  for i in range(1,4):
    def f():
      return i*i
    fs.append(f)
  return fs
f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())
输出:
9
9
9

执行过程:

当i=1, 执行for循环, 结果返回函数f的函数地址,存在列表fs中的第一个位置上。

当i=2, 由于fs列表中第一个元素所指的函数中的i是count函数的局部变量,i也指向了2;然后执行for循环, 结果返回函数f的函数地址,存在列表fs中的第二个位置上。

当i=3, 同理,在fs列表第一个和第二个元素所指的函数中的i变量指向了3; 然后执行for循环, 结果返回函数f的函数地址,存在列表fs中的第三个位置上。

所以在调用f1()的时候,函数中的i是指向3的:

f1():
return 3*3

同理f2(), f3()结果都为9

闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。即包在里面的函数(本例为f()),不要引用外部函数(本例为count())的任何循环变量

如果一定要引入循环变量,方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:

def count():
  fs=[]
  for i in range(1,4):
    def f(j):
      def g():
        return j*j
      return g
    fs.append(f(i))
  return fs

f1,f2,f3=count()
print(f1())
print(f2())
print(f3())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python程序设计入门(3)数组的使用
Jun 16 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
python 连接sqlite及简单操作
Jun 30 Python
python书籍信息爬虫实例
Mar 19 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
Python中base64与xml取值结合问题
Dec 22 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
在python里创建一个任务(Task)实例
Apr 25 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
容易被忽略的Python内置类型
Sep 03 Python
python 进程池pool使用详解
Oct 15 #Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 #Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 #Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 #Python
matplotlib教程——强大的python作图工具库
Oct 15 #Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 #Python
详解pycharm配置python解释器的问题
Oct 15 #Python
You might like
php zend解密软件绿色版测试可用
2008/04/14 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python中map和列表推导效率比较实例分析
2015/06/17 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
在python里面运用多继承方法详解
2019/07/01 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
精灵市场:Pixie Market
2019/06/18 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
人力资源专员岗位职责
2014/01/30 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android