Python通过指针取变量

提问人:萧飞时间:2021-09-03 14:16:47

最近对Python通过指针取变量这个问题挺纠结,大家给我点建议。

6个回答
逯子扬

你可以考虑遍历一下所有的key,然后在value匹配的时候break。

:

Ifdict[key]==value:

print(key)

print(value)

break

施灵妍

不是。

应该是指向指针的指针,只不过变量本身的地址在python中不提供访问途径。也就是只能访问这个指针所指地址(指针)和此地址里的内容。

比如

python中a="xyz"

a本身的地址(对应的C运算&a)python里是没有办法看到的。

python的id(a),返回的是"xyz"在内存中的起始地址,而不是存储a变量本身的地址。

尹智鑫

在上文的优化中,对每500个用户,会进行一些计算并记录结果在磁盘文件中。原本以为这么做,这些结果就在磁盘文件中了,而不会再继续占用内存;但实际上,python的大坑就是Python不会自动清理这些内存。这是由其本身实现决定的。具体原因网上多有文章介绍,这里就不copy了。本篇博客将贴一个笔者的实验脚本,用以说明Python确实存在这么一个不释放内存的现象,另外也提出一个解决方案,即先del,再显式调用gc.collect.脚本和具体效果见下。实验环境一Win7,Python2.7[python],(way=1):printtime:ifway==1:passelse:#way2,ifway==1orway==2:passelse:#way3gc.collectprinttimeif__name__=="__main__":print"Testway1:justpass"mem(way=1)sleep(20)print"Testway2:justdel"mem(way=2)sleep(20)print"Testway3:del,andthengc.collect"mem(way=3)sleep(20)运行结果如下[plain]:...:...:del,andthengc.collect...95对于way1和way2,结果是完全一样的,程序内存消耗峰值是72KB,在sleep20秒时,内存实时消耗是20KB;对于way3,程序内存消耗峰值同上,但是sleep时内存实时消耗就只有KB了。实验环境二Ubuntu14.10,Python2.7.3运行结果[plain]:...:...1Testway3:del,andthengc.collect...11[plain]@my_machine:~$psaux|greptest_:,''?.06./1S+14:390:_mem..00./2S+14:400:=autotest_memubuntu@my_machine:~$psaux|greptest_:,''?.06./1S+14:390:_mem..00./2S+14:400:=autotest_memubuntu@my_machine:~$psaux|greptest_:,''?.60./1S+14:390:_mem.py结论以上说明,当调用del时,其实Python并不会真正release内存,而是将其继续放在其内存池中;只有在显式调用gc.collect时,才会真正release内存。进一步其实回到上一篇博客的脚本中,也让其引入gc.collect,然后写个监控脚本监测内存消耗情况[plain]((1));dopsaux|sortnk5,6|grepmy_script;free;sleep5;done结果发现内存并不会在每500个用户一组执行完后恢复,而是一直持续消耗到仅存约70MB时,gc才好像起作用。本环境中,机器使用的是,总内存2G,可用内存约为1G,本脚本内存常用消耗是900M1G。换句话说,对于这个脚本来说,gc并没有立即起作用,而是在系统可用内存从11.2G下降到只剩70M左右时,gc才开始发挥作用。这点确实比较奇怪,不知道和该脚本是在Thread中使用的gc.collect是否有关,或者是gc发挥作用原本就不是可控的。笔者尚未做相关实验,可能在下篇博客中继续探讨。但是,可以肯定的是,若不使用gc.collect,原脚本将会将系统内存耗尽而被杀死。这一点从syslog中可以明显看出。

甯朝吉

1.使用连接符+world="World"print"Hello"+world+"!"2.使用占位符来内插world="World"print"Hello%s!"%world3.使用函数li=['my','name','is','bob']mystr=''.join(li)上面的语句中字符串是作为参数传入的,可以直接用变量替换begin_date=':00:00'end_date=':59:59'select*_date(begin_date,':MI:SS')andto_date(end_date,':MI:SS')

黎山巍

