python 第十章 函数作用域与名称空间

41 阅读3分钟

大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习python,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力

初识函数对象

函数非常非常重要,但是也不要过于的害怕它.搞清楚它的本质就好了

函数,就是一个高级点的数据容器.一个数据/容器能干啥,函数也能甘薯

1.函数可以被引用 -- 可以用函数来赋值
2.函数可以作为元素,放到字典/列表/元组/集合
3.函数可以作为参数,传给别的函数
4.函数可以作为返回值

函数对象 -- 把函数当成一个普通的数据对待.可以用它赋值,可以把它放到散列,序列里.也可以用它来作为返回值或者作为参数传到一个函数去

名称空间

名称空间 = 用来存储名字的地方
	变量名,函数名

程序中有专门的一些内存区域.来存储对应的数据
	1.名称空间 -- 栈(变量名,函数名)
	2.内存数据 -- 堆(变量值,函数代码)
有一个东西叫'名称空间',专门用来存放名字.为了避免重名的情况.名称空间一共有31.内建名称空间(存内置函数)
	生命周期: 随着python的程序启动而生成,在程序关闭时回收.清除里面的数据
	加载顺序: 最先被加载出来的数据
	存放对象: 内置函数print input type float len

2.全局名称空间(存在python外层定义的名字)
	生命周期: 随着python的程序启动而生成,在程序关闭时回收.清除里面的数据
	加载顺序: 第二个被加载出来的
	存放对象: 在python外层写的代码,定义的变量名,函数名

3.局部名称空间(存在函数内定义的名字)
	生命周期: 随着函数的调用而生成,在结束调用时销毁
	加载顺序: 在调用时才会被加载
	存放对象: 在函数里定义的变量名/函数名,形参


总结:
	一个程序里的数据.是有专门的地方存储的
		存储名字的叫名称空间,也叫栈.名字会因为类型的不同,分开放在3个名称空间中
		存储内存数据叫堆 -- 变量值,函数内容

作用域

作用域 = 一个数据能够使用的范围

全局作用域 = 整个程序都可以使用
	(内建名称空间,全局名称空间)
内置函数,在外层定义的变量,函数名

局部作用域 = 只有在局部位置才能使用(函数内)
	局部名称空间
	函数里面定义的变量和函数

如果要提权 -- 让一个数据,从局部变成全局 -- global
global = 全局 ,所有人都可以使用		

def 函数名():
	gloabl 变量名
	操作变量
函数名()
print(变量)

def fun():
    global a
    a = 666

fun()
print(a)
要使用函数里的变量.除了要给它global提权外,还得调用函数.才能生成对应的名字空间.运行

如果要局部化 -- 让一个代码,变成你专属的 -- nonlocal
nonlocal = 局部 = 原本大家都能用,但是现在归我管

def fun1():
	b = 520 # 公有的东西.大家都能用
	def fun2():
    	nonlocal b # 让变量b局部化
    	b = 60
	fun2()
	print(b)
fun1()

匿名函数 lambda函数

如果你要用一个函数.但是不想给它想名字再.那就可以用lambda

原来的写法:
def add(x, y):
	return x+ y
print(add(3,4))

现在的写法:
	add = lambda x,y:x+y
	print(add(3,4))

语法格式:
lambda 变量:操作
lambda a:print(a)
talk = lambda a:print(a)
talk('你好')

推荐链接 c.biancheng.net/view/2262.h…