该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Python中的nonlocal关键字的使用,lambda表达式,什么是递归,字符串操作方法

总的来说:

golbal 全局变量 nonlocal 代表(翻译 不是本地) 我不是局部 我不是全局

lambda 就是一个表达式

匿名函数

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda 只是一个表达式,函数体比 def 简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法

lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下实例:

实例(Python 3.0+)#!/usr/bin/python3 # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2 # 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 )) print ("相加后的值为 : ", sum( 20, 20 ))

以上实例输出结果:

相加后的值为 : 30相加后的值为 : 40

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

实例(Python 3.0+)#!/usr/bin/python3 total = 0 # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2 # total在这里是局部变量. print ("函数内是局部变量 : ", total) return total #调用sum函数 sum( 10, 20 ) print ("函数外是全局变量 : ", total)

以上实例输出结果:

函数内是局部变量 : 30函数外是全局变量 : 0global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

实例(Python 3.0+)#!/usr/bin/python3 num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num) fun1() print(num)

以上实例输出结果:

1123123

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

实例(Python 3.0+)#!/usr/bin/python3 def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num) outer()

以上实例输出结果:

100100

另外有一种特殊情况,假设下面这段代码被运行:

实例(Python 3.0+)#!/usr/bin/python3 a = 10 def test(): a = a + 1 print(a) test()

以上程序执行,报错信息如下:

Traceback (most recent call last): File "test.py", line 7, in test() File "test.py", line 5, in test a = a + 1UnboundLocalError: local variable 'a' referenced before assignment

错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。

修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为:

实例(Python 3.0+)#!/usr/bin/python3 a = 10 def test(a): a = a + 1 print(a) test(a)

执行输出结果为:

11

lambda不是python的保留字_python-nonlocal关键字的使用,lambda表达式(学习到function到变...相关推荐

  1. lambda函数是不是python的保留字_Python包含的保留字

    Python 包含的保留字可以执行如下命令进行查看: >>> import keyword >>> keyword.kwlist ['False', 'None', ...

  2. python整体设计目标_Python 入門語法和類型(学习)

    http://www.cnblogs.com/mcdou/archive/2011/08/02/2125016.html Python的设计目标之一是让源代码具备高度的可读性.它设计时尽量使用其它语言 ...

  3. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用

    课程起源 有一次在工作中编写python工具时,遇到一个 问题:从配置文件读取变量A后,无法在内存中把A的值改变成新的内容.为了解决"更新内存中变量"的这个问题,查找了一些帖子,结 ...

  4. python 函数嵌套和nonlocal关键字

    python函数可以嵌套使用,使用也比较简单,举个栗子: def outer():print("outer")def inner():print("inner" ...

  5. Python中定义函数的关键字是什么?一起来学习下吧

    python中定义函数的关键字是def. Python使用def关键字开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的具体功能实现代码,如果想要函数有返回值, 在expressions ...

  6. none是不是python的保留字_Python主要保留字

    保留字 含义 None 表示该值是一个空对象 as 用于类型转换 assert 断言,用于判断变量或条件表达式的值是否为真 class 用于定义类 def 用于定义函数或方法 del 删除变量或序列的 ...

  7. 关于python的保留字_Python中的保留字

    原博文 2020-01-29 20:03 − Python 包含的保留字可以执行如下命令进行查看: →import keyword →keyword.kwlist ['False', 'None', ...

  8. python 量化交易_Python量化交易,tushare与talib学习示例演示,双均线(DMA)买卖策略...

    本篇文章为tushare与talib的学习示例,通过双均线策略演示如何使用talib与tushare.下面我们对代码进行详细解析. 引入3个包,分别是talib,tushare和pandas impo ...

  9. python定义符号常量_python注释、变量、常量的学习

    注释.变量.常量的学习 注释 什么是注释 注释是对代码的解释,方便后期的阅读代码,可以使在后期的代码维护中事半功倍. 注释的作用 注释可以用来排查代码中的BUG,在一段有BUG的代码当中,用注释选中其 ...

最新文章

  1. View的Touch事件分发(一.初步了解)
  2. Java 线程第三版 第四章 Thread Notification 读书笔记
  3. C++:MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart...
  4. 【LeetCode 剑指offer刷题】字符串题6:67 把字符串转成整数
  5. 浅谈sass与less区别优缺点
  6. system文件_大文件拷贝,试试NIO的内存映射
  7. 扫地机器人腿是咕噜_扫地机器人|如何避免买到“智障”,看这篇
  8. Java微服务:蛋糕是骗人的,但您不能忽略它
  9. 循环,函数,指针作业
  10. HTTP 相应头相关
  11. c fscanf 按行读取文件_每日干货丨C语言文件操作函数
  12. 中国首辆火星车全球征名,李彦宏推荐命名:祝融
  13. Address already in use
  14. hadoop 修复hdfs中文件块错误 和文件修复 Error: java.io.IOException: Cannot obtain block length for LocatedBlock
  15. 常用医学科研软件有哪些?
  16. IE9修改收藏夹位置
  17. 自己动手写Spring-1-简单的IOC实现
  18. mac常见问题(五) Mac 无法开机
  19. 脱敏数据的残余风险评估
  20. $q -- AngularJS中的服务

热门文章

  1. 04-windows下Orcale的启动
  2. Linux系统中安装软件的三种方法(一)
  3. Mybatis源码解析:sql参数处理(1)
  4. 云计算实战系列十五(SQL I)
  5. 宝塔linux配置php环境扩展,CentOS7下宝塔面板php安装mssql扩展
  6. Jar 包依赖冲突排查思路和解决方法
  7. Mysql定时删除并重建数据库
  8. 【2019.08.21】2019杭电多校第十场
  9. P1070 道路游戏
  10. python--for循环