对于Perl的一行式perl程序来说,选择要输出的、要删除的、要插入/追加的行是非常容易的事情,因为print/say决定行是否输出/插入/追加/删除。虽然简单,但对于广泛应用在sed的示例还是可以拿到这里来讨论一番。因为输出/删除/插入/追加行都是通过print/say在不同条件下的操作,所以本文只会介绍输出操作,删除/插入/追加其实都是同样的原理。输出第一行$perllne'print;exit'file.log输出第13行$perlne'printif$.==13'file.log输出前12'file.log输出能匹配的行$perlne'printif/regexp/'file.log输出两个匹配之间的行$perlne'printif/regexp1/../regexp2/'file.log输出匹配行的前一行只需将每行保留到变量中,如果当前行匹配了,则输出上一行保存的值。$perlne'/regexp/&&$last&&print$last;$last=$_'file.log如果想要输出匹配的前M行,只需把这些数量的行保存到数组中,并不断地shift剔除就可以。输出匹配行的后一行$perlne'$p&&print;$p=/regexp/'file.logPerl中正则表达式的匹配操作返回的是成功与否的布尔真假,所以$p=/regexp/表示如果匹配了,则$p的值为真,否则为假。如果$p为真,则下一行将被输出,且继续对输出行进行匹配,如果输出行仍然能匹配,则继续输出下一行。上面的过程可以改写成逻辑更为清晰的一行式$perlne'if($p){print;$p=0}++$pif/regexp/'file.log上面的$p是一个状态标记变量,如果匹配成功,就标记为真值,并在输出的时候重置状态变量。还可以采用另一种处理逻辑自己编写从>读取行的while循环,如果匹配了就继续读入下一行。因为读入的下一行可能继续匹配,所以在while循环中使用redo逻辑回到while循环的开头。$perlse'while(>){if(/$reg/){if(eof){exit;}print$_=>;}redoif/$reg/;}'reg="REGEXP"file.log输出匹配行及其后5行上面采用状态标记变量$p,这个状态标记变量可以更深入地使用。如果匹配了,则$p设置为5,然后输出后面的行时对$p自减。$perlne'if($p){print;$p}if(/regexp/){$p=5;print};'file.log连续行去重$perlne'nextif"$line"eq"$_";print$line=$_;'file.log

施维光

网页链接

第一句话

.,..

没看到有说可以直接访问data。

你可以这样加这样的函数

再在python里面调用。

相关的问题
  • js通过ajax连接python变量

    js是前端脚本,可以通过ajax让后端的服务器调用python脚本,然后返回处理结果。前端直接调用任何本地文件都是不安全也是不推荐的

  • 通过环境变量写python

    你这个图上的显示表示环境变量已经配置好了

  • python通过变量来引用函数

    {=null;(Device.class){if(display==null||display.)SWT.error(SWT.ERROR_DEVICE_DISPOSED);if(!display.){if(runnable=

  • python通过变量找对应列表

    你可以考虑遍历一下所有的key,然后在value匹配的时候break。:Ifdict[key]==value:print(key)print(value)break

  • 在python中实例变量在类的内部通过

    9.3.5.类和实例变量一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:classDog:kind='canine'#def__init__(self,name):self.na

  • python通过变量提取字典值

    你可以考虑遍历一下所有的key,然后在value匹配的时候break。:Ifdict[key]==value:print(key)print(value)break

  • python通过变量名获取对象的属性值

    首先通过一个例子来看一下本文中可能用到的对象和相关概念。#coding:#模块,sys指向这个模块对象:pass#函数,foo指向这个函数对象classCat(object):#类,Cat指向这个类对象def__init__(self,name='kitty'):self.name=(se

  • python通过字符串引用变量的值

    1.使用连接符+2.使用占位符来内插3.使用函数上面的语句中字符串是作为参数传入的,可以直接用变量替换

  • python通过键盘将多个值赋给变量

    python实现同时给多个变量赋值的方法这篇文章主要介绍了python实现同时给多个变量赋值的方法,涉及Python中变量赋值的相关技巧,非常具有实用价值,分享给大家供大家参考。具体分析如下python中可以同时给多个变量赋值,下面列举了三种方法#