小编sui*_*kan的帖子

如何强制Sphinx使用Python 3.x解释器

我尝试为使用Python 3.x编写的项目创建文档.Sphinx是我想要使​​用工具,根据官方网站,它的最新版本1.1.2与Python 3.1+兼容.我的操作系统是Archlinux,一个使用Python 3.2+作为默认Python包的Linux发行版.

安装和配置是直接的(easy_install -U Sphinx然后sphinx-quickinstall),我从未被要求在2.x或3.x Python解释器之间进行选择.但是当我要求Sphinx创建我的项目的文档时,我的代码就像我为Python 2.x编写它一样进行分析.

Sphinx是否已准备好使用Python 3.x?我犯了错误吗?

python python-3.x python-sphinx

18
推荐指数
5
解决办法
2万
查看次数

谷歌关于输入/输出参数的样式指南作为指针

谷歌C++样式指南绘制有明显的区别(严格接着cpplint.py输入参数之间)(→常量REF,值)和输入-输出或输出参数(→非const的指针):

C/C++函数的参数既可以是函数的输入,也可以是函数的输出,或者两者兼而有之.输入参数通常是值或const引用,而输出和输入/输出参数将是非常量指针.

并进一步 :

事实上,在Google代码中,一个非常强大的约定是输出参数是值或const引用,而输出参数是指针.

但我无法弄清楚为什么不应该通过引用传递输入/输出参数(我将输出参数放在一边).在stackoverflow上有很多与这个问题相关的主题:例如,在这里,接受的答案清楚地说明了这一点

它主要是关于风格

但是如果

如果您希望能够传递null,则必须使用指针

那么,如果我想避免指针为空,总是需要一个指针是什么意思?为什么只使用输入参数的引用?

c++ parameters reference google-style-guide cpplint

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

线程中的服务器(Python3.9.0+aiohttp):RuntimeError:关闭后无法注册atexit

这段代码(在线程中运行的最小服务器,代码取自此处)在 Python3.8.3 上运行良好,但在 Python3.9.0 上会引发错误消息:

import asyncio
import threading
from aiohttp import web


def aiohttp_server():
    def say_hello(request):
        return web.Response(text='Hello, world')

    app = web.Application()
    app.add_routes([web.get('/', say_hello)])
    runner = web.AppRunner(app)
    return runner


def run_server(runner):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(runner.setup())
    site = web.TCPSite(runner, 'localhost', 8080)
    loop.run_until_complete(site.start())
    loop.run_forever()


t = threading.Thread(target=run_server, args=(aiohttp_server(),))
t.start()
Run Code Online (Sandbox Code Playgroud)

错误信息:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/alkhinoos/nikw/nikw/z2.py", line 21, …
Run Code Online (Sandbox Code Playgroud)

multithreading python-3.x aiohttp

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

在内存中打开一个文件

(我正在研究Python 3.4项目.)

有一种方法可以在内存中打开(sqlite3)数据库:

    with sqlite3.connect(":memory:") as database:
Run Code Online (Sandbox Code Playgroud)

open()函数是否存在这样的技巧?就像是 :

   with open(":file_in_memory:") as myfile:
Run Code Online (Sandbox Code Playgroud)

这个想法是加快一些测试功能,打开/读取/写入磁盘上的一些短文件; 有没有办法确保这些操作发生在内存中?

python file python-3.x

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

为什么Qt信号的参数不能用typedef类型定义?

对于Qt5/c ++ 11项目,我使用了一个QMediaPlayer对象(名为audio_player)及其positionChanged()信号:

这段代码还可以:

connect(this->audio_player,
        SIGNAL(positionChanged(qint64)),
        this,
        SLOT(audio_position_changed(qint64)));
Run Code Online (Sandbox Code Playgroud)

但是这个不起作用:

typedef PosInAudio qint64;

connect(this->audio_player,
        SIGNAL(positionChanged(PosInAudio)),
        this,
        SLOT(audio_position_changed(PosInAudio)));
Run Code Online (Sandbox Code Playgroud)

在运行时我得到消息"QObject :: connect:没有这样的信号QMediaPlayer :: positionChanged(PosInAudio)"

我很困惑地看到即使用#define定义的类型也不行:

#define PosInAudio qint64

connect(this->audio_player,
        SIGNAL(positionChanged(PosInAudio)),
        this,
        SLOT(audio_position_changed(PosInAudio)));
Run Code Online (Sandbox Code Playgroud)

(与上面相同的错误信息)

这是预期的行为吗?或者我犯了错误?


