我想问一下这个with_metaclass()调用在一个类的定义中意味着什么.
例如:
class Foo(with_metaclass(Cls1, Cls2)):
Run Code Online (Sandbox Code Playgroud)
有没有办法检查是否定义了具有指定名称的变量(类成员或独立)?例:
if "myVar" in myObject.__dict__ : # not an easy way
print myObject.myVar
else
print "not defined"
Run Code Online (Sandbox Code Playgroud) 我发现了一个问题exec(它发生在一个必须可以用用户编写的脚本扩展的系统中).我可以将问题本身减少到这段代码:
def fn():
context = {}
exec '''
class test:
def __init__(self):
self.buf = '1'*1024*1024*200
x = test()''' in context
fn()
Run Code Online (Sandbox Code Playgroud)
我希望在调用函数后,垃圾收集器应该释放内存fn.但是,Python进程仍然消耗额外的200MB内存,我完全不知道这里发生了什么以及如何手动释放分配的内存.
我怀疑在里面定义一个类exec并不是一个非常明智的想法,但首先,我想了解上面例子中出了什么问题.
看起来在另一个函数中创建包装类实例可以解决问题,但有什么区别?
def fn():
context = {}
exec '''
class test:
def __init__(self):
self.buf = '1'*1024*1024*200
def f1(): x = test()
f1()
''' in context
fn()
Run Code Online (Sandbox Code Playgroud)
这是我的Python解释器版本:
$ python
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Run Code Online (Sandbox Code Playgroud) 在这里和那里搜索我发现了一些据称有效的案例,但是他们都没有给出一个好的(或任何)解释为什么这是最好的(或唯一的)选择.
以下是案例:
以下是我对案例的看法:
所以:
计算文件中行号的最简单方法是:
while(!feof(fp))
{
ch = fgetc(fp);
if(ch == '\n')
{
lines++;
}
}
Run Code Online (Sandbox Code Playgroud)
但现在要求是我必须计算大文件中的行数.它会对性能产生影响.
有更好的方法吗?
我一直在使用Python timeit模块,但它只是通过交互式Python会话或Unix shell.现在,我正在尝试在Windows命令提示符(cmd.exe)中测量一些代码片段,但它显示以下错误:
C:\Users\Me>python -m timeit '"-".join(map(str, range(100)))'
Traceback (most recent call last):
File "C:\Python33\lib\runpy.py", line 160, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python33\lib\runpy.py", line 73, in _run_code
exec(code, run_globals)
File "C:\Python33\lib\timeit.py", line 334, in <module>
sys.exit(main())
File "C:\Python33\lib\timeit.py", line 298, in main
t = Timer(stmt, setup, timer)
File "C:\Python33\lib\timeit.py", line 131, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
'-.join(map(str,
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
这是相当令人困惑的,因为我没有在字符串中插入任何换行符 - 相反,我实际上直接从timeit模块文档粘贴了示例.
在玩这个时,我尝试测试没有任何空格的片段,因为错误标记了它们之前的字符.即使现在没有异常,模块也会报告相同的执行时间,就像我传递了一个pass …
我试图通过交叉连接两个现有的csv文件来创建一个新的csv文件.
csv文件#1:
hour Elevation Azimuth x y z sunx suny sunz
06:29:00 -0.833 67.72 0.379094033 0.925243946 -0.014538068 0.379094033 0.925243946 -0.014538068
07:00:00 6.28 68.75 0.360264063 0.92641472 0.109387255 0.360264063 0.92641472 0.109387255
Run Code Online (Sandbox Code Playgroud)
csv文件#2:
ID SURFACES A1X A1Y A1Z A2X A2Y A2Z B1X B1Y B1Z B2X B2Y B2Z AX AY AZ BX BY BZ ABX ABY ABZ planex planey planez
1 GROUND 800085.3323 961271.977 -3.07E-18 800080.8795 961246.1978 -3.07E-18 800097.1572 961269.9344 -3.07E-18 800085.3323 961271.977 -3.07E-18 4.4528 25.7792 0.00E+00 11.8249 -2.0426 0.00E+00 0 0 -313.9317514 0 …Run Code Online (Sandbox Code Playgroud) python ×5
c ×1
cmd ×1
command-line ×1
csv ×1
exec ×1
metaclass ×1
six-python ×1
timeit ×1
windows ×1