相关疑难解决方法(0)

这是一个错误吗?变量是对此示例中相同字符串的相同引用(Python)

这适用于Python 2.6.

我无法弄清楚为什么a和b是相同的:

>>> a = "some_string"
>>> b = "some_string"
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)

但是如果字符串中有空格,则它们不是:

>>> a = "some string"
>>> b = "some string"
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)

如果这是正常行为,有人可以解释发生了什么.

编辑:免责声明!这不用于检查相等性.我其实想向其他人解释"是"只是为了检查身份,而不是平等.从文档中我了解到以这种方式创建的引用将是不同的,每次都会创建一个新的字符串.当我无法证明自己的观点时,我给出的第一个例子就把我扔了!

编辑: 我知道这不是一个错误,实习对我来说是一个新概念. 这似乎是一个很好的解释.

python string reference

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

元组拆包与正常分配有何不同?

从这个链接我了解到了

当前实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用

但是当我尝试为我的会话提供一些示例时,我发现它在赋值和元组解包时表现不同.

这是片段,

Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a,b = 300,300
>>> a is b
True
>>> c = 300
>>> d = 300
>>> c is d
False
>>>  
Run Code Online (Sandbox Code Playgroud)

python cpython python-2.7

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

比较int和float时Python什么时候进行类型转换?

为什么Python中返回True时,我比较int和float具有相同价值的物品?

例如:

>>> 5*2 == 5.0*2.0
True
Run Code Online (Sandbox Code Playgroud)

python floating-point int python-3.x python-internals

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

Python - 将长整数值与==进行比较

可能重复:
Python"is"运算符使用整数意外运行

昨晚做了什么奇怪的事情

if max_urls is 0:
    max_urls = 10
Run Code Online (Sandbox Code Playgroud)

总是会返回false ...即使max_urls为0 ....它也是从数据库中分配的.当我做了一个

print type(max_urls)
Run Code Online (Sandbox Code Playgroud)

会回来的

<type 'long'> 0
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的,但它总是会返回虚假.

如果我把它改成了

if max_urls == 0:
    max_urls = 10
Run Code Online (Sandbox Code Playgroud)

那么当它为0时它最终会返回true.为什么==和之间的区别是?

python variables conditional-operator

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

为什么python 2.7中的int变量id只等到256?

为什么id'spython 2.7中的int变量只相等于256?

例如:

>>> y = 256
>>> m = 256
>>> m is y
True
>>> y = 257
>>> m = 257
>>> id(m)
16282096
>>> id(y)
16281952
>>> m is y
False
Run Code Online (Sandbox Code Playgroud)

python python-2.7

7
推荐指数
0
解决办法
54
查看次数

python中类变量的继承

试图在python中理解oop我遇到了困扰我的情况,我无法找到令人满意的解释......我正在构建一个Countable类,它有一个计数器属性,可以计算该类有多少个实例已初始化.我希望在初始化给定类的子类(或子类)时也增加此计数器.这是我的实现:

class Countable(object):
    counter = 0
    def __new__(cls, *args, **kwargs):
        cls.increment_counter()
        count(cls)
        return object.__new__(cls, *args, **kwargs)

    @classmethod
    def increment_counter(cls):
        cls.counter += 1
        if cls.__base__ is not object:
            cls.__base__.increment_counter()
Run Code Online (Sandbox Code Playgroud)

哪里count(cls)有调试目的,后来我把它写下来.

现在,让我们有一些这样的子类:

class A(Countable):
    def __init__(self, a='a'):
        self.a = a

class B(Countable):
    def __init__(self, b='b'):
        self.b = b

class B2(B):
    def __init__(self, b2='b2'):
        self.b2 = b2

def count(cls):
    print('@{:<5}  Countables: {}  As: {}  Bs: {}  B2s: {}'
          ''.format(cls.__name__, Countable.counter, A.counter, B.counter, B2.counter))
Run Code Online (Sandbox Code Playgroud)

当我运行如下代码时:

a = A()
a = A()
a …
Run Code Online (Sandbox Code Playgroud)

python inheritance class-variables python-2.7

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

为什么"a is b"在交互模式下以及何时从脚本运行时表现不同?

在尝试回答有关is关键字使用的问题时,我发现这段代码:

脚本:

a = 123456
b = 123456
print a is b # True
Run Code Online (Sandbox Code Playgroud)

互动模式:

>>> a = 123456
>>> b = 123456
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)

在Python交互模式下以及从脚本运行时提供不同的输出.

从这个答案:

当前实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用.

所以,我希望只a is b返回True范围内的整数[-5, 256].但它只适用于交互模式,而不是从脚本运行时.

问题:为什么a is b在交互模式下以及何时从脚本运行时表现不同?


注意:在Python 2.7和Python 3中测试

python integer python-interactive python-2.7

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

为什么范围(n)中的_比[""]*n中的_慢?

测试替代for _ in range(n)(执行一些动作n时间,即使动作不依赖于值n)我注意到这种模式的另一种表现更快,for _ in [""] * n.

例如:

timeit('for _ in range(10^1000): pass', number=1000000)
Run Code Online (Sandbox Code Playgroud)

返回16.4秒;

然而,

timeit('for _ in [""]*(10^1000): pass', number=1000000)
Run Code Online (Sandbox Code Playgroud)

需要10.7秒.

为什么[""] * 10^1000比range(10^1000)Python 3 快得多?

所有测试都使用Python 3.3完成

python python-internals

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

当Python解释器处理.py文件时,它是否与处理单个语句不同?

运行:

a = 257
b = 257
print id(a) == id(b)
Run Code Online (Sandbox Code Playgroud)

结果是:

同样的声明 在此输入图像描述

相同的陈述但相反的结果.为什么?

python python-2.7

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

id()vs`is`运算符.比较`id`s是否安全?相同的`id`是否意味着同一个对象?

我可以id()在实践中依赖对象及其独特性多少?例如:

  • 是否id(a) == id(b)意味着a is b反之亦然?对面怎么样?
  • 保存id以后要使用的某个地方(例如进入某个注册表而不是对象本身)有多安全?

(作为对Canonicals for Python的响应而写成的规范:具有相同id()的对象是相同的对象,`is`运算符,未绑定的方法对象)

python identity identity-operator

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