1. python单下划线_foo、双下划线__foo、__foo__的区别。
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。
2. python中__new__和__init__的区别,说法正确的是? (A B C D)
A.__new__是一个静态方法,而__init__是一个实例方法。
B.__new__方法会返回一个创建的实例,而__init__什么都不返回。
C.只有在__new__返回一个cls的实例时,后面的__init__才能被调用。
D.当创建一个新实例时调用__new__,初始化一个实例时用__init__。
__init__ 方法为初始化方法, __new__方法才是真正的构造函数。
__new__方法默认返回实例对象供__init__方法、实例方法使用。
__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
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。
6. 下列代码的打印结果是 (报错)。
x =
1
def change(a):
x +=
1
print x
change(x)
Python的变量作用范围(即LEGB规则)。是错在 x+=1,print(x)没错。定义在外部的变量是有全局作用域,但是函数内部未声明global时,只可读而不能写。
7. 如何解释下面的执行结果? (B)
print 1.2 - 1.0 == 0.2
False
A. Python的实现有错误
B. 浮点数无法精确表示
C. 布尔运算不能用于浮点数比较
D. Python将非0数视为False
Python 中浮点数的运算存在误差。1.2 - 1.0的值不是0.2,而是0.19999999999999996。