如果我运行以下代码:
a={}
a[input("key: ")] = input("value: ")
Run Code Online (Sandbox Code Playgroud)
口译员首先提示我a value input然后是key input.
这背后的原因是什么?
我有三个课程如下:
class Page(object):
def __init__(self, Obj_a, Obj_b):
super().__init__(Obj_a, Obj_b)
class Report(object):
def __init__(self, Obj_a, Obj_b):
super().__init__()
class ReportingPage(Page,Report):
def __init__(self, Obj_a, Obj_b):
super().__init__(Obj_a, Obj_b)
Run Code Online (Sandbox Code Playgroud)
我实例化一个ReportingPage对象.要做到这一点,Python爬行MRO:
Page首先调用该对象,因为它首先在继承列表中排序ReportingPage,然后调用它自己的__init__方法.
然后它也是这样做的Report.
我不明白的两件事:
为什么我必须将参数传递给super.__init__in Page,什么Page时候才会调用__init__它继承的内容,object.
为什么我不必为此做同样的事情Report.
Python的越来越多的特性变成了"懒惰的可执行文件",比如生成器表达式和其他类型的迭代器.然而,有时候,我发现自己想要推出一个"for"循环,只是为了执行一些动作.
让循环实际执行的最pythonic是什么?
例如:
a = open("numbers.txt", "w")
(a.write ("%d " % i) for i in xrange(100))
a.close()
Run Code Online (Sandbox Code Playgroud)
不是代码,但你明白我的意思.如果我使用列表生成器,相反,我有副作用创建一个填充"无"的N长度列表.
目前我所做的是在调用"any"或"all"时使用表达式作为参数.但是我想找到一种不依赖于循环中执行的表达式结果的方法 - "any"和"all"都可以根据所评估的表达式停止.
要清楚,这些是我已经知道的方法,每个都有它的缺点:
[a.write ("%d " % i) for i in xrange(100))]
any((a.write ("%d " % i) for i in xrange(100)))
for item in (a.write ("%d " % i) for i in xrange(100)): pass
Run Code Online (Sandbox Code Playgroud) 我们正在将Plone附加组件部署为具有buildout的开发蛋.使用Mr.Builder buildout recipe并且.egg包装在任何时候都没有完成,因此将鸡蛋推送到生产中作为源代码检查.
什么是在每个SVN提交到SVN版本号或时间戳时自动更新setup.py版本标记的最佳方法?这将提供一些跟踪不同包的快速信息.
Distutils似乎提供某种神奇版本的冲压机制,但我没有找到任何参考文档如何使用它.
我是一个Windows用户,并希望所看到从控制台运行GIMP 这里.在Windows上,这意味着将程序放在您的路径上.我用了:
C:\Program Files\GIMP 2\bin
Run Code Online (Sandbox Code Playgroud)
和....
C:\Program Files\GIMP 2\bin\gimp-2.8.exe
C:\Program Files\GIMP 2\bin\gimp-2.8.exe
Run Code Online (Sandbox Code Playgroud)
但是当我键入:
gimp --version
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
C:\Users\trinker>gimp --version
'gimp' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
如何让Windows从命令行检测gimp,以便我可以运行批处理?不幸的是,键入gimp+会path导致与gimp中创建的路径相关的搜索.
我可以运行gimp gui.
dateparser 包是一个很棒的包:https ://dateparser.readthedocs.io/en/latest/
通用地说:我需要能够解析非美国日期格式的日期。
我使用的是python 2.7版本
准确地说:我明白 -
>>> import dateparser
>>> dateparser.parse('Tue, 06/07/2016')
datetime.datetime(2016, 6, 7, 0, 0)
Run Code Online (Sandbox Code Playgroud)
我需要
>>> import dateparser
>>> dateparser.parse('Tue, 06/07/2016')
datetime.datetime(2016, 7, 6, 0, 0)
Run Code Online (Sandbox Code Playgroud)
如果您知道可以执行此操作的任何配置更改,那就太好了。任何帮助将不胜感激。:)
这在python2中是可能的:
None < float('-inf')
Run Code Online (Sandbox Code Playgroud)
而且,它总是返回
True
Run Code Online (Sandbox Code Playgroud)
但是,在python3上,这会抛出
TypeError: unorderable types: NoneType() < int()
Run Code Online (Sandbox Code Playgroud)
为什么None与python2的整数/浮点数相当?None在python2中可以订购任何好处或应用程序吗?
当我调用str()具有重载__getattribute__方法的对象时,它似乎没有使用它,而是__str__直接调用。是否有其他一些我应该修改的功能或让它使用的方法__getattribute__?如果我__str__直接超载它会按预期运行,但这并不适合我的需求。
class A(object):
def __getattribute__(self, attr):
if attr == "__str__":
return lambda: "Hello"
return object.__getattribute__(self, attr)
x = A()
print(x)
print(str(x))
print(x.__str__())
Run Code Online (Sandbox Code Playgroud)
输出:
< main .A object at 0x000001FDF7AEA760>
< main .A object at 0x000001FDF7AEA760>
Hello
期望输出:
你好
你好
你好
我喜欢 Pylance 中的类型检查器(VS Code),但似乎有一种情况我必须在忽略 Pylance 警告和类变量声明的最佳实践之间进行选择。很多时候,类变量是使用None类构造函数中的类型来初始化的,然后再设置该变量。例如:
class Person:
def __init__(self) -> None:
self.name:str = None
def setName(self, name:str) -> None:
self.name = name
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Pylance 在作业中给出以下错误self.name:str = None:
Cannot assign member "name" for type "Person"
Expression of type "None" cannot be assigned to member "name" of class "Person"
Type "None" cannot be assigned to type "str"
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以self.name在构造函数中声明不需要值并且Pylance 满意的方式?
编辑:一些人建议使用typing.Optional来抑制此 Pylance 警告。但是,如果创建另一个成员函数来返回self.name并保证它返回 的实例str,则会生成另一个 Pylance 错误。请参见以下示例:
class Person:
def …Run Code Online (Sandbox Code Playgroud) 我的项目的一个重要部分是能够将类实例保存和加载到文件中。对于进一步的上下文,我的类既有一组属性又有一些方法。
到目前为止,我已经尝试使用pickle,但它并没有像预期的那样工作。首先,它不加载方法,也不让我添加我最初定义的属性;换句话说,它并不是真正制作我可以使用的类的副本。
相关代码:
class Brick(object):
def __init__(self, name, filename=None, areaMin=None, areaMax=None, kp=None):
self.name = name
self.filename = filename
self.areaMin = areaMin
self.areaMax = areaMax
self.kp = kp
self.__kpsave = None
if filename != None:
self.__logfile = file(filename, 'w')
def __getstate__(self):
f = self.__logfile
self.__kpsave = []
for point in self.kp:
temp = (point.pt, point.size, point.angle, point.response, point.octave, point.class_id)
self.__kpsave.append(temp)
return (self.name, self.areaMin, self.areaMax, self.__kpsave,
f.name, f.tell())
def __setstate__(self, state):
self.value, self.areaMin, self.areaMax, self.__kpsave, name, position = state
f …Run Code Online (Sandbox Code Playgroud) python ×9
python-3.x ×3
python-2.7 ×2
buildout ×1
date ×1
datetime ×1
dictionary ×1
generator ×1
getattribute ×1
gimp ×1
input ×1
plone ×1
pylance ×1
python-2.x ×1
setuptools ×1
svn ×1
windows ×1