Py变量,递归,作用域,匿名函数
局部变量与全局变量
全局变量:全局生效的变量,在顶头的,无缩进的定义的变量。
局部变量:函数内生效的变量,在函数内定义的变量。
- name='1fh'
- def changename():
- name='sb'
- print('shi',name)
- changename()
- print(name)
函数里的局部变量无法改变修改全局变量
而global可以使函数内出现的函数名变成全局变量处理
那个局部变量可以读取可以赋值
- name='1fh'
- def changename():
- global name
- name='sb'
- print('shi',name)
- changename()
- print(name)
一般全局变量大写,局部变量小写。
指定上一级的变量nonlocal
- def xiba():
- name = 'shit'
- print(name)
- def xiba1():
- nonlocal name
- name = 'abcd'
- xiba1()
- print(name)
- xiba()
前向引用:
如果执行一个函数时里面要调用另外一个函数,而另外一个函数在调用函数的后面才
定义,这种情况会出现报错
错误示例
- def foo():
- print('from foo')
- bar()
- foo()
- def bar():
- print('from bar')
递归:一层一层往下,在函数内部,不断调用自己,死循环会报错,要有结束条件
- def calc(n):
- print(n)
- if int(n/2) ==0:
- return n
- return calc(int(n/2)) #不断调用自己
- calc(10)
递归加强版
- person_list=['alex','wupeiqi','yuanhao','linhaifeng','sb','sb1']
- def ask_way(person_list):
- answer1='没有人知道位置'
- answer2 = '知道位置'
- if len(person_list) == 0:
- return answer1
- person = person_list.pop(0) # pop是删除第一个位置的元素,并取得这个元素的值
- print(person)
- if person =='linhaifeng':
- return answer2
- else:
- print('this man dont know the way',person)
- return ask_way(person_list) #注意递归的语句要前面要加上return,否则返回值会变成none出错
- abcd=ask_way(person_list)
- print(abcd)
作用域:函数的执行与进行def定义的那段有关,与在哪调用无关
这里返回的函数名的意思是返回这个函数名所占用的内存地址
- def test1():
- print('in the test1')
- return test1
- res= test1()
- print(res)
作用域示例:
- name = 'alex'
- def foo():
- name = 'lhf'
- def bar():
- name='abcd'
- print(name)
- bar() #这个bar可以成功调用,因为她与def bar同级
- foo()
- bar() #这个bar不能成功调用会报错,因为它是def bar的上一级
针对报错的问题,可以将bar函数的内存地址弄出来,然后直接对内存地址进行调用
- name = 'alex'
- def foo():
- name = 'lhf'
- def bar():
- name='abcd'
- print(name)
- return foo #注意这个return是bar的返回值
- return bar #注意这个return是foo的返回值
- resbar=foo()
- resbar()
- sb= resbar()
- print(sb)
匿名函数
1定义方法:
使用lambda定义。lambda 形参名:处理的方法
lambda可以随便赋予名字,平常不占用内存
比如以下这段函数
- def calc(x):
- return x+1
- res = calc(10)
- print(res)
等同于
- func=lambda x:x+1
- print(func(10))
比如下面这段函数
- name = 'alex'
- def changename(x):
- return name+'sb'
- res=changename('alex')
- print(res)
等同于
- name=input('press the name')
- res=lambda x:str(name)+'sb'
- print(res(name))
可以包含多个形参
- func=lambda x,y,z:(x+1,y+1,z+1)
- print(func(1,3,4))
Py变量,递归,作用域,匿名函数的更多相关文章
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数
目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...
- Python之函数的递归、匿名函数、内置函数
一.函数的递归 ''' 1 什么是函数递归 函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身 递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调 ...
- python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
http://www.cnblogs.com/linhaifeng/articles/7580830.html 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数
- python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda
函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...
- python开发基础04-函数、递归、匿名函数、高阶函数、装饰器
匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函 ...
- python 三元运算符、推导式、递归、匿名函数、内置函数
三目运算符 # 三目(元)运算符:就是 if...else...语法糖 # 前提:简化if...else...结构,且两个分支有且只有一条语句 # 注:三元运算符的结果不一定要与条件直接性关系 cmd ...
- Python day5 --------递归、匿名函数、高阶函数、内置函数
一.递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归要求: 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减 ...
- python协程函数、递归、匿名函数与内置函数使用、模块与包
目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...
随机推荐
- Ribbon提供的负载均衡算法IRule(四)
一.Ribbon算法的介绍 Ribbon的源码地址:https://github.com/Netflix/ribbon IRule:根据特定算法中从服务器列表中选取一个要访问的服务,Ribbon默认的 ...
- CVE-2019-0708_RDP漏洞利用
可以说是2019年影响比较大的一个漏洞了, 简述下这个漏洞: Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如: windows2003.windows2008.w ...
- xss靶场练习(7.22)
靶场地址:http://xss.fbisb.com/ 参考的文章:https://www.cnblogs.com/cute-puli/p/10834954.html 感谢大佬的分享 做这个题的思路就 ...
- C#未能找到路径“\bin\roslyn\csc.exe”的一部分。
主要原因是因为两个库存在,需要生成一个 roslyn文件,但是这个项目是从 vs2017中,打开的,所以,没有必要存在它. 那么就删除这两个关联的库,就可以达到目的 S2017 打开 程序包管理控制 ...
- Java学习_反射
什么是反射? 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法. JAVA反射机制是在运行状 ...
- MySQL求两表的差集(非交集)
mysql如何查询两个字段数不同的表中数据不一致的记录 一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)连接后所产生空字段值来筛选两表的差集 1.NOT EXISTS not ...
- kill的使用
Linux中Kill进程的N种方法 (2011-12-23 17:27:59) 转载▼ 标签: 杂谈 分类: ubuntu系统操作 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- ...
- Socket.io详解
socket.io是一个跨浏览器支持WebSocket的实时通讯的JS. http://socket.io/docs/ 由于HTTP是无状态的协议,要实现即时通讯非常困难.因为当对方发送一条消息时,服 ...
- C#设计模式——建造者模式(Builder Pattern)
1.建造者模式简介 1.1>.定义 建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 1.2>.使用频率 中低 1.3>.原型模式应用 ...
- eclipse中安装jetty插件并使用
一.eclipse中jetty插件安装: 打开eclipse,依次点击菜单Help->Eclipse Marketplace,在Find后面的框中输入jetty,选择第一项进行install即可 ...