小编el.*_*ado的帖子

Python Typing:根据函数参数声明返回值类型

假设我有将类型作为参数并返回该类型实例的函数:

def fun(t):
    return t(42)
Run Code Online (Sandbox Code Playgroud)

然后我可以调用它并获取所提供类型的对象:

fun(int)           # 42
fun(float)         # 42.0
fun(complex)       # (42+0j)
fun(str)           # "42"
fun(MyCustomType)  # something
Run Code Online (Sandbox Code Playgroud)

该列表并不详尽,我希望能够使用具有适当构造函数的任何类型。

然后,我想为该函数添加类型提示。该函数的返回值的类型提示应该是什么?


我试过使用 simplet,因为t是一种类型:

def fun(t: type) -> t:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

main.py:1: 错误:未定义名称“t”


这个答案建议使用TypeVar

from typing import TypeVar

T = TypeVar("T")

def fun(t: T) -> T:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

但这似乎不正确, asT表示一种类型,因此它表明返回的是类型本身,而不是其实例。Mypy 拒绝它:

main.py:6: 错误:“对象”不可调用


使用Any明显的工作,但我觉得它太模糊了,它没有传达意图:

from typing import Any

def fun(t: type) -> Any:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-3.x

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

javascript中的函数映射?

我有一个上下文菜单,将触发不同的JavaScript函数.选择函数的天真解决方案如下所示:

