小编shu*_*e87的帖子

"mro()"有什么作用?

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"是什么意思?

python method-resolution-order

118
推荐指数
3
解决办法
5万
查看次数

错误:使用已删除的功能

我一直在研究朋友编写的一些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()源代码中没有任何地方使用过.

一般来说,这个错误意味着什么?发生此类错误时,我应该寻找什么?

c++ gcc g++ deleted-functions c++11

101
推荐指数
3
解决办法
18万
查看次数

SQLite,python,unicode和非utf数据

我开始尝试使用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. 要使用的字符串的编码,以及要将其转换为的编码.
  2. 系统编码.
  3. 控制台编码.
  4. 源文件的编码

阐述:

(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)

python sqlite unicode utf-8 python-2.x

65
推荐指数
4
解决办法
5万
查看次数

c ++ 11 foreach语法和自定义迭代器

我正在编写一个用于代替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为类使用正确的迭代器需要什么?

c++ iterator c++11

59
推荐指数
3
解决办法
5万
查看次数

如何在Swagger中为具有简单对象的数组描述模型?

我有一个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)

rest swagger swagger-ui

44
推荐指数
5
解决办法
7万
查看次数

Python中可取消的线程.Timer

我正在尝试编写一个倒计时到给定时间的方法,除非给出重启命令,否则它将执行任务.但我认为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)

我知道上面的代码是错误的.非常感谢这里的一些指导.

python timer python-multithreading python-2.7

34
推荐指数
3
解决办法
6万
查看次数

GCC从c ++程序生成的汇编代码中的.cfi和.LFE是什么?

我有以下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)

c++ assembly gcc

33
推荐指数
1
解决办法
8032
查看次数

主要在命名空间

为什么不编译?链接器找不到main,但为什么会这样呢?

namespace somenamespace{

int main(void){
 return 0;
}

}
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

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

如何限制单元测试的最长运行时间?

我目前正在运行一些单元测试,可能需要很长时间才能失败或无限期运行.在成功的测试运行中,它们将始终在一定的时间内完成.

是否有可能创建一个pytest单元测试,如果它在一定时间内没有完成就会失败?

python pytest

30
推荐指数
1
解决办法
9959
查看次数

Python:为什么要禁止'from <module> import*'?

如果你碰巧有

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 namespaces module python-import

28
推荐指数
3
解决办法
2万
查看次数