目录

  • 一、变量作用域
  • 二、lambda表达式
  • 三、生成器函数

一、变量作用域

变量起作用的代码范围称为变量的作用域,不同作用域内变量名可以相同,互不影响。

  • 局部变量在函数内部定义的普通变量只在函数内部起作用。当函数执行结束后,局部变量自动删除,不再可以使用。
    局部变量的引用比全局变量速度快,应优先考虑使用。

  • 全局变量可以通过关键字global来定义。这分为两种情况:
    1.一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内使用global将其声明为全局变量。
    2.如果一个变量在函数外没有定义,在函数内部也可以直接将一个变量定义为全局变量,该函数执行后,将增加一个新的全局变量。

  • 在函数内只引用某个变量的值而没有为其赋新值,如果这样的操作可以执行,那么该变量为(隐式的)全局变量。

  • 如果在函数内任意位置有为变量赋新值的操作,该变量即被认为是(隐式的)局部变量,除非在函数内显式地用关键字global进行声明。

>>> def demo():global x                 #x被声明为全局变量x = 3y = 4print(x,y)>>> x = 5
>>> demo()
3  4
>>> x
3               #如果把global x删去则输出5,因为此时上边定义的x为局部变量,只在demo()函数内生效
>>> y           #因为y是局部变量所以在函数外调用会报错
NameError: name 'y' is not defined
>>> del x         #把x删掉
>>> x
NameError: name 'x' is not defined
>>> demo()
3  4
>>> x
3
>>> y
NameError: name 'y' is not defined
  • 如果局部变量与全局变量具有相同的名字,那么该局部变量会在自己的作用域内隐藏同名的全局变量,但函数内部声明的局部变量不会影响到函数外部。
>>> def demo():x = 3         #创建了局部变量,并自动隐藏了同名的全局变量 >>> x = 5
>>> x
5                #函数内部声明的局部变量不会影响函数外部
>>> demo()
>>> x             #函数执行不影响外面全局变量的值
5

二、lambda表达式

  • lambda表达式可以用来声明匿名函数,也就是没有函数名字的临时使用的小函数,尤其适合需要一个函数作为另一个函数参数的场合。也可以定义具名函数。
  • lambda表达式只可以包含一个表达式,该表达式的计算结果可以看作是函数的返回值,不允许包含复合语句,但在表达式中可以调用其他函数。
>>> f = lambda x, y, z: x+y+z        #可以给lambda表达式起名字
>>> f(1,2,3)                         #像函数一样调用
6
>>> g = lambda x, y=2, z=3: x+y+z    #参数默认值
>>> g(1)
6
>>> g(2, z=4, y=5)                   #关键参数
11
>>> L = [1,2,3,4,5]
>>> print(list(map(lambda x: x+10, L)))        #模拟向量运算
[11, 12, 13, 14, 15]
>>> L
[1, 2, 3, 4, 5]
>>> data = list(range(20))           #创建列表
>>> data
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> import random
>>> random.shuffle(data)             #打乱顺序
>>> data
[4, 3, 11, 13, 12, 15, 9, 2, 10, 6, 19, 18, 14, 8, 0, 7, 5, 17, 1, 16]
>>> data.sort(key=lambda x: x)       #和不指定规则效果一样
>>> data
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> data.sort(key=lambda x: len(str(x)))     #按转换成字符串以后的长度排序
>>> data
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> data.sort(key=lambda x: len(str(x)), reverse=True)     #降序排序,两位数在前
>>> data
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

三、生成器函数

  • 包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数。
  • yield语句与return语句的作用相似,都是用来从函数中返回值。与return语句不同的是,return语句一旦执行会立刻结束函数的运行,而每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行,下次通过生成器对象的__next__()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时恢复执行。
  • 生成器具有惰性求值的特点,适合大数据处理。
