Python笔记

本文详细探讨了Python中列表的不同创建方法及其影响,包括列表元素的内存地址特性。此外,还深入解析了全局变量与局部变量的区别,以及如何正确地在函数内部修改列表和全局变量的值。

1. 生成list的不同方法及影响

a=[set()]*5
a[0].add(1)
print a

b=[]
for i in range(5):
	b.append(set())
b[0].add(1)
print b

c=[1]*5
c[0]=2
print c

<<< [set([1]), set([1]), set([1]), set([1]), set([1])]
<<< [set([1]), set([]), set([]), set([]), set([])]
<<< [2, 1, 1, 1, 1]

以上运行结果为 [set([1]), set([1]), set([1]), set([1]), set([1])], [set([1]), set([]), set([]), set([]), set([])],[2, 1, 1, 1, 1]。这是因为list a 中的元素a[0]~a[4]全部指向同一个地址,该地址对应一个空的set,由于set是可以改变值的类型,所以对a[0]对应的set操作就改变了a[0]~a[4]所指向的地址上那个set的值而不改变a[0]所指向的地址,所以访问a[1]~a[4]也会得到set(1)的结果。list b中的元素分别指向不同地址,所以对b[0]对应的set操作不影响b[1]~b[4]所指向的地址上的那些set,b[0]指向的地址不变,该地址上的set变为set(1)。list c中的元素均指向同一个地址,该地址对应整型数1,由于整型数不可以改变值,所以对c[0]赋值操作会改变c[0]指向的地址,c[0]新指向的地址对应整型数2,而c[1]~c[4]指向的地址不变。

2. 全局变量和局部变量

num=1
def f_1():
    #num=2
    num1=num+1
    print num
    print num1
    #global num
    print num
    #num+=4
f_1()
print num

li=[1,2]
def f_2():
    # global li
    # li=[5,8,7]
    li[0]+=1
    li[1]=6
f_2()
print li
全局变量在函数体内可以直接访问,但不能用赋值语句修改,如果使用了赋值语句,如 num=2 和li=[5,8,7],会在函数体内生成一个同名的局部变量,之后函数体内的访问均指向该局部变量。如果想在函数体内修改全局变量的值,可使用global num和global li 来声明之后的访问为全局变量,之后使用赋值语句不会产生局部变量而是修改全局变量。对于上面列表的例子 li 而言,如果f_2()中不声明global li,无法直接在函数体内改变 li 指向的地址,但是通过访问 li 指向的地址,可以改变 li 的元素li[0]和li[1]指向的地址,即带有li[0]和li[1]的赋值语句并不会生成局部变量,而是访问全局变量 li 指向的地址来修改li[0]和li[1]的值,相当于列表具有全局变量的属性,但列表内元素并不具备。

另外函数体的形参相当于函数体内的局部变量,如果和全局变量重名,函数体内就无法访问全局变量,此时如果函数体内使用global语句声明,python会报错:“name 'XXXX' is local and global”,说变量名XXXX在函数体内即是全局变量又是局部变量。

要避免全局变量和局部变量混用,一个好的方法是所有全局变量都用大写字母命名,这样就可以降低因混用而出现错误的可能。



内容概要:本文详细介绍了“电动汽车聚合可行域的内-外结合近似方法”的Matlab代码实现,旨在通过数值仿真手段对大规模电动汽车集群作为灵活资源参与电网调度的能力边界进行建模与逼近。该方法融合内部凸包构造与外部约束逼近策略,精确刻画电动汽车在充电状态、功率调节、时间维度等方面的聚合可调能力范围,形成紧致的可行域表示,为高比例电动车接入下的电力系统优化调度、需求响应、车网互动(V2G)等关键应用提供可靠的建模基础。文中强调科研应兼顾严谨逻辑与创新思维,并倡导借助YALMIP等成熟优化工具提升研究效率。完整的代码、工具包及相关案例可通过指定网盘链接和微信公众号“荔枝科研社”获取。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员,尤其适用于从事新能源并网、电动汽车调度、智能电网、综合能源系统等方向的研究生与工程技术人员。; 使用场景及目标:①研究大规模电动汽车集群的聚合建模与灵活性量化方法;②实现电动汽车聚合可行域的内-外近似算法;③支撑含高渗透率电动汽车的电力系统日前-实时协同优化调度;④学习并应用YALMIP工具进行数学规划建模与求解;⑤为需求响应、市场机制设计及V2G运营提供技术支撑。; 阅读建议:建议读者按照文档指引循序渐进学习,结合网盘提供的完整资源(包括YALMIP工具包与示例代码)进行实践调试,重点掌握内-外近似方法的数学建模逻辑、约束处理技巧及优化求解流程,并参考团队发布的其他相关案例,深化对优化算法与仿真技术在能源系统中应用的理解。
下载代码方式:https://pan.quark.cn/s/93e47adaae45 医学研究人员近期识别了若干新型病毒,经由对这些病毒的解析,揭示出它们的遗传物质序列均呈现环状形态。当前,研究人员已汇集了丰沛的病毒遗传物质与人类遗传物质样本数据,期望能迅速辨识个体是否感染了相关病毒。为便于探究,研究人员将人类遗传物质与病毒遗传物质均表述为由若干字母构成的字符串序列。继而,检测某种病毒遗传物质序列是否在患者遗传物质序列中有所显现,倘若出现,则表明该个体感染了对应病毒,反之则未感染。《病毒感染检测实验报告》是在医学研究背景下,依托软件技术基础中的编程知识完成的一个课程设计任务,其目的在于评估人体是否感染特定病毒。在此实验中,病毒遗传物质与人类遗传物质被表现为字母序列,通过比对病毒遗传物质序列是否存在于人的遗传物质序列中,从而判定感染状态。在程序构建方面,该实验所涉及的核心知识要点包括: 1. **字符串操作**:程序需处理病毒遗传物质与人类遗传物质的序列,这些序列以字符串形式呈现。字符串操作涵盖输入、输出、比较及匹配等操作,是C/C++编程的基础。 2. **线性表**:遗传物质序列可视为线性数据结构,可通过数组来表示。程序运用全局变量数组`V`和`D`存储病毒与人的遗传物质序列。 3. **栈**:在循环展开病毒遗传物质时,可能需借助栈数据结构来保存某个阶段遗传物质序列的状态,以便进行所有可能的匹配尝试。 4. **BF算法**(Brute Force,暴力搜索算法):BF算法是一种基础性的字符串匹配方法,用于在文本中搜寻模式。在此,BF算法用于在人的遗传物质序列中探寻病毒遗传物质序列的所有展开形态。 5. **文件处理**:程序需从文件《病毒感染检测输入数据...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值