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

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

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

  1. def a(x,y):
  2. if x==y:
  3. return x,y
  4.  
  5. print a(3,3)<br><br>>>> 3,3

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

  1. def test_return(x):
  2. if x > 0:
  3. return x
  4. else:
  5. return 0

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

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

  1. def gcd(a,b):
  2. if a%b==0:
  3. return b
  4. else:
  5. gcd(b,a%b)

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

python 和 print 的区别:

  1. x = 1
  2. y = 2
  3. def add (x, y):
  4.   z = x + y
  5.   return z
  6. print add(x,y)
  7.  
  8. x = 1
  9. y = 2
  10. def add (x, y):
  11.   z = x + y
  12.   print z
  13. print add(x,y))

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

默认情况下,遇见 return 函数就会返回给调用者,但是 try,finally情况除外:
  1. def func():
  2. try:
  3. print 98
  4. return 'ok' #函数得到了一个返回值
  5. finally: #finally语句块中的语句依然会执行
  6. print 98
  7.  
  8. print fun()

输出:

98
98
ok

函数作为返回值返回:

  1. def lazy_sum(*args):
  2. def sum():
  3. x=
  4. for n in args:
  5. x=x+n
  6. return x
  7. return sum
  8.  
  9. lazy_sum(,,,,,,,,) #这时候lazy_sum 并没有执行,而是返回一个指向求和的函数的函数名sum 的内存地址。
  10. f=lazy_sum(,,,,,,,,)
  11. print(type(f))
  12. print(f()) # 调用f()函数,才真正调用了 sum 函数进行求和,
  1. 这其实就是闭包。
  2.  
  3. 返回一个函数列表:
  1. def count():
  2. fs = []
  3. for i in range(,):
  4. def f():
  5. return i*i
  6. fs.append(f)
  7. return fs
  8.  
  9. f1, f2, f3 = count()
  10. print(f1())
  11. print(f2())
  12. print(f3())
  13. 输出:
  1.  
  2. 执行过程:
    i=1, 执行for循环, 结果返回函数f的函数地址,存在列表fs中的第一个位置上。
    i=2, 由于fs列表中第一个元素所指的函数中的icount函数的局部变量,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())的任何循环变量
  1. 如果一定要引入循环变量,方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:
  1. def count():
  2. fs=[]
  3. for i in range(,):
  4. def f(j):
  5. def g():
  6. return j*j
  7. return g
  8. fs.append(f(i))
  9. return fs
  10.  
  11. f1,f2,f3=count()
  12. print(f1())
  13. print(f2())
  14. print(f3())
  1.  

python中 return 的用法的更多相关文章

  1. python中return的用法

    def testReturn(x): if x > 10000: return print "test return!!" #这句话永远不会得到执行 elif x > ...

  2. php中return的用法实例分析

    本文实例讲述了php中return的用法.分享给大家供大家参考.具体分析如下: 首先,它的意思就是返回;return()是语言结构而不是函数,仅在参数包含表达式时才需要用括号将其括起来.当返回一个变量 ...

  3. python 中del 的用法

    python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...

  4. JavaScript中return的用法详解

    JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...

  5. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  6. 【313】python 中 print 函数用法总结

    参考:python 中 print 函数用法总结 参考:Python print() 函数(菜鸟教程) 参考:Python 3 print 函数用法总结 目录: 字符串和数值类型 变量 格式化输出 p ...

  7. python中MySQLdb模块用法实例

    篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中 ...

  8. python中hashlib模块用法示例

    python中hashlib模块用法示例 我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib ha ...

  9. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

随机推荐

  1. tp框架-----文件上传

    之前也做过文件上传,现在学了tp,用tp怎么做呢? 第一步:做一个Wenjian控制器: <?php namespace Ceshi\Controller; use Think\Controll ...

  2. parted分区和挂载及非交互式操作

    author : headsen  chen date : 2017-11-17  09:45:36 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,将磁盘上原有的分区删除掉: 进入:#pa ...

  3. [Oracle] UNIX与Windows 2000上Oracle的差异(III)

    作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ORACLE 的安装 ...

  4. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  5. [Luogu 1122] 最大子树和

    题目 Description 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题 ...

  6. python为运维人员打造一个监控脚本

    0x00前言: 一直想写一个监控方面的脚本,然后想到了运维这方面的 后来就写了个脚本. 0x001准备: psutil模块 0x02正文: import os import time import r ...

  7. Maven-04: 三套生命周期

    Maven的生命周期不是一个整体,而是拥有三套相互独立的生命周期,它们分别是clean,default和site. clean生命周期的目的是清理项目. default生命周期的目的是构建项目. si ...

  8. ArrayList 源码分析

    ArrayList 源码分析 1. 结构   首先我们需要对 ArrayList 有一个大致的了解就从结构来看看吧. 1. 继承   该类继承自 AbstractList 这个比较好说 2. 实现 这 ...

  9. [bzoj3173]最长上升子序列_非旋转Treap

    最长上升子序列 bzoj-3173 题目大意:有1-n,n个数,第i次操作是将i加入到原有序列中制定的位置,后查询当前序列中最长上升子序列长度. 注释:1<=n<=10,000,开始序列为 ...

  10. Loadrunner初学

    1.创建脚本 启动Vvitrual User Generator 创建脚本 因为我们选择录制页面相关的操作,则选择web(HTTP/HTML) application type 选择是录制浏览器网页还 ...