1. python单下划线_foo、双下划线__foo、__foo__的区别。
"单下划线" 开始的成员变量叫作保护变量,意思是只有类对象和子类对象本身能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象本身能访问,连子类对象也不能访问到这个数据。java
以单下划线开头(_foo)的表明不能直接访问的类属性,需经过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)表明类的私有成员;以双下划线开头和结尾的(__foo__)表明python里特殊方法专用的标识,如 __init__()表明类的构造函数。python
2. python中__new__和__init__的区别,说法正确的是? (A B C D)
A.__new__是一个静态方法,而__init__是一个实例方法。app
B.__new__方法会返回一个建立的实例,而__init__什么都不返回。函数
C.只有在__new__返回一个cls的实例时,后面的__init__才能被调用。spa
D.当建立一个新实例时调用__new__,初始化一个实例时用__init__。 code
__init__ 方法为初始化方法, __new__方法才是真正的构造函数。 对象
__new__方法默认返回实例对象供__init__方法、实例方法使用。 blog
__init__ 方法为初始化方法,为类的实例提供一些属性或完成一些动做。 接口
__new__ 方法建立实例对象供__init__ 方法使用,__init__方法定制实例对象。 作用域
__new__是一个静态方法,而__init__是一个实例方法。
def dec(f):
n =
3
def wrapper(*args,**kw):
return
f(*args,**kw) * n
return
wrapper
@dec
def foo(n):
return
n *
2
A.foo(2) == 12 B.foo(3) == 12 C.foo(2) == 6 D.foo(3) == 6
@dec 的做用是把原 foo 函数(待装饰函数)赋值给 dec 函数(装饰器),而后将返回值 wrapper 函数(已装饰函数)从新赋值给 foo 函数。所以,foo 语句实际执行状况是:foo(2) = foo(2) * 3 = 2 * 2 * 3 = 12,其中前面的 foo 函数是已装饰函数,后面的 foo 函数是原来的待装饰函数。By the way,函数参数中的 *args 表明可变参数,**kw 表明关键字参数。
4. 装饰器执行顺序。
def decorator_a(func): print 'Get in decorator_a' def inner_a(*args, **kwargs): print 'Get in inner_a' return func(*args, **kwargs) return inner_a def decorator_b(func): print 'Get in decorator_b' def inner_b(*args, **kwargs): print 'Get in inner_b' return func(*args, **kwargs) return inner_b @decorator_b @decorator_a def f(x): print 'Get in f' return x * 2 f(1)
实际上运行的结果以下:
Get in decorator_a Get in decorator_b Get in inner_b Get in inner_a Get in f
4.下列代码 [i**i for i in xrange(3)] 的执行结果是(A)
A.[1, 1, 4] B.[0, 1, 4] C.[1, 2, 3] D.(1, 1, 4)
(1)这是一个列表生成式,即对于生成器 xrange(3) 中的每一个值(分别是0,1,2),赋值给变量 i
,而后执行 i**i
的操做。
(2)xrange() 与 range() 的用法彻底相同,区别是 xrange() 的返回值是生成器,而 range() 的返回值是列表。(Python3 range即为原来的xrange)
(3)Python 中的 **
运算表明幂运算,但有个特殊状况,官方文档中把 0**0
的值定义为 1
。
5. 'a' < 'b' < 'c' 返回(True)。('a' > 'b' or 'c') 返回 ('c')。
Python 支持连续比较,'a' < 'b' < 'c' 至关于 'a' < 'b' and 'b' < 'c',其本质是字符 ASCII 码的大小比较,该判断式结果为 True。
x =
1
def change(a):
x +=
1
print x
change(x)
print 1.2 - 1.0 == 0.2
False