#编写并使用能够生成斐波那契数列的生成器函数。
>>> def f():a, b = 1, 1            #序列解包,同时为多个元素赋值while True:yield a            #暂停执行,需要时再产生一个新元素a, b = b, a+b      #序列解包,继续生成新元素>>> a = f()                #创建生成器对象
>>> for i in range(10):    #斐波那契数列中前10个元素print(a.__next__(), end=' ')
1 1 2 3 5 8 13 21 34 55 >>> for i in f():         #斐波那契数列中第一个大于100的元素if i > 100:print(i, end=' ')break144
>>> a = f()               #创建生成器对象
>>> next(a)               #使用内置函数next()获取生成器对象中的元素
1
>>> next(a)               #每次索取新元素时,由yield语句生成
1
>>> a.__next__()          #也可以调用生成器对象的__next__()方法
2
>>> a.__next__()
3

彻底搞懂python函数2相关推荐

  1. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  2. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  3. 面试系列 | 带你彻底搞懂 Python 装饰器

    本文作者:Rocky0249 公众号:Python空间 写在之前 「装饰器」作为 Python 高级语言特性中的重要部分,是修改函数的一种超级便捷的方式,适当使用能够有效提高代码的可读性和可维护性,非 ...

  4. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  5. python协程详解_彻底搞懂python协程-第一篇(关键词1-4)

    任何复杂的概念或系统都不是凭空出现的,我们完全可以找到它的演化历程,寻根究底终会发现,其都是在一系列并不那么复杂的简单组件上发展演化而来! by 落花僧 本文通过一系列关键概念,逐步递进理解协程. 0 ...

  6. python数据分析建模-十分钟搞懂“Python数据分析”

    原标题:十分钟搞懂"Python数据分析" 引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架.其次,讲解"如何通过Python 函数或代码和统计学知 ...

  7. python中gbk字符原因报错_不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码...

    原标题:不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码 程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广, ...

  8. 一文搞懂property函数

    一文搞懂property函数 接下来我带大家了解一个函数的作用以及使用技巧,希望对大家都有帮助,话不多说,接下来就开始我的表演 特性 通过存取方法定义的属性通常称为特性(property) 让所有的属 ...

  9. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

最新文章

  1. awk 数组用法【精华贴】
  2. //rest风格写_REST /使用提要发布事件
  3. 1.7 编程基础之字符串 34 回文子串 python
  4. 怎么灵活使用Graph, Document, Key/Value 三种混合模型的数据库?--Java 10分钟教程
  5. Arcgis更换布局模板_小美AI触屏音箱评测 美的布局AloT的关键一环
  6. 如何将一段文本编译成C#内存程序的过程
  7. cifs mount fail
  8. python numpy的shape函数
  9. 工作多年,分享16条实用职场经验给你
  10. 新手坐高铁怎么找车厢_坐高铁时如何快速找到自己车票上的车厢和座位! 说出来你都不敢相信...
  11. 外贸B2C系列:facebook使用教程
  12. 锦标赛算法Python实现
  13. 【MobileNet V2】《MobileNetV2:Inverted Residuals and Linear Bottlenecks》
  14. 学生成绩预测模型_2020年甘肃省建筑信息模型技术员(学生组)暨第三届全国装配式建筑职业技能竞赛(学生组)选拔赛成绩揭晓!...
  15. Android 不得不知Tag的妙用
  16. Java中23种设计模式(随时不定时更新)
  17. L1-079 天梯赛的善良 - java
  18. 【应用多元统计分析】——第三章(1)
  19. java计算机毕业设计ssm网上报名系统
  20. 什么是Web服务器,如何配置

热门文章

  1. JAVA兴趣小组申请理由_关于参与兴趣小组申请书范文
  2. MySQL【触发器】
  3. 第2章 HFDS的Shell操作
  4. 中亦安图通过创业板注册:年营收近12亿 拟募资6亿
  5. PAD存储过程以及相关的高级调用
  6. 佛山市住房公积金数据异地容灾备份系统
  7. 手撸架构,Nginx 面试40问
  8. 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
  9. EXCEL的嵌套if及时间处理
  10. html5源码笔记(三)【爱创课堂专业前端培训】