王振2020-5-13笔记

# ##### locals 和 globals
#locals 获取当前作用域中的所有内容
(函数外,获取的是打印之前的所有内容,返回一个字典,全局空间作用域)
(函数内,获取的是调用之前的所有内容,返回一个字典,局部空间作用域)
(1)
a = 1
b = 2
res = locals()
c = 3
print(res)
(2)
a = 1
def func():
	b = 2
	res = locals()
	c = 3
	print(res)
func()

#### globals 获取全局作用域的所有内容
(函数外(打印之前)和函数内(调用之前),获取的是打印之前的所有内容,返回一个字典,全局空间作用域)
(3)
a = 5
b = 6
res = globals()
c = 7
print(res)
(4)
a = 1
def func():
	b = 2
	res = globals()
	c = 3
	print(res)
func()
##### globals 返回一个系统字典
那么就可以把字符串变成一个变量
通过系统的全局字典添加键值对,可以动态创建全局变量

<-------------------------------------------------------------------------->
# #### 函数的嵌套
  嵌套在函数外边叫做外函数 
  嵌套在函数内部叫做内涵数
def func():
	def inner():
		print("我是inner函数")
1.内部函数可以直接在函数外部调用吗?  答案是不可以
2.调用外部函数后,内部函数可以在函数外部调用吗   不可以的
3.内部函数可以在函数内部调用吗   可以的
4.内部函数在函数内部调用时,是否有先后顺序   有的,必须先定义再调用

def func():
	def inner():
		def smaller()
			print("王振牛皮")
		smaller()
	inner()
func()

# LEGB原则 (就近找变量的原则)
寻找变量的调用原则采用LEGB原则,就近原则

B -- python内置模块的命名空间   局部
G -- 函数外部所在的命名空间     全局
E -- 外部嵌套函数的作用域       局部
L -- 当前函数内的作用域         局部

找变量顺序:从里向外,从下向上,就近找变量的原则 LEGB原则
<------------------------------------------------------------------------>
# #### global 和 globals
# #### nonlocal 关键字,用来修改局部变量
nonlocal 遵循LEGB原则
(1) 专门用来修改当前作用域上一级的局部变量
(2) 如果上一级找不到,那么继续向上找
(3) 全都找不到,直接报错

def outer():
	a = 10
	def inner():
		nonlocal a
		a = 20
		#print(a)
	inner()
	print(a)
outer()
结果是20
(4)不适用nonlocal 是否可以修改局部变量呢?  可以的
把要修改的值放入列表中,利用列表的索引下标进行修改

<--------------------------------------------------------------->
### #### 闭包函数
"""
闭包函数:
	内函数使用了外函数的局部变量
	外函数将内函数返回出来的过程就叫做闭包
	里面的内函数叫做闭包函数

"""
1.闭包函数用法
def wz_family():
	father = "王健林"
	def hobby():
		print("先定一个小目标,赚它一个亿,{}说的".format(father))
	return hobby
res = wz_family()
print(res)
res()

2.大闭包包含小闭包,返回后,内部函数也是闭包函数

#####  获取闭包函数使用的变量___closure__(返回闭包函数的内容)  cell_contents(取出对象)

<----------------------------------------------------------------------------->
####  闭包的特征
"""
内函数使用了外函数的局部变量,该局部变量会和内函数发生绑定,来延长该变量的生命周期


"""

#  闭包的意义
  1.延长局部变量的生命周期
  1.保护变量的安全性,外部无法访问
  
#####   匿名函数(lambda 表达式)
"""
用一句话来表达只有返回值的函数

语法结构:
	lambda 参数 : 返回值

"""

(1)无参数的lambda表达式
lambda : "我是个诗人"

(2)有参数的lambda表达式
lambda n : type(n)

(3)带有判断条件的lambda表达式
lambda n : "偶数" if n % 2 == 0 else "奇数"


###三元运算符
真值 if 条件表达式 else 假值
如若表达式成立,返回前面的真值
如果表达式不成立,返回假值

lambda a,b : a if a > b else b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值