在python中,如何检查对象是否是生成器对象?
试试这个 -
>>> type(myobject, generator)
Run Code Online (Sandbox Code Playgroud)
给出错误 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'generator' is not defined
Run Code Online (Sandbox Code Playgroud)
(我知道我可以检查对象是否有一个next方法让它成为一个生成器,但我想用一些方法来确定任何对象的类型,而不仅仅是生成器.)
我有一个大型项目,包含足够多的模块,每个模块都打印到标准输出.现在随着项目规模的扩大,有大量的没有.print在std上打印很多的语句使程序变得相当慢.
所以,我现在想在运行时决定是否向stdout打印任何东西.我无法对模块进行更改,因为有很多模块.(我知道我可以将stdout重定向到一个文件,但即使这样也相当慢.)
所以我的问题是如何将stdout重定向到什么,即如何使print语句什么都不做?
# I want to do something like this.
sys.stdout = None # this obviously will give an error as Nonetype object does not have any write method.
Run Code Online (Sandbox Code Playgroud)
目前我唯一的想法是创建一个具有write方法(什么都不做)的类,并将stdout重定向到这个类的实例.
class DontPrint(object):
def write(*args): pass
dp = DontPrint()
sys.stdout = dp
Run Code Online (Sandbox Code Playgroud)
在python中有一个内置机制吗?还是有比这更好的东西?
python文档说,cPickle比Pickle更快的原因是,前者是用C实现的.这究竟是什么意思?
我正在使用Python制作高级数学模块,有些计算需要花费大量时间.这是否意味着如果我的程序在C中实现,它可以更快?
我想从其他Python程序导入这个模块,就像我可以导入cPickle一样.
你能解释一下如何在C中实现Python模块吗?
我的机器上安装了CUDA 2.1,它有一个带64个cuda核心的显卡.我编写了一个程序,我同时初始化30000个块(每个块1个线程).但是没有从gpu获得令人满意的结果(它的执行速度比cpu慢)
为了获得良好的性能,块的数量是否必须小于或等于内核的数量?或者是性能与块数无关
在我的python程序的某些部分,我需要这样做 -
(这一切都在循环中)
现在的问题是,虽然命令'1' 在'2'之前执行 ,'3.' 和'4.',它实际上显示命令'1'的消息 执行完所有4个命令后,屏幕上显示(以及命令'4'的消息).我想要的是它应该显示命令'1'的消息.首先,然后从剩下的代码开始......我怎样才能实现这一目标?(有没有像打印命令一样刷新?)
我试图找到一个文件的扩展名,给它的名字作为字符串.我知道我可以使用的功能os.path.splitext,但它并不按预期的情况下,我的文件扩展名是.tar.gz或.tar.bz2因为它提供了扩展的gz和bz2,而不是tar.gz和tar.bz2分别.
所以我决定使用模式匹配自己找到文件的扩展名.
print re.compile(r'^.*[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.gz')group('ext')
>>> gz # I want this to come as 'tar.gz'
print re.compile(r'^.*[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.bz2')group('ext')
>>> bz2 # I want this to come 'tar.bz2'
Run Code Online (Sandbox Code Playgroud)
我正在使用(?P<ext>...)我的模式匹配,因为我也希望得到扩展名.
请帮忙.
我希望知道在linux下执行程序所需的时间(以微秒为单位)(或更高的准确性).目前我正在使用该time命令,但它以最大毫秒精度给出了我.有没有办法调整time命令以提供更好的准确性或是否有其他命令相同?
我正在尝试使用python中的matplotlib制作以下数据的等高线图.数据属于这种形式 -
# x y height
77.23 22.34 56
77.53 22.87 63
77.37 22.54 72
77.29 22.44 88
Run Code Online (Sandbox Code Playgroud)
数据实际上包含近10,000个点,我正在从输入文件中读取这些点.然而,z的不同可能值的集合很小(在50-90之间,整数),并且我希望每个这样的不同z具有轮廓线.
这是我的代码 -
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import csv
import sys
# read data from file
data = csv.reader(open(sys.argv[1], 'rb'), delimiter='|', quotechar='"')
x = []
y = []
z = []
for row in data:
try:
x.append(float(row[0]))
y.append(float(row[1]))
z.append(float(row[2]))
except Exception as e:
pass
#print e
X, Y …Run Code Online (Sandbox Code Playgroud) 我写了一个简单的C模块,使用printf打印到stdout.
// sample.c
func_print()
{
printf("Hello World!\n");
}
Run Code Online (Sandbox Code Playgroud)
后来,我使用了这个包装器,SWIG所以我也可以func_print在我的python程序中使用它.在这个程序中,我已将stdout重定向到textctrl小部件.print正如预期的那样,我在textctrl小部件中正确打印的任何东西都能正确打印.
# sample.py
...
sys.stdout = textctrl # textctrl is a TextCtrl widget (wxPython).
print 'Hello from Python!' # prints in the textctrl widget, as expected.
Run Code Online (Sandbox Code Playgroud)
但是,当我调用C函数func_print()(来自sample.py)时,它会打印到终端而不是textctrl小部件.
func_print() # [Problem] prints to the terminal window, instead of the textctrl widget.
Run Code Online (Sandbox Code Playgroud)
不知何故,似乎stdoutC模块中的for函数没有按预期重定向.请帮我解决这个问题.谢谢.
在python中,为什么建议继承我们从类中创建的任何类object,为什么不直接将它作为基类?我注意到一个重要的事情是,__slots__如果我将我的类作为基类(而不是作为类的子类object),则声明不起作用.通过从班级继承我的班级,我还有哪些其他优点/缺点object?
python ×8
c ×2
class ×1
contour ×1
cuda ×1
generator ×1
linux ×1
matplotlib ×1
printing ×1
python-2.7 ×1
python-c-api ×1
regex ×1
swig ×1
time ×1