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. ...
随机推荐
- Python高级语法-对象实例对象属性-Property总结(4.6.2)
@ 目录 1.说明 2.代码 关于作者 1.说明 property属性,返回的是值 不是callable的,也就是不能使用方法来调用 只能传入self,不能传入其他 用处,能返回局部数据,比如当分页的 ...
- 跟我一起学Redis之高可用从主从复制开始
前言 现在遇到高并发场景时,缓存技术应该算是性能优化的第一步,缓解数据库压力的同时还能提高访问效率,而Redis应该是绝大多数应用场景的首选.但是尽快Redis性能再优秀,在当今高并发场景下,一台服务 ...
- C# 并发编程 (异步编程与多线程)
并发:同时做多件事情 多线程:并发的一种形式,它采用多个线程来执行程序. 并行处理:把正在执行的大量的任务分割成小块,分配给多个同时运行的线程.并行处理是多线程的一种,而多线程是并发的一种. 异步编程 ...
- (十二)、file--判断文件类型命令
一.命令描述与格式 描述:linux在查看一个文件前,要首先确定该文件中数据的类型,之后再使用适当的命令或者方法打开该文件,在linux中文件的扩展名并不代表文件的类型,也就是说扩展名与文件的类型没有 ...
- 两千星 .NET5 框架 Furion 亮点分析(一)
让 .NET 开发更简单,更通用,更流行. Furion 介绍 Furion 是基于 .NET5 平台下打造的现代化 Web 框架.旨在 让 .NET 开发更简单,更通用,更流行.. Furion 非 ...
- VS Code 自动化连接非固定IP地址EC2实例的解决方案
问题描述 大家可能和我一样,平时在AWS上启动一台安装有Linux EC2实例作为远程开发机. (注:这里的EC2实例是配置用私钥进行登录的) 通常,你可以选择申请一个Elastic IP绑定到这台开 ...
- 使用 dotnet-monitor 分析.NET 应用程序
dotnet-monitor 是 .NET Core 命令行接口 (CLI) 工具, 可以很方便的在dotnet环境中分析我们的应用程序,需要注意的是,目前它还只是一个实验性的工具 在这之前,我们使用 ...
- maven打包,跳过生成javadoc
有时候由于代码中注释错误(比如方法参数)或者maven javadoc插件版本有问题,导致打包报错,而我们着急打包验证问题,没有时间一一修改错误,这时候可以先跳过生成javadoc,继续下一步工作. ...
- codeforces 1438D,思路非常非常巧妙的构造题
大家好,欢迎来到codeforces专题. 今天选择的问题是contest1438的D题,全场通过人数为1325人.一般在codeforces当中千人通过的题难度都不算太高,但是这题有点例外,虽然没有 ...
- java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)
我们看一个例子: class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:&q ...