小编Tad*_*sen的帖子

协议方法中的返回类型协方差

为什么不快速支持协议中定义的方法中的返回类型协变?例如

class Base { }

class Derived : Base { }

protocol Requirement {
  var someVariable : Base { get }
}

struct MyStruct : Requirement{
 let someVariable : Derived
}
Run Code Online (Sandbox Code Playgroud)

编译器会发出MyStruct不符合协议要求的错误.据我所知,MyStruct满足了LSP的所有要求,所以我想知道为什么Swift中不允许这样做?

oop protocols covariance swift

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

JTextPane的等宽字体/符号

我想使用JTextPane构建类似控制台的输出.因此我使用的是等宽字体:

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
Run Code Online (Sandbox Code Playgroud)

这适用于所有类型的alphanum(如az,0-9等)字符,但当涉及' \ u2588 '(█)等符号时,字体不再是等宽字体.

我忘记了什么吗?或者是不是有一个包含smybols的等宽字体?

java unicode symbols jtextpane monospace

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

ImportError:没有名为'psycopg2._psycopg'的模块

当我尝试导入时,psycopg2它显示在我的下面日志:

Traceback (most recent call last):
  File "D:/Desktop/learn/python/webcatch/appserver/testpgsql.py", line 2, in <module>
    import psycopg2
  File "D:/Desktop/learn/python/webcatch/appserver/webcatch/lib/site-packages/psycopg2-2.6.1-py3.5-win32.egg/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: No module named 'psycopg2._psycopg'
Run Code Online (Sandbox Code Playgroud)

我该如何解决?我的平台是win10(64),版本是python 3.5

psycopg2 importerror python-3.x

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

"包装器"和"方法"描述符之间的区别?

我正在编写一个使用内省找到类的"未绑定方法"的代码,并且惊讶地发现内置类型有两种不同的描述符:

>>> type(list.append), list.append
(<class 'method_descriptor'>, <method 'append' of 'list' objects>)
>>> type(list.__add__), list.__add__
(<class 'wrapper_descriptor'>, <slot wrapper '__add__' of 'list' objects>)
Run Code Online (Sandbox Code Playgroud)

搜索文档非常有限但有趣的结果:

  1. inspect模块中的注释,inspect.getattr_static它不解析描述符并包含可用于解析它们的代码.
  2. 在Python 2.4中做了优化,声称method_descriptor更有效的wrapper_descriptor,但是不解释它们是什么:

    的方法list.__getitem__(),dict.__getitem__()dict.__contains__()现在被实现为method_descriptor对象,而不是wrapper_descriptor对象.这种访问形式使其性能翻倍,并使它们更适合用作功能的参数:map(mydict.__getitem__, keylist).

性能上的差异引起了我的兴趣,显然存在差异所以我去寻找其他信息.

这些类型都不在模块中types:

>>> import types
>>> type(list.append) in vars(types).values()
False
>>> type(list.__add__) in vars(types).values()
False
Run Code Online (Sandbox Code Playgroud)

使用help不提供任何有用的信息:

>>> help(type(list.append))
Help …
Run Code Online (Sandbox Code Playgroud)

python

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

我可以使用内置名称作为Python类的方法名称吗?

我有一个执行一些简单数据操作的类,我需要三个方法:set,add,sub:

class Entry():  # over-simplified but should be enough for the question
    def __init__(self, value):
        self.set(value)
    def set(self, value):
        self.value=value
    def add(self, value):
        self.value += value
    def sub(self, value):
        self.value -= value
Run Code Online (Sandbox Code Playgroud)

问题在于"set"方法,但将其定义为类方法不应与"set()"内置函数冲突.

Python的风格指南规定的职能和方法不应阴影内置函数参数的名字,但正是这种方法名称的情况下?

显然我可以选择另一个方法名称,但问题更通用,对其他可能的方法名称(即过滤器,求和,输入)有效.

python pep8

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

如何将numpy模块导入/打开到IDLE

我想使用numpy来运行我必须运行的程序,我想在IDLE IDE中执行它.我已经在线安装了numpy二进制文件,但是当我尝试在我的脚本中运行"import numpy"然后运行一些numpy命令时,但python shell返回错误说

Traceback (most recent call last):
  File "/Users/Admin/Desktop/NumpyTest.py", line 1, in <module>
    import numpy as np
