赞
踩
主要内容
行为面试技巧
层次 | 含义 |
---|---|
情景 | 什么情况下发生的 |
任务 | 你是如何明确任务的,团队如何分工 |
行动 | 你做了哪些事情 |
结果 | 结果如何,带来了什么收获 |
面试技巧篇因为本人经历有限,不能吹不能黑,还是靠实践,最后摆出一道题目吧:
讲讲你觉得最有技术含量的项目(如果你项目太多只能这样)
monkey patch
type/id/isinstance
函数判断ilist = [1,2,3]
idict = dict(a=1)
print(type(ilist)) # <class 'list'>
print(type(idict)) # <class 'dict'>
print(isinstance(ilist, list)) # True
print(id(idict)) # 1715274125376 内存地址
# 当使用is判断的时候,比较的就是地址值
mlist = [1,2,3]
ilist == mlist
ilist is mlist # False
l = [i for i in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l2 = (i for i in range(10)) # 现在是个生成器 <class 'generator'>
for i in l2:print(i) # 生成器推导可以节省内存
ilist = [1,2,3]
mlist = ['a','b','c']
d = {k:v for k,v in zip(a,b)} # 优雅!
print
成为函数u
),默认string
就是Unicode编码super()
方便直接调用父类函数a, b, *c = range(10)
# 也属于语法糖
import shutil
def test(arg1,arg2):
try:
shutil.copy2(arg1,arg2)
except OSError:
raise NotImplementedError("OSError") from OSError
test("copy","copy2")
range()/zip()/dict.items()
yield from
async/await
原生协程支持异步编程urllib/selector
__pycache__
__future__
模块
from __future__ import print_function
,是为了在老版本中兼顾新特性的一种方法def func1(mylist): # 你可能觉得这个传引用
mylist.append(3)
print(mylist)
def func2(mystr): # 你可能觉得这个传值
mystr += "niub"
print(mystr)
return
mlist = []
mstr = "Roy,"
func1(mlist)
func2(mstr)
bool/int/float/tuple/str
list/set/dict
def 函数名(...,形参名,形参名=默认值):
*args
、**kwargs
def print_args(*args):
print(type(args), args)
# enumerate() 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
for idx, val in enumerate(args):
print(idx, val) # idx是序号
print_args([1,2])
# <class 'tuple'> (1, 2)
# 0 1
# 1 2
# 可以传*[1,2],结果同上
# 可以传[1,2],得到 0 [1, 2]
def print_kwargs(**kwargs):
print(type(kwargs), kwargs)
for k, v in kwargs.items(): # dict.items() 返回可遍历的(键, 值) 元组数组
print('{}:{}'.format(k, v))
# 类似的,可传 **dict('a':1, 'b':2)
# 自定义一个异常
class MyException(Exception):
pass
try:
# 直接抛出
raise MyException("this is my customize exception")
except MyException as e: # 捕获处理,这里也可以捕Exception,只有捕了父类子类的也会被捕!
print(e)
finally:
print("over!")
my_exception()
yield
关键字就成了生成器next()
函数获取由yield语句返回的下一个值,举个例子:def simple_gen():
yield 'hello'
yield 'Roy'
gen = simple_gen()
print(type(gen))
print(next(gen)) # hello
print(next(gen)) # Roy
send()
向生成器(函数)发送数据和throw()
想函数抛出异常nose/pytest
和mock
模块# test.py
# pip install pytest
def test_search(): # 必须以test开头
# 正常值
assert binary_search([1,2,3,4], 1) == 1
assert binary_search([1,2,3,4], 7) == -1
# 边界值
assert binary_search([1,2,3,4], 0) == 1
assert binary_search([1,2,3,4], -1) == 1
# 异常值
assert binary_search([], 1) == 1
# 测试取值通常分为上面三类
pytest test.py
,如果是绿线证明测试通过!也可以定位错误# 浅拷贝
dic = {'a': [1,2,3]} # 字典是对象,里面的列表是子对象
b = dic.copy() # 当然,咱也可导入copy,copy.copy,效果相同!
dic['a'].append(4)
dic,b # ({'a': [1, 2, 3, 4]}, {'a': [1, 2, 3, 4]})
# 深拷贝
import copy
c = copy.deepcopy(dic)
dic, c # ({'a': [1, 2, 3, 4]}, {'a': [1, 2, 3, 4]})
dic['a'].append(5)
dic, c # ({'a': [1, 2, 3, 4, 5]}, {'a': [1, 2, 3, 4]})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。