python的作用域有哪几种_Python作用域

在讲Python作用域前,先来分析一下如下一个函数:

def multiplier(factor):

def multiplyByFactor(number):

return number * factor

return multiplyByFactor

当我们执行

test=multiplier(10)的时候返回的并不是一个具体值而是如下这么一个函数:

.multiplyByFactor at 0x00000212A7B27400>

实际上这里我们可以看出执行这个函数之后返回的是一个函数,当我们再次执行 test(10)的时候 结果就是100

这里我们可以看做和js一样是返回式函数。好了,打住。先讲一下python作用域吧。

一:Python作用域是一种包含关系

class Common:

a=10

def __init__(self,name,*param):

self.name=name

self.age=param[0]

self.birth=param[1]

def GetName(self):

name='noname'

return name

c=Common("ck",10,"1989-02-28")

print(c.GetName())

print(c.name)

print(c.birth)

result:

noname

ck

1989-02-28

当我们生成一个类的时候,打个比方这时你进入了一个大房子里面。大房子里面你能看到的家俱房间都是这个类里面的东西。

当你不进入关着门的小房间时,你可以随意使用这个类里面的东西。这些东西我们称作类的属性变量,所有的类的属性变量都在一个self的字典里面存着

当然我们可以想以前那样直接在内部进行变量赋值而不用self,但是这样最终都会绑定到self关键字上面,这里我们可以理解他为this指针

这个时候当我们进入一个小房间(内部函数),操作了一个叫name的内部数据时,房间外面还有一个叫name的同样的数据,

但是我在内部操作不会影响到外部房间的,因为我们是隔离的,我们有房间保护不会搞混(作用域),这个name就是内部的私有变量

当我们需要调用外部变量时需要使用self.name,这个时候我们就是用的整个类的全局数据。相当于所有房间都可以使用的东西,比如钥匙。

因此可以得出:

packgae->class->function,在包里面定义的变量在class,function里面可以调用,在class里面定义的变量function可以调用,function里面的变量是私有的

二:作用域纽带

如果两个function需要信息沟通如何处理呢,这就需要他们之间有一个纽带,比如引用变量。

引用变量:类,数组,元组,复杂结构数据等

参数变量:字符,数字等

传入函数的引用变量如果在函数内部被改变了,name在外部作用域的变量值也会随之改变,参数也就不会隔离,而起到作用域之间沟通的一个桥梁

而值变量,用外作用域的值变量传入函数,在函数内部改变不会改变外部作用域的值变量,这就起到了参数隔离。

最后回到我们最开始的一个例子

第一次调用函数:test=multiplier(10)这个时候在内存中实际上已经建立了一个作用域,外层作用域变量factory已经赋值为10,当调用test(10)的时候其中里面的参数可以直接访问factory,因此result为100

因此对于function内部的function来说外部function的变量内部Function可以访问,反之内部function变量外部function不可访问

tips:有时候我们希望传入一个引用变量又不想改变他的值,那么这个时候我们可能需要用到克隆或者切片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值