ImportError: No module named numpy
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用pip来安装numpy,但是当我pip install numpy在bash shell中运行时,它说

Requirement already satisfied (use --upgrade to upgrade):
numpy in ./anaconda/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

我已经下载了Anaconda,我可以使用numpy发行版,但我真的很想在IDLE中这样做.

我该怎么办才能让Numpy在IDLE工作?我必须把它保存在某个地方吗?

ps我正在运行Osx 10.10.5 Yosemite

python numpy python-idle anaconda

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

与另一个基类的python abstractmethod打破了抽象功能

请考虑以下代码示例

import abc
class ABCtest(abc.ABC):
    @abc.abstractmethod
    def foo(self):
        raise RuntimeError("Abstract method was called, this should be impossible")

class ABCtest_B(ABCtest):
    pass

test = ABCtest_B()
Run Code Online (Sandbox Code Playgroud)

这正确地引发了错误:

Traceback (most recent call last):
  File "/.../test.py", line 10, in <module>
    test = ABCtest_B()
TypeError: Can't instantiate abstract class ABCtest_B with abstract methods foo
Run Code Online (Sandbox Code Playgroud)

但是当子类ABCtest也继承自内置类型strlist没有错误并test.foo()调用抽象方法时:

class ABCtest_C(ABCtest, str):
    pass

>>> test = ABCtest_C()
>>> test.foo()
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    test.foo()
  File …
Run Code Online (Sandbox Code Playgroud)

python metaclass multiple-inheritance abstract-methods

7
推荐指数
2
解决办法
231
查看次数

在Jupyter iPython中运行Cython

使用Cython接口为时间试验运行迭代循环以获得几何级数.

编译时出错(shift-enter):CompileError:命令'gcc'失败,退出状态为1

%load_ext Cython
Run Code Online (Sandbox Code Playgroud)

%%cython
def geo_prog_cython(double alpha, int n):
    cdef double current = 1.0
    cdef double sum = current
    cdef int i
    for i in range(n):
        current = current * alpha
        sum = sum + current
    return sum
Run Code Online (Sandbox Code Playgroud)

错误:

//anaconda/lib/python3.5/distutils/command/build_ext.py in build_extension(self, ext)
    530                                          debug=self.debug,
    531                                          extra_postargs=extra_args,
--> 532                                          depends=ext.depends)
    533 
    534         # XXX outdated variable, kept here in case third-part code
Run Code Online (Sandbox Code Playgroud)

python cython anaconda jupyter-notebook

6
推荐指数
2
解决办法
9015
查看次数

如何在Python中以隐身模式打开chrome

这在powershell中有效:

Start-Process chrome.exe -ArgumentList @( '-incognito', 'www.foo.com' )
Run Code Online (Sandbox Code Playgroud)

如何通过Python实现这一目标?

python google-chrome python-2.7 python-webbrowser

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

git push - >代码只审查当前更改(remote.origin.push覆盖push.default)

我的团队正在使用gerrit代码审查,实质上这意味着默认的推送行为会绕过标准工作流程,因此我们需要使用git push origin HEAD:refs/for/feature正确推送代码来进行审核.

默认的推送行为如下所示:

user$ git push --dry-run
To https://gerrit.company.url/project
   83fa2a5..aca3a22  feature -> feature
Run Code Online (Sandbox Code Playgroud)

这将绕过不希望的审查过程.

当我设置push ref-spec(这里引用)时,它refs/heads/*:refs/for/*向正确的方向迈出了一步:

user $ git config remote.origin.push refs/heads/*:refs/for/*
user$ git push --dry-run
To https://gerrit.company.url/project
 * [new branch]      master -> refs/for/master
 * [new branch]      old_stuff -> refs/for/old_stuff
 * [new branch]      feature -> refs/for/feature
Run Code Online (Sandbox Code Playgroud)

现在它正试图推featurerefs/for/feature这是我想要的,但它也试图以我的所有分支推到原点.Gerrit拒绝多个请求,所以我得到这样的输出:

user$ git push
....
To https://gerrit.company.url/project
 ! [remote rejected] master -> refs/for/master (no new changes)
 ! [remote rejected] old_stuff -> refs/for/old_stuff …
Run Code Online (Sandbox Code Playgroud)

git config gerrit

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