字节跳动实习_企业Python技术学习与收获
前言
最近工作中,总会因为一些接口的问题导致多个技术工程师之间的交流问题,所以把以前没有考虑过的概念进行再次学习。
0.规范化命名与代码注释
没有进入企业之前,其实对这些真的也有了解,也觉得很重要,但是纸上得来终觉浅,每次在写代码的时候,也没有特别注意,但是进入企业第一天编写的case脚本,就被leader说了,所以这些真的也是很基础判断你是否有经验的细节啊
下面这段代码看起来就很好看。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@staticmethod
@print_run_time
def get_template_point(logging, template_list, pic_data):
"""
获得对应图片与模板对比的结果
@:param logging : 日志
@:param template_path: 模板存储的根目录
@:param pic_path: 需要对比的图片地址
@:return
"""
target_point = {}
engine = ['Template']
engine_name = engine[0] + 'Engine'
flag = True
dict_point, template_names = TemplateCompare.find_template_loc_multiprocessing(template_list, pic_data)
for i in template_names:
try:
if dict_point[i][engine_name]['target_sim'] < 0.90:
logging.info('Template find error')
flag = False
break
target_point[i] = dict_point[i][engine_name]['target_point']
except ValueError:
target_point[i] = [-1, -1]
logging.info('Template find error')
flag = False
return flag, target_point
-
函数使用小写_小写 def run_test(self):
-
临时变量小写_小写 need_to_login
-
class类名单词大写驼峰 UserGoldStoreTestBase
-
字符串之间空一格 CommonStep.login(self, app, device=device)
###1. 装饰器迭代器等高级编程
- 利用装饰器查询代码执行时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def print_run_time(func):
def wrapper(*args, **kw):
local_time = time.time()
ret = func(*args, **kw)
print('current Function [%s] run time is %.2f' % (func.__name__ , time.time() - local_time))
return ret
return wrapper
@print_run_time
@staticmethod
def json_delete_from_name(json_dict, name):
feature = json_dict['pic_feature']
lists = feature[1:-1].split(',')
new = list()
for values in lists:
d = eval(values)
if BaseMethod.get_tos_id(d['feature_pic']) in name:
new.append(d)
json_dict['pic_feature'] = str(new)
return json_dict
-
使用串行改并行的简单操作进行一些程序的优化
https://blog.csdn.net/zhuzuwei/article/details/80907079
2. 规范化的log日志
这部分也是规范化开发的重要部分
https://www.geek-share.com/detail/2755784180.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736
3. Json 和 Dict
-
两者还是有很大差别的
-
Python 的字典是一种数据结构,JSON 是一种数据格式。
json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。
-
一个是用于内存,一个是用于传输,可以相互转化
dict 存在于内存中,可以被序列化成 json 格式的数据(string),之后这些数据就可以传输或者存储了。JSON 是一种数据传输格式。
参考链接 :https://www.jianshu.com/p/87dbf4024cde
4. HTTP 和 RPC协议
-
RPC(即Remote Procedure Call,远程过程调用)
-
HTTP(HyperText Transfer Protocol,超文本传输协议)
他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。
参考链接:https://blog.csdn.net/MOU_IT/article/details/79873612
5. 接口定义语言 IDL
- 在使用bytedeuler的微服务框架时,开始需要定义接口Thrift,其实就是定义对应接口定义语言,方便跨语言进行开发
Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。
参考链接:https://blog.csdn.net/zhaoyang17/article/details/6359436
6. 函数变量传递
不要使用太多的参数,尽量打包好,而且要变量一致化。
写注释,写注释,写注释