小编imp*_*his的帖子

Python Metaclass:理解'with_metaclass()'

我想问一下这个with_metaclass()调用在一个类的定义中意味着什么.

例如:

class Foo(with_metaclass(Cls1, Cls2)):
Run Code Online (Sandbox Code Playgroud)
  • 是一个特殊的情况,一个类继承了元类?
  • 新类也是元类吗?

python metaclass six-python

48
推荐指数
2
解决办法
2万
查看次数

检查变量是否在python中定义的简单方法?

有没有办法检查是否定义了具有指定名称的变量(类成员或独立)?例:

if "myVar" in myObject.__dict__ : # not an easy way
  print myObject.myVar
else
  print "not defined"
Run Code Online (Sandbox Code Playgroud)

python

35
推荐指数
4
解决办法
6万
查看次数

Python:exec语句和意外的垃圾收集器行为

我发现了一个问题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)

python garbage-collection exec

7
推荐指数
1
解决办法
500
查看次数

什么时候处理SIGSEGV信号是有意义的?

在这里和那里搜索我发现了一些据称有效的案例,但是他们都没有给出一个好的(或任何)解释为什么这是最好的(或唯一的)选择.

以下是案例:

  1. 尝试在崩溃前进行某种清理.
  2. 向用户提供友好的错误报告,并可能会向您发送错误报告.
  3. 用它来调试.
  4. 尝试执行程序的完全恢复.

以下是我对案例的看法:

  1. SIGSEGV信号不应该首先存在,但是那时还有Murphy定律,并且有一些资源在程序崩溃后我不会隐式释放操作系统(我正在考虑信号量或共享内存).
  2. 墨菲定律也是如此.当出现问题并显示用户发送自动报告的许可时显示对话对用户和开发人员来说都是非常好的.(我不记得我使用的程序的任何错误报告是否曾提到过分段错误.我想我现在会开始注意到.)
  3. 我从来没有想过这个选项.调试器和核心转储看起来更有效.
  4. 据我所知,这是不可能的或不合逻辑的,因为程序状态已损坏,使执行变得不可预测(这是针对(1),(2)和(3)的另一个好的论据).我不知道是否存在一个非常具体的案例,其中可能确实有意义.这让我想起了支持在生产软件中解决断言的论点:有时错误执行比没有执行更好,有时候是航空软件等.

所以:

  • 处理SIGSEGV信号有什么好的理由吗?
  • 以上任何一种情况确实有效吗?为什么或者为什么不?
  • 为什么我们首先允许处理SIGSEGV?

segmentation-fault

6
推荐指数
1
解决办法
180
查看次数

计算行数的最快方法?

计算文件中行号的最简单方法是:

while(!feof(fp))
{
  ch = fgetc(fp);
  if(ch == '\n')
  {
    lines++;
  }
}
Run Code Online (Sandbox Code Playgroud)

但现在要求是我必须计算大文件中的行数.它会对性能产生影响.

有更好的方法吗?

c

4
推荐指数
1
解决办法
1325
查看次数

Python timeit命令行错误:"SyntaxError:EOL扫描字符串文字时"

我一直在使用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 …

python windows command-line cmd timeit

2
推荐指数
1
解决办法
2682
查看次数

在python中创建两个csv文件的笛卡尔积(交叉连接)

我试图通过交叉连接两个现有的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 csv

0
推荐指数
1
解决办法
2696
查看次数