在django.utils.functional.py:
for t in type(res).mro(): # <----- this
if t in self.__dispatch:
return self.__dispatch[t][funcname](res, *args, **kw)
Run Code Online (Sandbox Code Playgroud)
我不明白mro().它是做什么的,"mro"是什么意思?
我一直在研究朋友编写的一些C++代码,并且我在使用gcc4.6编译时遇到了以前从未见过的错误:
error: use of deleted function
‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed:
uninitialized non-static const member ‘const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h’
Run Code Online (Sandbox Code Playgroud)
编辑:这来自使用boost MSM:Boost网页的部分代码
Edit2:= delete()源代码中没有任何地方使用过.
一般来说,这个错误意味着什么?发生此类错误时,我应该寻找什么?
我开始尝试使用python在sqlite中存储字符串,并得到消息:
sqlite3.ProgrammingError:除非使用可解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串.强烈建议您只需将应用程序切换为Unicode字符串.
好的,我切换到Unicode字符串.然后我开始收到消息:
sqlite3.OperationalError:无法使用文本'SigurRós'解码为UTF-8列'tag_artist'
尝试从数据库中检索数据时.更多的研究和我开始在utf8编码,但随后'SigurRós'开始看起来像'SigurRós'
注意: @John Machin指出,我的控制台设置为'latin_1'显示.
是什么赋予了?在阅读完这篇文章后,描述了我所处的完全相同的情况,似乎建议忽略其他建议并且毕竟使用8位字节串.
在开始这个过程之前,我对unicode和utf了解不多.我在过去的几个小时里学到了很多东西,但我仍然不知道是否有办法正确地将'ó'从latin-1转换为utf-8而不是破坏它.如果没有,为什么sqlite'强烈推荐'我将我的应用程序切换到unicode字符串?
我将用最后24小时内学到的所有内容的摘要和一些示例代码来更新这个问题,以便我的鞋子里的人可以有一个简单的(呃)指南.如果我发布的信息有任何错误或误导,请告诉我,我会更新,或者你们中的一个高级人员可以更新.
答案摘要
让我首先说明我理解的目标.处理各种编码的目标,如果您尝试在它们之间进行转换,则要了解源编码是什么,然后使用该源编码将其转换为unicode,然后将其转换为所需的编码.Unicode是基础,编码是该基础的子集的映射.utf_8为unicode中的每个字符都有空间,但由于它们与例如latin_1不在同一个地方,因此以utf_8编码并发送到latin_1控制台的字符串将不会像您期望的那样.在python中,获取unicode和进入另一个编码的过程如下:
str.decode('source_encoding').encode('desired_encoding')
Run Code Online (Sandbox Code Playgroud)
或者如果str已经是unicode
str.encode('desired_encoding')
Run Code Online (Sandbox Code Playgroud)
对于sqlite我实际上并不想再次编码,我想解码它并保持unicode格式.当您尝试在python中使用unicode和编码时,您可能需要注意以下四件事.
阐述:
(1)当您从源读取字符串时,它必须具有一些编码,如latin_1或utf_8.在我的情况下,我从文件名中获取字符串,所以不幸的是,我可以获得任何类型的编码.Windows XP使用UCS-2(Unicode系统)作为其本机字符串类型,这似乎是在欺骗我.对我来说幸运的是,大多数文件名中的字符不会由多个源编码类型组成,我认为我的全部都是完全latin_1,完全是utf_8,或者只是简单的ascii(这是两者的子集)那些).所以我只是阅读它们并将它们解码,就像它们仍处于latin_1或utf_8一样.但是,有可能你可以将latin_1和utf_8以及在Windows上的文件名中混合在一起的任何其他字符.有时这些角色可以显示为框,有时它们看起来很糟糕,有时它们看起来是正确的(重音符号等等).继续.
(2)Python有一个默认的系统编码,在python启动时设置,在运行时不能更改.详情请见此处.脏的总结...这里是我添加的文件:
\# sitecustomize.py
\# this file can be anywhere in your Python path,
\# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('utf_8')
Run Code Online (Sandbox Code Playgroud)
此系统编码是在没有任何其他编码参数的情况下使用unicode("str")函数时使用的编码.换句话说,python试图根据默认的系统编码将"str"解码为unicode.
(3)如果您正在使用IDLE或命令行python,我认为您的控制台将根据默认的系统编码显示.我出于某种原因使用带有eclipse的pydev,所以我必须进入我的项目设置,编辑测试脚本的启动配置属性,转到Common选项卡,然后将控制台从latin-1更改为utf-8,以便我可以直观地确认我在做什么工作.
(4)如果你想要一些测试字符串,例如
test_str = "ó"
Run Code Online (Sandbox Code Playgroud)
在你的源代码中,你必须告诉python你在该文件中使用了什么样的编码.(仅供参考:当我输入错误编码时,我必须使用ctrl-Z,因为我的文件变得不可读.)这可以通过在源代码文件的顶部放置一行来实现:
# -*- coding: utf_8 -*-
Run Code Online (Sandbox Code Playgroud)
如果您没有此信息,python会尝试默认将您的代码解析为ascii,因此:
SyntaxError: Non-ASCII character '\xf3' in file _redacted_ on line 81, but no encoding declared; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个用于代替STL容器的容器的迭代器.目前,STL容器正在许多地方使用c ++ 11 foreach语法,例如:for(auto &x: C).我们需要更新代码以使用包装STL容器的自定义类:
template< typename Type>
class SomeSortedContainer{
std::vector<typename Type> m_data; //we wish to iterate over this
//container implementation code
};
class SomeSortedContainerIterator{
//iterator code
};
Run Code Online (Sandbox Code Playgroud)
如何让自动为自定义容器使用正确的迭代器,以便能够以下列方式调用代码?:
SomeSortedContainer C;
for(auto &x : C){
//do something with x...
}
Run Code Online (Sandbox Code Playgroud)
一般来说,确保auto为类使用正确的迭代器需要什么?
我有一个REST服务来记录,其中一些接受简单的数组,如:
[
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
Run Code Online (Sandbox Code Playgroud)
我如何在Swagger模型部分中描述这一点?我只能创建'命名数组'
model {
properties: { "arr": { "type":"array", ......
Run Code Online (Sandbox Code Playgroud)
但它描述了这样的数据:
"arr": [
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个倒计时到给定时间的方法,除非给出重启命令,否则它将执行任务.但我认为Python threading.Timer类不允许计时器被取消.
import threading
def countdown(action):
def printText():
print 'hello!'
t = threading.Timer(5.0, printText)
if (action == 'reset'):
t.cancel()
t.start()
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码是错误的.非常感谢这里的一些指导.
我有以下c ++代码
int factorial(int n){
if(n==0){
return 1;
}
return n*factorial(n-1);
}
int main(void){
factorial(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用g ++ -S factorial.cpp创建一个程序集文件时,我得到以下结果:
.file "tail_call_opt.cpp"
.text
.globl _Z9factoriali
.type _Z9factoriali, @function
_Z9factoriali:
.LFB0:
.cfi_startproc
.cfi_personality 0x0,__gxx_personality_v0
pushl %ebp
.cfi_def_cfa_offset 8
movl %esp, %ebp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
subl $24, %esp
cmpl $0, 8(%ebp)
jne .L2
movl $1, %eax
jmp .L3
.L2:
movl 8(%ebp), %eax
subl $1, %eax
movl %eax, (%esp)
call _Z9factoriali
imull 8(%ebp), %eax
.L3:
leave
ret
.cfi_endproc
.LFE0: …Run Code Online (Sandbox Code Playgroud) 为什么不编译?链接器找不到main,但为什么会这样呢?
namespace somenamespace{
int main(void){
return 0;
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在运行一些单元测试,可能需要很长时间才能失败或无限期运行.在成功的测试运行中,它们将始终在一定的时间内完成.
是否有可能创建一个pytest单元测试,如果它在一定时间内没有完成就会失败?
如果你碰巧有
from <module> import *
Run Code Online (Sandbox Code Playgroud)
在程序(或模块)的中间,您将收到警告:
/tmp/foo:100: SyntaxWarning: import * only allowed at module level
Run Code Online (Sandbox Code Playgroud)
我理解为什么import *一般不鼓励(命名空间不可见),但在很多情况下它会证明是方便的,特别是在代码不与任何人共享的情况下.
那么,任何人都可以准确地详细解释为什么from <module> import *在所有可能的情况下都应该禁止?
python ×5
c++ ×4
c++11 ×2
gcc ×2
namespaces ×2
assembly ×1
g++ ×1
iterator ×1
module ×1
pytest ×1
python-2.7 ×1
python-2.x ×1
rest ×1
sqlite ×1
swagger ×1
swagger-ui ×1
timer ×1
unicode ×1
utf-8 ×1