#!/usr/bin/env python
age = raw_input("age: ")
if age > 18:
print "can to netbar"
else :
print "no to wang ba"
Python2.7 中,raw_input 的默认返回值类型是 str, 和 int 型做比较,比较结果是什么?
回答
Bravian回答
在Python2中,比较运算遵循以下规则:
1. 数字和数字按大小排序 (数字类型包括 int, float, long, complex, bool)
2. 字符串和字符串按字典序排序(str, 按 unicode 编码比较每个字符的大小)
3. 数字类型和非数字类型比较,除None外,数字类型总是小于非数字类型。
4. 两个非数字不同类型,按其类型名的字典序排序
5. 第4点有一个特例,老式类的实例总是小于新式类
6. 非数字/字符串类型的同一类型的不同实例的比较,如果类定义了__cmp__()方法,则用该方法比较
7. 同上,若类型没定义__cmp__()方法, 则按实例在内存中的地址排序
8. None < None
9. 3,4,5,7 是CPython的实现,不是Python语言自身的标准,参见CPython implementation detail。Python语言规范只要求对非数字、非字符串类型的不同类型对象的比较,总是不相等的,比较结果可以是任意的,但必须是一致的(即多次比较,结果恒定)。
在实际工程中,一般不会对不同类型的对象进行比较,因为没有实际意义。
Python3对这个特性进行了改进 ( What’s New In Python 3.0 ), 规则如下:
1. incomparable类型对象比较 <, <=, >=, > 会 raise TypeError 异常,比如1 < '', 0 > None ,len <= len 都不再有意义,但是 None < None 会返回 Fasle
2. incomparable类型对象比较 !=, == 仍是合法的,不同类型的对象比较,总为False
3. cmp()和__cmp__()方法被弃置了,取而代之的是__lt__(),__eq__(),__hash__() ...
Python2 当初会设计这种比较规则,可能是为了便于对包含不同类型对象的容器排序。list.sort()和sorted()都仿照了C/C++里的sort。Python2.4后sort使用key来比较不同对象就更Pythonic。
(1)