闭包

一、了解函数的执行

def hello():

    print("hello")

hello()

看一下上面的代码的执行过程,代码在解释器中是按照顺序的,一开始从上往下执行时,在执行第一行语句时并不会跳入函数体,因为此时的一二行代码只是对函数进行了定义,只有当执行到hello()时,它才往后进入函数体进行执行。

二、了解函数的定义,调用,函数名,函数引用

1.函数定义,上面的一二行就是对函数进行定义

def 函数名():

    函数体

2.调用,python中对函数的调用使用 函数名()

3.函数名就是def和()之间的字符

4.函数引用,函数引用就是把函数名赋于另一个变量,这个变量和函数名指向同一个地址空间,同样可以调用函数。

通过hello,a两个变量可以看出他们属于同种类型,通过id()变量可以看出他们指向同一内存空间。

三、闭包

def out(ms):
    def init():
        print(ms)
    return init
printer=out(1)
printer()

先看这样一段代码,代码由上往下执行,第一行是对函数进行定义,但是没有进入函数体,直到第五行,这行先执行右边部分,1作为实参代替ms的位置,调用函数,进入函数体,这时可以看出不同的是,函数体里面还定义一个函数,二到三行,这是虽然进入了外面的函数体,可是里面的函数依旧是函数定义,所以并没有进入它函数体,外面函数体最后返回了里面函数的函数名,所以我们可以像上面的例子一样定义一个变量对函数进行引用,也从上面看出,引用的变量名加上()也一样能对函数进行调用,而此时要清楚,我们返回的是里面函数的函数名,我们定义的printer是对init函数的引用,最后一行其实就是对init()函数的调用。

也就进入init函数,调用print语句,而此时刚刚好用到前面的形参ms,在前面,其实系统以及把实参1传进了形参ms里面,所以此时对ms输出。

1.闭包:在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。

由此可见,上面的例子其实是一个闭包。闭包有两个特征:

1.把某个函数当成对象返回,上面例子中把init当成对象返回

2.夹带着外部变量,在上面例子中ms是外部变量

 

 

 

 

 

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值