Pragmatics of the is operator

candide candide at free.invalid
Sat Nov 26 20:42:52 EST 2011


Thanks to all for your response.


Le 27/11/2011 00:01, Steven D'Aprano a écrit :
> On Sat, 26 Nov 2011 22:20:36 +0100, candide wrote:
>
>> In which cases should we use the is() function ? The is() function
>> compares identity of objects rather than values so I was wondering in
>> which circumstances comparing identities of objects is really vital.
>
> `is` is not a function. It is a keyword and an operator.

oops exponent 10 !! I have in mind the id() function, very close to the 
is operator. An operator named "is" makes search of code snippets  very 
complicated because the verb "is" is always embedded in comments or 
documentation.



>> But how much "spam is None" is different from "spam == None" ?
>
> Even if you can guarantee that your code base does not contain any object
> which compares equal to None except for None itself (and how would you do
> that? a full audit of every line of code in every library you use?), the
> use of `is` should be preferred because it signals your intention much
> better.

OK but tons of good code use "spam == None" ; for instance, many tests 
files in Python official code. A random example (from 
openshot/openshot/windows/MainGTK.py):

# ---------------------------------------------------------------

					parent_name = item.parent
					if parent_name == None:
						match_iter = None

		# Check for NO files
		if mode == None and self.project.project_folder.items.__len__() == 0:
			#switch to the detail view

			
			if drop_track == None:
				# keep old parent, if no track found

		
		if self.new_clip_object == None:
			self.item_detected = False

# ---------------------------------------------------------------



>
> If your intention is to accept arbitrary objects which compare equal to
> None, than by all means use == for your comparison. But normally the
> intention is to accept None, and nothing else.


So, for the same reason, wouldn't it be better to use "if spam is True" 
against to "if spam == True"  (or better "if spam") ?


> That is correct. You probably should rarely use `is`. Apart from testing
> for None, use of `is` should be rare.


OK, thanks



More information about the Python-list mailing list