小编plo*_*lok的帖子

最多两个元组

Python文档声明,当使用多个参数调用时,max()返回最大的参数.

>>> a = (1, 1, 1, 9)
>>> b = (4, 5, 6)
>>> max(a, b)
(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

什么定义了如何元组,在这种情况下,是什么?元组a具有更多数量的元素(四个对三个),并且其最大值(9)大于可以在b(6)中找到的最大数量,因此根据任何标准,我预期它将是回来了.如何通过max()比较元组?

python max

11
推荐指数
1
解决办法
4063
查看次数

混合使用抽象类和namedtuple

我想用define和abstract方法定义一个namedtuple和一个基类的混合:

import abc
import collections

class A(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def do(self):
        print("U Can't Touch This")

B = collections.namedtuple('B', 'x, y')

class C(B, A):
    pass

c = C(x=3, y=4)
print(c)
c.do()
Run Code Online (Sandbox Code Playgroud)

根据我的理解阅读我所看到的文档和其他示例,c.do()应该引发错误,因为C类没有实现do().但是,当我运行它...它的工作原理:

B(x=3, y=4)
U Can't Touch This
Run Code Online (Sandbox Code Playgroud)

我必须忽视一些事情.

python

8
推荐指数
1
解决办法
611
查看次数

Fortran和C++计算的值之间的差异

我敢说Fortran和C++计算的数值会更相似.然而,从我所经历的情况来看,事实证明,计算出的数字在十进制数字太少之后开始发散.在将一些遗留代码从前一种语言移植到后一种语言的过程中,我遇到了这个问题.最初的Fortran 77代码......

  INTEGER M, ROUND
  DOUBLE PRECISION NUMERATOR, DENOMINATOR

  M = 2
  ROUND = 1
  NUMERATOR=5./((M-1+(1.3**M))**1.8)
  DENOMINATOR = 0.7714+0.2286*(ROUND**3.82)
  WRITE (*, '(F20.15)') NUMERATOR/DENOMINATOR
  STOP
Run Code Online (Sandbox Code Playgroud)

...输出0.842201471328735,而它的C++等价...

int m = 2;
int round = 1;
long double numerator = 5.0 / pow((m-1)+pow(1.3, m), 1.8);
long double denominator = 0.7714 + 0.2286 * pow(round, 3.82);
std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(15)
          << numerator/denominator << std::endl;
exit(1);
Run Code Online (Sandbox Code Playgroud)

...返回0.842201286195064.也就是说,计算值仅等于第六个小数.虽然不是特别是Fortran的倡导者,但我觉得它的结果是"正确的",因为它的数字cruncher的合法声誉.但是,我对计算值之间的这种差异的原因感到好奇.有谁知道造成这种差异的原因是什么?

c++ math fortran numeric

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

NumPy和memmap:[Errno 24]打开的文件过多

我正在使用大矩阵,所以我使用的是NumPy的memmap.但是,我收到一个错误,因为显然memmap使用的文件描述符没有被关闭.

import numpy
import tempfile

counter = 0
while True:
    temp_fd, temporary_filename = tempfile.mkstemp(suffix='.memmap')
    map = numpy.memmap(temporary_filename, dtype=float, mode="w+", shape=1000)
    counter += 1
    print counter
    map.close()
    os.remove(temporary_filename)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,当调用close()方法时,memmap文件将被关闭.但是,上面的代码不能永远循环,因为它最终抛出" [Errno 24]太多打开文件 "错误:

    1016
    1017
    1018
    1019
    Traceback (most recent call last):
      File "./memmap_loop.py", line 11, in <module>
      File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__
    EnvironmentError: [Errno 24] Too many open files
    Error in sys.excepthook:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/site-packages/apport_python_hook.py", line 38, in apport_excepthook
    ImportError: No module named packaging_impl

    Original exception …
Run Code Online (Sandbox Code Playgroud)

python memory-management numpy

5
推荐指数
1
解决办法
2219
查看次数

在会话销毁时执行功能

我正在开发一个基于Web的用户界面,它从数据库中绘制一些数据并将其显示给用户.还有,从字面上看,数以百万计可能产生的,所以我的想法是动态生成图形,将其保存到一个临时文件,服务于网页和最后的一段时间后删除图像不同的图形.

因此,我想要在$ _SESSION中存储已生成图像的路径,以便在会话销毁时删除文件.PHP 会在会话被销毁执行某个给定的函数(在这种情况下会负责删除上述文件)吗?

php session

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

仅在引发异常时清理对象

如果不是所有必须在其上完成的操作都成功(即,如果引发异常),我需要删除一个文件.它可以像使用一样简单,除了:,删除文件然后重新引发异常,但是在这种情况下,如果由于任何神秘的原因无法在except子句中删除文件,原始异常将会丢失.

我能想到的最好的是:

try:
    file_path = "whatever.jpg"
    # do stuff with file
except:
    exception_raised = True
    raise
finally:
    try:
        if exception_raised:
            os.unlink(file_path)
    except:
        pass

return file_path   # everything OK
Run Code Online (Sandbox Code Playgroud)

有人知道更好,更Pythonic的方法吗?

python exception try-catch-finally

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

忽略在__del __()中打印到stderr的异常

根据Python(2.7)文档:

由于调用__del __()方法的不稳定情况,将忽略执行期间发生的异常,并向sys.stderr输出警告

什么是最完全和绝对地忽略__del __()中引发的异常的Pythonic方法 - 也就是说,不仅忽略了异常,而且还没有打印到sterr.有没有比暂时将stderr重定向到空设备更好的方法?

python

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

双层(time_t)

我无法理解为什么这会抛出对"floor"的未定义引用 ":

double curr_time = (double)time(NULL);
return floor(curr_time);
Run Code Online (Sandbox Code Playgroud)

难道它没有被加倍,这是什么楼层收到?

c math floor

0
推荐指数
2
解决办法
643
查看次数

在不了解字符串的情况下使用 struct.unpack()

我需要解析大端二进制文件并将其转换为小端。然而,将文件交给我的人似乎无法告诉我有关它包含哪些数据类型,或者它是如何组织的 \xe2\x80\x94 他们唯一确定的是它是一个大-带有一些字节序的二进制文件。然而,函数 struct.unpack() 需要一个格式字符作为其第一个参数。

\n\n

这是二进制文件的第一行:

\n\n
import binascii\npath = "BC2003_lr_m32_chab_Im.ised"            \nwith open(path, \'rb\') as fd:\n    line = fd.readline()\n    print binascii.hexlify(line)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

a0040000dd0000000000000080e2f54780f1094840c61a4800a92d48c0d9424840a05a48404d7548e09d8948a0689a48e03fad48a063c248c01bda48c0b8f44 8804a0949100b1a49e0d62c49e0ed41499097594900247449a0a57f4900d98549b0278c49a0c2924990ad9949a0eba049e080a8490072b049c0c2b849d077c14 93096ca494022d449a021de49a099e849e08ff349500a

\n
\n\n

是否可以在不了解文件的情况下更改文件的字节序?

\n

python endianness

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