我尝试为使用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?我犯了错误吗?
的谷歌C++样式指南绘制有明显的区别(严格接着cpplint.py输入参数之间)(→常量REF,值)和输入-输出或输出参数(→非const的指针):
C/C++函数的参数既可以是函数的输入,也可以是函数的输出,或者两者兼而有之.输入参数通常是值或const引用,而输出和输入/输出参数将是非常量指针.
并进一步 :
事实上,在Google代码中,一个非常强大的约定是输出参数是值或const引用,而输出参数是指针.
但我无法弄清楚为什么不应该通过引用传递输入/输出参数(我将输出参数放在一边).在stackoverflow上有很多与这个问题相关的主题:例如,在这里,接受的答案清楚地说明了这一点
它主要是关于风格
但是如果
如果您希望能够传递null,则必须使用指针
那么,如果我想避免指针为空,总是需要一个指针是什么意思?为什么只使用输入参数的引用?
这段代码(在线程中运行的最小服务器,代码取自此处)在 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) (我正在研究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)
这个想法是加快一些测试功能,打开/读取/写入磁盘上的一些短文件; 有没有办法确保这些操作发生在内存中?
对于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新信号槽语法,一切都可以.
我正在尝试为 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,我不知道会发生什么......那么,您如何看待以下问题:
我正在尝试获取不同类型对象的哈希值,如字符串和向量.
以下代码可以......
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)
......为什么?
(Linux/Python 3.5)我想将字符串中的〜字符规范化为"〜/ something",并获得类似"/ home/something /"的内容.
我不想使用我自己的替代品,因为我想通过一个非常通用的方式来实现这一点,例如使用Python模块.
任何的想法 ?
为了理解Kivy kv 语言背后的逻辑,我试图通过调用 Builder.load_string() 替换 kv 文件的自动加载来重写一个最小的应用程序。
这是我的起点(来源:示例 1-2, 1-3):两个文件,weather.py和weather.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)
我显然在这里遗漏了一些东西,但是什么?任何帮助,将不胜感激 !
为了理解如何使用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:在值之前无效的声明符被拒绝.为什么?