Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python无与is关键字的比较_Python_Python 3.x_Comparison_Nonetype_Pep8 - Fatal编程技术网

Python无与is关键字的比较

Python无与is关键字的比较,python,python-3.x,comparison,nonetype,pep8,Python,Python 3.x,Comparison,Nonetype,Pep8,因此,只有当两个参数指向同一个对象时,is关键字才会返回true。我的问题与下面的片段有关 这个片段 number = None if number is None: print("PEP 8 Style Guide prefers this pattern") 输出 >>PEP 8 Style Guide prefers this pattern 这是否意味着当我指定number=None时,它只是通过引用,因为is检查它是否是同一个对象。我很困惑为什么会发生这种事??

因此,只有当两个参数指向同一个对象时,is关键字才会返回true。我的问题与下面的片段有关

这个片段

number = None
if number is None:
    print("PEP 8 Style Guide prefers this pattern")
输出

>>PEP 8 Style Guide prefers this pattern

这是否意味着当我指定number=None时,它只是通过引用,因为is检查它是否是同一个对象。我很困惑为什么会发生这种事??我错了吗??为什么选择这个设计?

所有作业都是参考的,请参阅。但是,该语言保证None是其类型的唯一对象。该值是在启动时创建的,文本None将始终生成对该值的引用

>>> a = None;  b = None
>>> a is b
True
>>> a = None
>>> b = None
>>> a is b
True
与像12345这样的文本相比,它可能会也可能不会生成对int类型的现有值的引用


为什么这会产生不同的结果其实并不重要,只是说一个实现可以根据int文本创建新的对象,如果它愿意的话。

所有赋值都是通过引用进行的,请参见。但是,该语言保证None是其类型的唯一对象。该值是在启动时创建的,文本None将始终生成对该值的引用

>>> a = None;  b = None
>>> a is b
True
>>> a = None
>>> b = None
>>> a is b
True
与像12345这样的文本相比,它可能会也可能不会生成对int类型的现有值的引用


为什么这会产生不同的结果其实并不重要,只是说一个实现可以根据int文本创建新的对象,如果它愿意的话。

这是因为两个原因

1.Python中的赋值是通过引用进行的。 在下面的代码中

x=对象 y=x printx是真的吗 printidx 139957673835552 printidy 139957673835552 调用对象在内存中创建一个新结构,可以使用id函数访问其唯一标识符。 您可以想象x和y是指向同一对象的箭头,这就是为什么它们的底层标识符在这两种情况下是相同的

同样地,当给变量赋值None时,您只是说number是一个别名,一个指向通过写入None返回的对象的箭头。你可以查一下

数字=无 printidNone,idnumber 将给您两次相同的标识符。但是等等!如果你为100000这样一个大数字做这件事呢

数量=100000 打印ID100000,idnumber不同的值! 这意味着相同的文本,写了两次,可以返回不同的对象,这带来了下一个原因

2.语言不保证任何内容 请注意,无论您获得多少次None标识符,您都会得到相同的标识符

printidNone 139957682420224 printidNone 139957682420224 printidNone 139957682420224 这是因为编写None不会创建新对象,如第一个示例中所示,因为语言规范表明内存中只有一个可能的非类型对象。换句话说,通过编写None只返回一个可能的对象,并按预期与is-work进行比较。这是一个很好的设计选择:只有一种规范的方式可以说明变量箭头指向虚无

事实上,鼓励使用is作为检查变量是否为None的Pythonic方法

您还可以通过编写

无类型=无类型 注意

无类型就是无 这是真的


注意:出于性能原因,其他文字(尤其是小数字)也满足唯一性属性。

这是因为两个原因

1.Python中的赋值是通过引用进行的。 在下面的代码中

x=对象 y=x printx是真的吗 printidx 139957673835552 printidy 139957673835552 调用对象在内存中创建一个新结构,可以使用id函数访问其唯一标识符。 您可以想象x和y是指向同一对象的箭头,这就是为什么它们的底层标识符在这两种情况下是相同的

同样地,当给变量赋值None时,您只是说number是一个别名,一个指向通过写入None返回的对象的箭头。你可以查一下

数字=无 printidNone,idnumber 将给您两次相同的标识符。但是等等!如果你为100000这样一个大数字做这件事呢

数量=100000 打印ID100000,idnumber不同的值! 这意味着相同的文本,写了两次,可以返回不同的对象,这带来了下一个原因

2.语言不保证任何内容 请注意,无论您获得多少次None标识符,您都会得到相同的标识符

printidNone 139957682420224 printidNone 139957682420224 printidNone 139957682420224 这是因为编写None不会创建新对象,如第一个示例中所示,因为语言规范表明内存中只有一个可能的非类型对象。换句话说,通过编写None只返回一个可能的对象,并按预期与is-work进行比较。这是一个很好的设计选择:只有一种规范的方式可以说明变量箭头指向虚无

事实上,使用是被鼓励的 Pythonic检查变量是否为None的方法

您还可以通过编写

无类型=无类型 注意

无类型就是无 这是真的


注意:出于性能原因,其他文字(尤其是小数字)也可以满足唯一性属性。

Python中的所有赋值都是通过引用进行的。如果您是这样问的话,没有一个是语言保证的单例。Python中的所有赋值都是通过引用进行的。没有一个是语言保证的单例,如果这就是你要问的……关于注释:这是一个实现细节,不是语言保证。关于注释:这是一个实现细节,不是语言保证。