函数作用域与名称空间

本文介绍了Python中的名称空间与作用域,包括内建、全局和局部名称空间,以及它们在程序中的作用。同时阐述了作用域的概念,如全局作用域和局部作用域,并提及了`global`和`nonlocal`关键字的应用。最后,文章提到了匿名函数`lambda`的使用场景。
摘要由CSDN通过智能技术生成


前言

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

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

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

直接和间接:
我电脑硬盘内存不足,解决方式:
1.我的电脑支持扩充硬盘 --> 再装一个固态,机械 --> 直接修改
2.我的电脑不支持插硬盘 --> 买个U盘,移动硬盘来用 --> 间接修改

说白了,函数就是个高级点的数据容器.可以把它理解为装了很多代码的变量

所以你可以拿他来赋值,把它放到列表,元组,集合,字典中.也可用它作为返回值和传参

一、名称空间与作用域

名称空间: 专门用来存储名字的一个地方
变量名,函数名

程序中有专门的内存区域,来存储专门的数据
1.名称空间 --> 栈(变量名,函数名)
2.内存数据 --> 堆(变量值,函数值)
有一个东西叫"名称空间"是专门用来存放名字,并且为了避免重名,它一共有三层

  1. 内建名称空间(存内置函数的地方)

    这个名称空间会随着python程序的启动而生成,在程序关闭时,回收,清除里面的数据
    它是在程序中,最先被加载出来的,用来存一些内置函数
    print input type int float

  2. 全局名称空间(存你在python外层定义的名字,不是内置以及函数内的名字)

    这个名称空间会随着python文件的执行产生,执行后销毁,清除
    它是在程序中第二个被加载出来的名空军,外层代码里写的名字都放在这
    自己定义得变量,函数名(不是内置的,也不是在函数内定义得)

  3. 局部名称空间(函数里面的变量名,函数名)

    这个名称空间会随着函数的调用/结束调用而产生,销毁.函数的形参,函数内定义名字都放着
    它也是最后一个被加载出来的名称空间,在调用函数时存活,调用完后销毁
    存放的名称:
    1.函数内定义的变量名,函数名
    2.函数的形参

    三国版的名称空间:
    曹操
    内建名称空间 --> 曹操的亲戚兄弟,出来打天下的时候就带这的 --> 曹仁,夏侯惇,夏侯渊,曹洪
    全局名称空间 --> 曹操在打天下过程中,收复的文臣武将 --> 郭嘉 许褚 李典 荀彧 张辽
    局部名称空间 --> 曹老板打天下过程中,分封了很多太守(市长),太守自己招的小弟 --> 会听太守的话,但不一定听曹操的话.

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

二、作用域的概念

  • 全局作用域: 整个程序都可以使用

    (内置名称空间,全局名称空间)
    内置函数,在外层定义的变量,函数

  • 局部作用域: 只有在局部位置才能使用(函数内)

    局部名称空间
    函数里面定义得变量和函数

    定义域: 定义域相当于开辟了一个地盘.来执行操作.里面的"数据",未经许可外人不能使用
    作用域: 定义好的数据,能够使用,作用的范围

  • 作用域实战:

    global --> 全局,提域

    语法:
    def 函数名():
    global 数据名
    声明/操作数据

def fun():
    		global a
    		a = 123
	fun()
print(a)

一个被提权了的变量,使用之前,还是需要先调用该函数,生成对应的名称空间.才能使用,否则报错

nonlocal --> 局部,降域. 目前用的不多

def fun1():
	a = 2
	def fun2():
			nonlocal  a # 把变量a深度私有化
			a = 3
		fun2()
	print(a)
fun1()

全局 = 大方的人 --> 我的东西你们都可以用
局部 = 小气的人 --> 我的东西只有我能用

三、匿名函数 lambda函数

我有个项目,有很多功能,为了好管理控制,准备把每个功能都写成函数
每个功能都写成函数,想名字很麻烦,尤其是有很多函数里面没啥内容,所以就采取匿名函数手段

语法:
lambda 参数:执行代码

有的懒癌患者,不想写def声明.就直接匿名了

b = lambda x,y:x+y
	print(b(70,36))

总结

函数对象的核心概念: 把函数当成一个普通的数据来使用,可以用它来赋值,传参,作为返回值.也可以把函数放到列表,集合,元组,字典

名称空间 = 放名字的地方,一共有三块

名称空间:
内建名称空间:存储python自带的一些内置函数
全局名称空间:用户写代码过程中,自己定义出来的名字
局部名称空间:存储函数内定义的名字(函数名,变量名),形参

作用域:
1.全局作用域: 大方,所有人都可以使用
整个程序内都可以使用
2.局部作用域: 小气,少部分人才能使用
只有在局部位置才能使用 --> 函数内

提权,提高作用域 --> global --> 全局

	def fun():
    		global name
    		name = "热水"

	fun()
	print(name)

降权,降低作用域 --> nonlocal --> 局部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小八砸丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值