草庐IT

python - isinstance(foo,bar) vs type(foo) is bar

一个语义问题,真的。直到最近,如果我必须对结构进行任何类型检查,我会使用type(obj)islist等。人。但是,自从加入SO以来,我注意到每个人(我的意思是EVERYONE)都使用isinstance(obj,list)代替。似乎它们是同义词,timeit揭示了它们之间几乎相同的速度。defa():returntype(list())islistdefb():returnisinstance(list(),list)fromtimeitimporttimeittimeit(a)#0.5239454597495582timeit(b)#0.5021292075273176事实上,即使

Python 类型提示 : how to tell X is a subclass for Foo?

我应该如何为Python中的类类型编写类型提示?考虑这段代码:classA(object):passclassB(A):passdefregister(cls:type[A]):assertissubclass(cls,A)register(A)register(B)type[A]是正确的写法吗?如果我只使用cls:A这意味着cls是A的一个实例,但我想说的是cls是一个类/类型,它至少是A的子类。具体来说,我要说明的是参数应该是一个Django模型类型。 最佳答案 这里的其他当前(2016年9月22日)答案似乎不正确。根据PEP4

Python 类型提示 : how to tell X is a subclass for Foo?

我应该如何为Python中的类类型编写类型提示?考虑这段代码:classA(object):passclassB(A):passdefregister(cls:type[A]):assertissubclass(cls,A)register(A)register(B)type[A]是正确的写法吗?如果我只使用cls:A这意味着cls是A的一个实例,但我想说的是cls是一个类/类型,它至少是A的子类。具体来说,我要说明的是参数应该是一个Django模型类型。 最佳答案 这里的其他当前(2016年9月22日)答案似乎不正确。根据PEP4

python - 什么时候 os.environ ['foo' ] 不匹配 os.getenv ('foo' )?

我有一个小的Python应用程序,通过subprocess.Popen启动,它接受一些环境变量形式的参数。我通过将环境结构传递给Popen调用来做到这一点。然后程序通过os.getenv读取变量。或者更确切地说,它曾经以这种方式阅读它们。在Windows上,它运行良好。但是在我们的FreeBSD服务器上,os.getenv为我们传入的所有参数返回None。奇怪的是os.environ有值就好了——事实上,只需将所有os.getenv('foo')调用切换到os.environ['foo']就可以在两个平台。为什么这些值不同?什么时候比较合适? 最佳答案

python - 什么时候 os.environ ['foo' ] 不匹配 os.getenv ('foo' )?

我有一个小的Python应用程序,通过subprocess.Popen启动,它接受一些环境变量形式的参数。我通过将环境结构传递给Popen调用来做到这一点。然后程序通过os.getenv读取变量。或者更确切地说,它曾经以这种方式阅读它们。在Windows上,它运行良好。但是在我们的FreeBSD服务器上,os.getenv为我们传入的所有参数返回None。奇怪的是os.environ有值就好了——事实上,只需将所有os.getenv('foo')调用切换到os.environ['foo']就可以在两个平台。为什么这些值不同?什么时候比较合适? 最佳答案

python - 为什么 pip freeze list "pkg-resources==0.0.0"?

在Ubuntu16.04上使用virtualenv15.0.1和Python3.5.2(均使用apt安装),当我使用创建和激活新的Python虚拟环境时virtualenv.virtualenvs/wtf-p$(whichpython3)--no-site-packagessource.virtualenvs/wtf/bin/activate我得到以下输出:Alreadyusinginterpreter/usr/bin/python3Usingbaseprefix'/usr'Newpythonexecutablein/home/das-g/.virtualenvs/wtf/bin/py

python - 为什么 pip freeze list "pkg-resources==0.0.0"?

在Ubuntu16.04上使用virtualenv15.0.1和Python3.5.2(均使用apt安装),当我使用创建和激活新的Python虚拟环境时virtualenv.virtualenvs/wtf-p$(whichpython3)--no-site-packagessource.virtualenvs/wtf/bin/activate我得到以下输出:Alreadyusinginterpreter/usr/bin/python3Usingbaseprefix'/usr'Newpythonexecutablein/home/das-g/.virtualenvs/wtf/bin/py

python - "except Foo as bar"导致 "bar"从范围中删除

这个问题在这里已经有了答案:except-clausedeleteslocalvariable(1个回答)关闭4年前。给定以下代码:msg="test"try:"a"[1]exceptIndexErrorasmsg:print("Errorhappened")print(msg)有人可以解释为什么这会导致Python3中出现以下输出吗?ErrorhappenedTraceback(mostrecentcalllast):File"test.py",line6,inprint(msg)NameError:name'msg'isnotdefined 最佳答案

python - "except Foo as bar"导致 "bar"从范围中删除

这个问题在这里已经有了答案:except-clausedeleteslocalvariable(1个回答)关闭4年前。给定以下代码:msg="test"try:"a"[1]exceptIndexErrorasmsg:print("Errorhappened")print(msg)有人可以解释为什么这会导致Python3中出现以下输出吗?ErrorhappenedTraceback(mostrecentcalllast):File"test.py",line6,inprint(msg)NameError:name'msg'isnotdefined 最佳答案

python - Python 中类 foo 和类 foo(object) 的区别

我知道classfoo(object)是一种老式的定义类的方法。但我想更详细地了解这两者之间的区别。 最佳答案 在python2.2之前,基本上有两种不同类型的类:由C扩展和C编码的内置函数(类型)定义的类和由python类语句定义的类(类)。当您想要混合python类型和内置类型时,这会导致问题。最常见的原因是子类化。如果您想在Python代码中对列表类型进行子类化,那么您很不走运,因此使用了各种解决方法,例如将列表的纯Python实现子类化(在UserList模块中)。这是一个相当丑陋的,所以在2.2中有一个move统一pyth