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()比较元组?
我想用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)
我必须忽视一些事情.
我敢说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的合法声誉.但是,我对计算值之间的这种差异的原因感到好奇.有谁知道造成这种差异的原因是什么?
我正在使用大矩阵,所以我使用的是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) 我正在开发一个基于Web的用户界面,它从数据库中绘制一些数据并将其显示给用户.还有,从字面上看,数以百万计可能产生的,所以我的想法是动态生成图形,将其保存到一个临时文件,服务于网页和最后的一段时间后删除图像不同的图形.
因此,我想要在$ _SESSION中存储已生成图像的路径,以便在会话销毁时删除文件.PHP 会在会话被销毁时执行某个给定的函数(在这种情况下会负责删除上述文件)吗?
如果不是所有必须在其上完成的操作都成功(即,如果引发异常),我需要删除一个文件.它可以像使用一样简单,除了:,删除文件然后重新引发异常,但是在这种情况下,如果由于任何神秘的原因无法在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的方法吗?
由于调用__del __()方法的不稳定情况,将忽略执行期间发生的异常,并向sys.stderr输出警告
什么是最完全和绝对地忽略__del __()中引发的异常的Pythonic方法 - 也就是说,不仅忽略了异常,而且还没有打印到sterr.有没有比暂时将stderr重定向到空设备更好的方法?
我无法理解为什么这会抛出对"floor"的未定义引用 ":
double curr_time = (double)time(NULL);
return floor(curr_time);
Run Code Online (Sandbox Code Playgroud)
难道它没有被加倍,这是什么楼层收到?
我需要解析大端二进制文件并将其转换为小端。然而,将文件交给我的人似乎无法告诉我有关它包含哪些数据类型,或者它是如何组织的 \xe2\x80\x94 他们唯一确定的是它是一个大-带有一些字节序的二进制文件。然而,函数 struct.unpack() 需要一个格式字符作为其第一个参数。
\n\n这是二进制文件的第一行:
\n\nimport binascii\npath = "BC2003_lr_m32_chab_Im.ised" \nwith open(path, \'rb\') as fd:\n line = fd.readline()\n print binascii.hexlify(line)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\na0040000dd0000000000000080e2f54780f1094840c61a4800a92d48c0d9424840a05a48404d7548e09d8948a0689a48e03fad48a063c248c01bda48c0b8f44 8804a0949100b1a49e0d62c49e0ed41499097594900247449a0a57f4900d98549b0278c49a0c2924990ad9949a0eba049e080a8490072b049c0c2b849d077c14 93096ca494022d449a021de49a099e849e08ff349500a
\n
是否可以在不了解文件的情况下更改文件的字节序?
\n