Python 3 那些非常规的技巧_python函数unloader

a = 5
b = 10

交换a 和 b

a, b = b, a


够漂亮吧?


### **4. 初始化列表**


假如你要一个是10个整数0的列表,你可能首先想到:



bag =
for _ in range(10):
bag.append(0)


换个方式吧:



bag = [0] * 10


看,多优雅。


注意:如果你列表包含了列表,这样做会产生浅拷贝。


举个例子:



bag_of_bags = [[0]] * 5 # [[0], [0], [0], [0], [0]]
bag_of_bags[0][0] = 1 # [[1], [1], [1], [1], [1]]


Oops!所有的列表都改变了,而我们只是想要改变第一个列表。


改一改啦:



bag_of_bags = [[0] for _ in range(5)]

[[0], [0], [0], [0], [0]]

bag_of_bags[0][0] = 1

[[1], [0], [0], [0], [0]]


同时记住:


“过早优化是万恶之源”


问问自己,初始化一个列表是必须的吗?


### **5. 构造字符串**


你会经常需要打印字符串。要是有很多变量,避免下面这样:



name = “Raymond”
age = 22
born_in = “Oakland, CA”
string = "Hello my name is " + name + "and I’m " + str(age) + " years old. I was born in " + born_in + “.”
print(string)


额,这看起来多乱呀?你可以用个漂亮简洁的方法来代替,.format。


这样做:



name = “Raymond”
age = 22
born_in = “Oakland, CA”
string = “Hello my name is {0} and I’m {1} years old. I was born in {2}.”.format(name, age, born_in)
print(string)


好多了!


### **6. 返回**


Python允许你在一个函数中返回多个元素,这让生活更简单。但是在解包元组的时候出出线这样的常见错误:



def binary:
return 0, 1
result = binary
zero = result[0]
one = result[1]


这是没必要的,你完全可以换成这样:



def binary:
return 0, 1
zero, one = binary


要是你需要所有的元素被返回,用个下划线\_:



zero, _ = binary


就是这么高效率!


### **7. 访问**


你也会经常给dicts中写入key,pair(键,值)。


如果你试图访问一个不存在的于dict的key,可能会为了避免KeyError错误,你会倾向于这样做:



countr = {}
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
for i in bag:
if i in countr:
countr[i] += 1
else:
countr[i] = 1
for i in range(10):
if i in countr:
print(“Count of {}: {}”.format(i, countr[i]))
else:
print(“Count of {}: {}”.format(i, 0))


但是,用get是个更好的办法。



countr = {}
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
for i in bag:
countr[i] = countr.get(i, 0) + 1
for i in range(10):
print(“Count of {}: {}”.format(i, countr.get(i, 0)))


当然你也可以用setdefault来代替。


这还用一个更简单却多费点开销的办法:



bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
countr = dict([(num, bag.count(num)) for num in bag])
for i in range(10):
print(“Count of {}: {}”.format(i, countr.get(i, 0)))


你也可以用dict推导式。



countr = {num: bag.count(num) for num in bag}


这两种方法开销大是因为它们在每次count被调用时都会对列表遍历。


### **8. 使用库**


现有的库只需导入你就可以做你真正想做的了。


还是说前面的例子,我们建一个函数来数一个数字在列表中出现的次数。那么,已经有一个库就可以做这样的事情。



from collections import Counter
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]
countr = Counter(bag)
for i in range(10):
print(“Count of {}: {}”.format(i, countr[i]))


一些用库的理由:


代码是正确而且经过测试的。


它们的算法可能会是最优的,这样就跑的更快。


抽象化:它们指向明确而且文档友好,你可以专注于那些还没有被实现的。


最后,它都已经在那儿了,你不用再造轮子了。


### **9. 在列表中切片/步进**


你可以指定start的点和stop点,就像这样list[start:stop:step]。我们取出列表中的前5个元素:



(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值