function(action, el, pos) {
    switch(action)
    {
        case "export_selected_to_excel":
            exportSelectedToExcel(el);
            break;

        etc..
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望有一个函数映射,以便我可以将metod减少到与此类似的东西:

function(action, el, pos) {
    menuAction[action](el);
}
Run Code Online (Sandbox Code Playgroud)

我像这样定义数组:

function exportSelectedToExcel(id){
   //stuff...
}

var menuAction = new Array();
menuAction["export_selected_to_excel"] = exportSelectedToExcel;
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,感觉像一个合理的解决方案.

在javascript中有这样的缺点吗?
还有更好的方法吗?

javascript

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

浏览器扩展和本机应用程序之间的进程间通信

如何在浏览器扩展和本机应用程序之间建立进程间通信?是否有任何跨平台(Linux和Mac OS X)和跨浏览器解决方案(Firefox,Chrome,Safari)?

我想到的唯一想法是使用本机Web技术,即在本机应用程序中嵌入HTTP服务器并使用XmlHttpRequest或WebSockets.然而,这听起来像笨重的过度杀戮一些问题(例如安全性).还有更好的选择吗?

ipc firefox-addon browser-extension google-chrome-extension safari-extension

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

Qt:绘制高 DPI QPixmaps

我写了画两个笑脸的应用程序:

在此处输入图片说明

第一个直接画在QWidget上:

void DirectFace::paintEvent(QPaintEvent *ev)
{
    QPainter painter(this);
    paintFace(painter);
}
Run Code Online (Sandbox Code Playgroud)

第二个绘制在 a 上QPixmap,而后者又被 blit 到小部件:

void BufferedFace::paintEvent(QPaintEvent *ev)
{
    QPixmap buffer(width(), height());
    buffer.fill(Qt::transparent);
    QPainter painter(&buffer);
    paintFace(painter);

    QPainter p(this);
    p.drawPixmap(ev->rect(), buffer, ev->rect());
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。我想看看我的应用程序在高分辨率屏幕上的样子(我没有),所以我设置QT_SCALE_FACTOR=2并运行我的应用程序:

在此处输入图片说明

第一张脸清晰明快,而 seconf 一张是像素化的。那是因为它被绘制到低分辨率像素图。所以我放大了它QPixmap并设置正确devicePixelRatio

void BufferedFace::paintEvent(QPaintEvent *ev)
{
    qreal pixelRatio = qApp->devicePixelRatio();
    QPixmap buffer(width() * pixelRatio, height() * pixelRatio);
    buffer.setDevicePixelRatio(pixelRatio);
    buffer.fill(Qt::transparent);
    QPainter painter(&buffer);
    paintFace(painter);

    QPainter p(this);
    p.drawPixmap(ev->rect(), buffer, ev->rect());
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明

第二张脸看起来像是用正确的分辨率绘制的,但后来被放大了。现在我被困住了。如何绘制QPixmap然后绘制它QPixmap以便它在 Retina/HiDPI 屏幕上正常工作?

整体应用:

#include …
Run Code Online (Sandbox Code Playgroud)

c++ qt highdpi qpixmap qpainter

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

分析超时的Perl CGI脚本

我有一个Perl CGI应用程序,有时超时,导致它被Apache杀死,并将504 Gateway Time-out错误发送到浏览器.我试图使用NYTProf来描述这个应用程序,但我无法读取配置文件数据:

 $ nytprofhtml -f www/cgi-local/nytprof.out
Reading www/cgi-local/nytprof.out
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated  (refer to TROUBLESHOOTING in the documentation)
Run Code Online (Sandbox Code Playgroud)

我正在使用sigexit=1NYTProf选项.这是重现问题的最小CGI脚本:

#!/usr/bin/perl -d:NYTProf

sleep 1 while 1;
Run Code Online (Sandbox Code Playgroud)

perl cgi http-status-code-504 devel-nytprof

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

Xlib中的窗口位置

如何使用普通的'xlib(或全新的XCB)获得相对于根窗口(即整个屏幕)的顶级窗口位置?

x11 xlib xcb

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

Python:比较单元测试中的嵌套数据结构

有没有办法比较嵌套数据结构unittest但忽略具体类型的对象,例如assertSequenceEqual但递归,例如:

#!/usr/bin/env python

import unittest

class DeepCompareTestCase(unittest.TestCase):

    def test_compare(self):
        # this test fails
        self.assertSequenceEqual(
            [['abc', 'def']],
            (('abc', 'def'),)
        )

unittest.main()
Run Code Online (Sandbox Code Playgroud)

(类似于Test::DeepPerl)

python

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

使用fscanf从文件中读取字符串,整数等

我希望您能帮助我理解如何执行以下操作:

我有一个包含由空格''分隔的整数的文件.我需要读取所有整数,对它们进行排序并将它们作为字符串写入另一个文件.我写了一个代码,但是我通过char读取char,把这个单词放在char sub_arr [Max_Int]中,当我遇到''时,我将这些字符放入另一个Main int数组后,现在放入一个字符串,直到到达文件的末尾,逐个字符串,然后我对它们进行排序并将它们写在另一个文件中.

但后来我记得有一个fscanf 功能:我读了它,但我仍然不完全理解它做了什么以及如何使用它.

在我的情况下,所有整数由空格分隔,我可以写fscanf(myFile,"%s",word)吗?它会不会考虑''并停在特定字符串的末尾?!怎么样?

更重要的是,我可以写fscanf(myFile,"%d",number),它会给我下一个号码吗?(我一定是误会了.感觉​​像魔术一样).

c string integer scanf

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

OSX:proc_pidinfo为其他用户的进程返回0

我需要获取一些有关在Mac OSX上运行进程的信息(PID,UID,GID,进程名称)。我试过了proc_pidinfo。对于我自己的流程,它可以正常工作。但是,对于其他用户拥有的进程,将返回0。没有此功能的文档,但是根据Internet上的信息,应该返回写入提供的缓冲区的字节数。在其他用户的进程上调用此函数将返回0,这意味着未提供任何信息。

例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <libproc.h>


int main(int argc, char *argv[])
{
    pid_t pid;
    struct proc_bsdinfo proc;

    if (argc == 2)
        pid = atoi(argv[1]);
    else
        pid = getpid();

    int st = proc_pidinfo(pid, PROC_PIDTBSDINFO, 0,
                         &proc, PROC_PIDTBSDINFO_SIZE);

    if (st != PROC_PIDTBSDINFO_SIZE) {
        fprintf(stderr, "Cannot get process info");
        return 1;
    }
    printf(" pid: %d\n", (int)proc.pbi_pid);
    printf("ppid: %d\n", (int)proc.pbi_ppid);
    printf("comm: %s\n",      proc.pbi_comm);
    printf("name: %s\n",      proc.pbi_name);
    printf(" uid: %d\n", (int)proc.pbi_uid);
    printf(" gid: %d\n", (int)proc.pbi_gid);

    return …
Run Code Online (Sandbox Code Playgroud)

c macos

4
推荐指数
2
解决办法
1952
查看次数

如何使用 Django 修复 apache 服务器上禁止的 403?

当我尝试访问我的网站时出现以下错误:

Forbidden. You don't have permission to access / on this server.

我的虚拟主机文件如下所示:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined


        Alias /static ~/myproject/static

        <Directory ~/myproject/static>
                Require all granted
        </Directory>

        <Directory ~/myproject/myprojectapi>
                Order allow,deny
                Require all granted
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

而 myapache2.conf是默认文件。我在用Django 1.9 with Python 2.7 on Ubuntu 14.04

我已经尝试了大多数(如果不是全部)在站点上找到的解决方案,但由于某种原因,它们都不起作用。我遵循了教程并授予了以下权限:

chmod 664 ~/myproject/db.sqlite3

sudo chown :www-data ~/myproject/db.sqlite3

sudo chown :www-data ~/myproject

我也是作为root用户操作的。

如果您需要任何其他信息,请告诉我;我将非常乐意提供它。任何帮助将不胜感激。

以下是 WSGI …

python apache django ubuntu

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