局部变量与全局变量

全局变量:全局生效的变量,在顶头的,无缩进的定义的变量。

局部变量:函数内生效的变量,在函数内定义的变量。

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变量,递归,作用域,匿名函数的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  2. day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  3. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  4. Python之函数的递归、匿名函数、内置函数

    一.函数的递归 ''' 1 什么是函数递归 函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身 递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调 ...

  5. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    http://www.cnblogs.com/linhaifeng/articles/7580830.html 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数

  6. python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda

    函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...

  7. 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 #与函 ...

  8. python 三元运算符、推导式、递归、匿名函数、内置函数

    三目运算符 # 三目(元)运算符:就是 if...else...语法糖 # 前提:简化if...else...结构,且两个分支有且只有一条语句 # 注:三元运算符的结果不一定要与条件直接性关系 cmd ...

  9. Python day5 --------递归、匿名函数、高阶函数、内置函数

    一.递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归要求: 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减 ...

  10. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

随机推荐

  1. 百测学习之postman-接口测试

    一.postman的请求 1.url与uri的区别   url与uri的区别   http://doc.nnzhp.cn/          http+host(域名)+path路径(uri) 2.g ...

  2. PHP面向对象的学习(封装,继承,多态)

    这个文章就是记录  巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...

  3. PHP功能代码片段

    1.连接MYSQL数据库代码  <?php  $connec=mysql_connect("localhost","root","root&qu ...

  4. (四)linux的常用环境变量及设置

    一.为什么要设置环境变量 1.环境变量能解决什么问题? 你是否经历过输入$python命令后,屏幕上打印出python:command not found的尴尬:每一次都要输入$/home/tools ...

  5. CyclicBarrier回环屏障深度解析

    1. 前沿 从上一节的CountDownLatch的学习,我们发现其只能使用一次,当state递减为0后,就没有用了,需要重新新建一个计数器.那么我们有没有可以复用的计数器呢?当然,JUC包给我们提供 ...

  6. Stata极简生存分析

    1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是&quo ...

  7. Linux 路由 策略路由

    Linux 路由 策略路由 目录 Linux 路由 策略路由 一.路由表 编辑路由表配置文件:/etc/iproute2/rt_tables添加删除修改路由表 二.IP策略 查看IP策略 添加IP策略 ...

  8. 二本非科班,秋招,实习,面试,offer之路

    不知不觉已经工作一年多的,我是2019年7月毕业的,但是如果算上实习就工作差不多两年了的吧. 最近不是刚刚过了圣诞节吗?然后又准备到元旦了,迎来2021年!在微信公众号上看到小部分公众号在总结2020 ...

  9. CentOs 7 安装mysql5.7.18(二进制版本)

    1.下载二进制版本安装包.搜狐开源镜像站:http://mirrors.sohu.com/mysql/MySQL-5.7/   , 找 mysql-5.7.18-linux-glibc2.5-x86_ ...

  10. SQL Server批量向表中插入多行数据语句

    因自己学习测试需要,需要两个有大量不重复行的表,表中行数越多越好.手动编写SQL语句,通过循环,批量向表中插入数据,考虑到避免一致问题,设置奇偶行不同.个人水平有限,如有错误,还望指正. 语句如下: ...