

根据候选人过去的行为评测其胜任能力

__iter__魔术方法的对象可以用for迭代[i for i in range(10) if i % 2 == 0](i for i in range(10))返回生成器def hello(name: str) -> str:
   return 'hello' + nameclass Base(object):
 def hello(self):
     print('say hello')
class C(Base):
 def hello(self):
         # py2
     return super(C, self).hello()
class C2(Base):
 def hello(self):
         # py3
     return super().hello()a, b, *rest = range(10)def add(a, b, *, c):
    print(a+b+c)
# 会报错
add(1, 2, 3)
# 正确写法
add(1, 2, c=3)__pycache____future__def flist(l):
    l.append(0)
    print(l)
    
l = []
flist(l) #[0]
flist(l) #[0, 0]def fstr(s):
    s + = 'a'
    print(s)
s = 'hehe'
fstr(s) #'hehea'
fstr(s) #'hehea'# 一个小例题,请问这段代码会输出什么结果?
# first
def clear_list(l):
    l = []
ll = [1, 2, 3]
clear_list(ll)
print(ll)
# second
# 默认参数只计算一次
def flist(l=[1]):
    l.append(1)
    print(l)
flist()
flist()*args被打包成tuple**kwargs被打包成dicttry:
    # func                            # 可能会抛出异常的代码
except (Exception1, Exception2) as e: # 可以捕获多个异常并处理
    # 异常处理代码
else:
    pass                              # 异常没有发生的时候代码逻辑
finally:
    pass                              # 无论异常有没有发生都会执行的代码,一般处理资源的关闭和释放class MyException(Exception):
    pass 
try:
    raise MyException('my exception')
except MyException as e:
    print(e)

import threading
n = [0]
def foo():
    n[0] = n[0] + 1
    n[0] = n[0] + 1
threads = []
for i in range(50000):
    t = threading.Thread(target=foo)
    threads.append(t)
for t in threads:
    t.start()
print(n)
# 大多数情况下打印10000,偶尔打印9998,Python的多线程并不是绝对安全的import dis
def update_list(l):
 # 原子操作,不用担心线程安全问题
    l[0] = 1
dis.dis(update_list)
'''
 5           0 LOAD_CONST               1 (1)
 2 LOAD_FAST                0 (l)
 4 LOAD_CONST               2 (0)
 6 STORE_SUBSCR             # 字节码操作,线程安全
 8 LOAD_CONST               0 (None)
 10 RETURN_VALUE
'''
def incr_list(l):
 # 危险!不是原子操作
    l[0] += 1
dis.dis(incr_list)
'''
 3           0 LOAD_FAST                0 (l)
 2 LOAD_CONST               1 (0)
 4 DUP_TOP_TWO
 6 BINARY_SUBSCR
 8 LOAD_CONST               2 (1)
 10 INPLACE_ADD              # 需要多个字节码操作,有可能在线程执行过程中切到其他线程
 12 ROT_THREE
 14 STORE_SUBSCR
 16 LOAD_CONST               0 (None)
 18 RETURN_VALUE
'''