如上所述(感谢Matteo Italia),如果您使用此处描述的Qt5新信号槽语法,一切都可以.

c++ qt types signals

5
推荐指数
1
解决办法
1345
查看次数

pair<int, int> 向量的散列函数

我正在尝试为 vector< pair < int,int> >实现unordered_map。由于没有这样的默认哈希函数,我试着想象一个我自己的函数:

struct ObjectHasher
{
  std::size_t operator()(const Object& k) const
  {
    std::string h_string("");
    for (auto i = k.vec.begin(); i != k.vec.end(); ++i)
    {
      h_string.push_back(97+i->first);
      h_string.push_back(47); // '-'
      h_string.push_back(97+i->second);
      h_string.push_back(43); // '+'
    }
    return std::hash<std::string>()(h_string);
  }
};
Run Code Online (Sandbox Code Playgroud)

主要思想是将整数列表(例如( (97, 98), (105, 107) )更改为像"a-b+ik"这样的格式化字符串,并通过 hash < string >() 计算其哈希值) . 我选择了 97、48 和 43 数字,只是为了让哈希字符串在我的测试期间可以轻松地显示在终端中。

我知道这种函数可能是一个非常幼稚的想法,因为一个好的散列函数应该是快速强大的对抗冲突。好吧,如果给 push_back() 的整数大于 255,我不知道会发生什么......那么,您如何看待以下问题:

  • (1) 我的函数可以用于大整数吗?
  • (2) 我的功能是否适用于所有环境/平台?
  • (3) 我的函数是否太慢而不能成为散列函数?
  • (4) …

c++ hash vector

4
推荐指数
1
解决办法
2576
查看次数

调用向量的(默认)哈希函数

我正在尝试获取不同类型对象的哈希值,如字符串和向量.

以下代码可以......

  std::string data = std::string("abc");
  std::cout << std::hash<std::string>()(data) << std::endl;
Run Code Online (Sandbox Code Playgroud)

......但不是这一个,虽然我"只是"替换字符串由类型载体类型.

  std::vector<int> data( {1,2,3} );
  std::cout << std::hash<std::vector<int> >()(data) << std::endl;
Run Code Online (Sandbox Code Playgroud)

g ++ -std = gnu + 11说:

  invalid use of incomplete type 'struct std::hash<std::vector<int> >'
Run Code Online (Sandbox Code Playgroud)

......为什么?

c++ syntax hash

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

Pythonic的方式来发展〜在路径?

(Linux/Python 3.5)我想将字符串中的〜字符规范化为"〜/ something",并获得类似"/ home/something /"的内容.

我不想使用我自己的替代品,因为我想通过一个非常通用的方式来实现这一点,例如使用Python模块.

无论os.path中既不pathlib似乎适合我的期望.

任何的想法 ?

python path

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

Kivy:load_string() 与 kv 文件

为了理解Kivy kv 语言背后的逻辑,我试图通过调用 Builder.load_string() 替换 kv 文件的自动加载来重写一个最小的应用程序。


这是我的起点(来源:示例 1-2, 1-3):两个文件,weather.pyweather.kv

天气.py:

from kivy.app import App
class WeatherApp(App):
    pass
if __name__ == '__main__':
        WeatherApp().run()
Run Code Online (Sandbox Code Playgroud)

天气.kv

Label:
    text: "Hello World"
Run Code Online (Sandbox Code Playgroud)

到了那里,一切都好

结果在这里.

但是如果我尝试手动加载 kv 的东西,我只会得到一个黑屏(并且没有错误消息)。我的代码:

from kivy.app import App
from kivy.lang import Builder

KV = '''
Label
    text: "Hello World"
'''
Builder.load_string(KV)

class WeatherApp(App):
    pass

if __name__ == '__main__':
        WeatherApp().run()
Run Code Online (Sandbox Code Playgroud)

我显然在这里遗漏了一些东西,但是什么?任何帮助,将不胜感激 !

python kivy

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

整数向量的initializer_list语法

为了理解如何使用initializer_list,我正在编写一个自己的构造函数来填充整数向量(这里的解释):

#include <vector>

class X
{
  std::vector< int > *vec;
public:
  X(std::initializer_list<int>);
};

X(std::initializer_list<int> values)
{
  this->vec = new std::vector<int>(values);
}
Run Code Online (Sandbox Code Playgroud)

这条线

X(std::initializer_list<int> values)
Run Code Online (Sandbox Code Playgroud)

我的g ++ -std = c ++ 11:在值之前无效的声明被拒绝.为什么?

c++ syntax initializer-list c++11

0
推荐指数
1
解决办法
231
查看次数