为什么不快速支持协议中定义的方法中的返回类型协变?例如
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中不允许这样做?
我想使用JTextPane构建类似控制台的输出.因此我使用的是等宽字体:
textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
Run Code Online (Sandbox Code Playgroud)
这适用于所有类型的alphanum(如az,0-9等)字符,但当涉及' \ u2588 '(█)等符号时,字体不再是等宽字体.
我忘记了什么吗?或者是不是有一个包含smybols的等宽字体?
当我尝试导入时,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
我正在编写一个使用内省找到类的"未绑定方法"的代码,并且惊讶地发现内置类型有两种不同的描述符:
>>> 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)
搜索文档非常有限但有趣的结果:
inspect.getattr_static它不解析描述符并包含可用于解析它们的代码.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) 我有一个执行一些简单数据操作的类,我需要三个方法: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的风格指南规定的职能和方法不应阴影内置函数参数的名字,但正是这种方法名称的情况下?
显然我可以选择另一个方法名称,但问题更通用,对其他可能的方法名称(即过滤器,求和,输入)有效.
我想使用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
请考虑以下代码示例
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也继承自内置类型str或list没有错误并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) 使用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) 这在powershell中有效:
Start-Process chrome.exe -ArgumentList @( '-incognito', 'www.foo.com' )
Run Code Online (Sandbox Code Playgroud)
如何通过Python实现这一目标?
我的团队正在使用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)
现在它正试图推feature到refs/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) python ×6
anaconda ×2
config ×1
covariance ×1
cython ×1
gerrit ×1
git ×1
importerror ×1
java ×1
jtextpane ×1
metaclass ×1
monospace ×1
numpy ×1
oop ×1
pep8 ×1
protocols ×1
psycopg2 ×1
python-2.7 ×1
python-3.x ×1
python-idle ×1
swift ×1
symbols ×1
unicode ×1