大厂们的python算法编程习惯

最近在看和使用github上的代码的时候,越来越发现不同来源的代码风格差异很大,个人的代码一般都比较直观,而大厂的代码都有一些固定的习惯。最近一直在看OpenAI的深度强化学习的python代码,发现了一些平时个人不怎么常用,但是却很不错的常用法,因此记录学习一下。

1 enumerate()

用于包装循环,返回索引和内容:

list1 = [2, 3, 4]
for i, eve in enumerate(list1):
	print(i, eve)

结果会是:

1 2
2 3
3 4

之前自己喜欢用for in range(len(…))的方式,但是不如这种方式直观。

2 father.init(self, paras)

大厂的算法程序喜欢多使用继承关系,将共有的一些属性和方法作为基类去实现,然后子类去继承或者重写父类。
虽然以前学过这种基本的面向对象设计思想,但是在实际中真正看到其应用还是感觉很不一样。
比如实现多种DQN算法,DQN就是父类,DDQN就是子类。
多使用继承的机制,可以让算法的代码更容易理解和规范。

3 *para

a = 1
b = 2
c = a, b

上面的代码中c就会变成一个tuple,元组。
但是python中的元组还有解包的作用,比如函数想要传两个参数,则可以这样做:

def d(a, b):
	return a + b

d(*c)

*就代表了对元组中的元素进行解包,算是程序的简化方法。

4 numpy.array

自己一般喜欢使用list列表,觉得是python原生的东西很好用,但是实际上numpy里的array底层计算效率更高(网上说的),主要是一些方法和属性很适合数组操作,因此当list中全是数时建议使用numpy.array。

a = [1, 2]
b = [3, 4]
c = a + b  # [1, 2, 3, 4]
a = np.array(a)
b = np.array(b)
c = a + b  # np.array([4, 6])
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值