似乎有两种不同的方法将字符串转换为字节,如TypeError的答案所示:'str'不支持缓冲区接口
哪种方法更好或更好Pythonic?或者只是个人喜好?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
Run Code Online (Sandbox Code Playgroud) 当需要连接多个目录时,如在可执行搜索路径中,存在与os相关的分隔符.对于Windows来说';',对于Linux来说就是这样':'.Python中是否有一种方法可以分割哪个字符?
在讨论这个问题时如何使用python找出我的python路径?,建议os.sep会这样做.答案是错误的,因为它是目录或文件名组件的分隔符,等同于'\\'或'/'.
我首先要说的是,使用智能指针,你永远不必担心这一点.
以下代码有什么问题?
Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)
这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:
在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.
有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.
C++是否为在函数调用中创建但未用作参数的临时变量的生命周期提供保证?这是一个示例类:
class StringBuffer
{
public:
StringBuffer(std::string & str) : m_str(str)
{
m_buffer.push_back(0);
}
~StringBuffer()
{
m_str = &m_buffer[0];
}
char * Size(int maxlength)
{
m_buffer.resize(maxlength + 1, 0);
return &m_buffer[0];
}
private:
std::string & m_str;
std::vector<char> m_buffer;
};
Run Code Online (Sandbox Code Playgroud)
以下是您将如何使用它:
// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);
std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Run Code Online (Sandbox Code Playgroud)
什么时候会调用临时StringBuffer对象的析构函数?是吗:
我知道C++保证本地临时变量只要有引用就有效 - 当引用成员变量时,它是否适用于父对象?
谢谢.
我在使用sys.getsizeof相同的列表时看到了一些不一致的地方.(Python 2.7.5)
>>> lst = [0,1,2,3,4,5,6,7,8,9]
>>> sys.getsizeof(lst)
76
>>> lst2 = list(lst)
>>> sys.getsizeof(lst2)
104
>>> lst3 = list(lst2)
>>> sys.getsizeof(lst3)
104
>>> sys.getsizeof(lst[:])
76
>>> sys.getsizeof(lst2[:])
76
Run Code Online (Sandbox Code Playgroud)
有人有简单的解释吗?
我正在尝试将一些日期/时间转换为UTC,我认为这在Python中很简单 - 包括电池,对吗?好吧,除了Python(2.6)不包含任何tzinfo类之外,它很简单.没问题,快速搜索会出现python-dateutil,它应该完全符合我的需要.
问题是我需要在Windows上安装它.我能够使用7-zip升级.tar.gz2发行版,但现在我留下了一系列文件,没有关于如何继续的指导.当我尝试运行setup.py时,我收到错误"没有名为setuptools的模块".
您是否必须传递删除new返回的相同指针,或者您可以将指针传递给其中一个类基类型?例如:
class Base
{
public:
virtual ~Base();
...
};
class IFoo
{
public:
virtual ~IFoo() {}
virtual void DoSomething() = 0;
};
class Bar : public Base, public IFoo
{
public:
virtual ~Bar();
void DoSomething();
...
};
Bar * pBar = new Bar;
IFoo * pFoo = pBar;
delete pFoo;
Run Code Online (Sandbox Code Playgroud)
当然,这大大简化了.我真正想要做的是创建一个充满boost :: shared_ptr的容器,并将其传递给一些代码,这些代码在完成后将从容器中删除它.这段代码对Bar或Base的实现一无所知,并且依赖于shared_ptr析构函数中隐含的delete运算符来做正确的事情.
这可能有用吗?我的直觉说不,因为指针不会有相同的地址.另一方面,dynamic_cast <Bar*>应该可以工作,所以编译器正在存储足够的信息来解决它.
mov eax, DWORD PTR _this$[ebp]
Run Code Online (Sandbox Code Playgroud)
跟踪汇编程序显示这是传递给delete函数的指针.谜团已揭开.
我已经修复了将虚拟析构函数添加到IFoo的示例,这是一个简单的疏忽.再次感谢所有指出的人.
我正在阅读新的英特尔凌动330的评论,他们注意到任务管理器显示4个核心 - 两个物理核心,另外两个由超线程模拟.
假设你有一个包含两个线程的程序.假设这些是在PC上进行任何工作的唯一线程,其他一切都是空闲的.操作系统将两个线程放在同一个核心上的概率是多少?这对程序吞吐量有很大影响.
如果答案不是0%,那么除了创建更多线程之外,是否还有其他缓解策略?
我希望Windows,Linux和Mac OS X会有不同的答案.
在Python 2.7中,repra float返回最接近17位数的最接近的十进制数; 这足够精确,可以唯一地标识每个可能的IEEE浮点值.str一个float类似的工作,除了它将结果限制为12位数; 对于大多数用途,这是一个更合理的结果,并使您免受二进制和十进制表示之间的细微差别.
Python 2演示:http://ideone.com/OKJtxv
print str(1.4*1.5)
2.1
print repr(1.4*1.5)
2.0999999999999996
Run Code Online (Sandbox Code Playgroud)
在Python 3.2中它出现str并repr返回相同的东西.
Python 3演示:http://ideone.com/oAKRsb
print(str(1.4*1.5))
2.0999999999999996
print(repr(1.4*1.5))
2.0999999999999996
Run Code Online (Sandbox Code Playgroud)
是否存在描述变更的PEP或负责人的其他声明?
我有一个带内循环的简单函数 - 它缩放输入值,在查找表中查找输出值,并将其复制到目标.(ftol_ambient是我从网上复制的一种技巧,用于将float快速转换为int).
for (i = 0; i < iCount; ++i)
{
iScaled = ftol_ambient(*pSource * PRECISION3);
if (iScaled <= 0)
*pDestination = 0;
else if (iScaled >= PRECISION3)
*pDestination = 255;
else
{
iSRGB = FloatToSRGBTable3[iScaled];
*pDestination = iSRGB;
}
pSource++;
pDestination++;
}
Run Code Online (Sandbox Code Playgroud)
现在我的查找表是有限的,并且浮点数是无限的,因此有可能出现一个一个错误.我用一些代码创建了一个函数副本来处理这种情况.请注意,唯一的区别是添加了2行代码 - 请忽略丑陋的指针转换.
for (i = 0; i < iCount; ++i)
{
iScaled = ftol_ambient(*pSource * PRECISION3);
if (iScaled <= 0)
*pDestination = 0;
else if (iScaled >= PRECISION3)
*pDestination = 255;
else
{
iSRGB = …Run Code Online (Sandbox Code Playgroud) python ×5
c++ ×4
python-3.x ×2
boost ×1
install ×1
list ×1
multicore ×1
null ×1
optimization ×1
pointers ×1
polymorphism ×1
python-2.7 ×1
string ×1
visual-c++ ×1
visual-c++-6 ×1