python工程技巧_python 19个值得学习的编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。
0. 程序必须先让人读懂,然后才能让计算机执行。
“Programs must be written for people to read, and only incidentally for machines to execute.”
1. 交换赋值
##不推荐
temp = a
a = b
b = a
##推荐
a, b = b, a # 先生成一个元组(tuple)对象,然后unpack
2. Unpacking
##不推荐
l = ['David', 'Pythonista', '+1-514-555-1234']
first_name = l[0]
last_name = l[1]
phone_number = l[2]
##推荐
l = ['David', 'Pythonista', '+1-514-555-1234']
first_name, last_name, phone_number = l
# Python 3 Only
first, *middle, last = another_list
3. 使用操作符in
##不推荐
if fruit == "apple" or fruit == "orange" or fruit == "berry":
# 多次判断
##推荐
if fruit in ["apple", "orange", "berry"]:
# 使用 in 更加简洁
4. 字符串操作
##不推荐
colors = ['red', 'blue', 'green', 'yellow']
result = ''
for s in colors:
result += s # 每次赋值都丢弃以前的字符串对象, 生成一个新对象
##推荐
colors = ['red', 'blue', 'green', 'yellow']
result = ''.join(colors) # 没有额外的内存分配
5. 字典键值列表
##不推荐
for key in my_dict.keys():
# my_dict[key] ...
##推荐
for key in my_dict:
# my_dict[key] ...
# 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()
# 生成静态的键值列表。
6. 字典键值判断
##不推荐
if my_dict.has_key(key):
# ...do something with d[key]
##推荐
if key in my_dict:
# ...do something with d[key]
7. 字典 get 和 setdefault 方法
##不推荐
navs = {}
for (portfolio, equity, position) in data:
if portfolio not in navs:
navs[portfolio] = 0
navs[portfolio] += position * prices[equity]
##推荐
navs = {}
for (portfolio, equity, position) in data:
# 使用 get 方法
navs[portfolio] = navs.get(portfolio, 0) + position * prices[equity]
# 或者使用 setdefault 方法
navs.setdefault(portfolio, 0)
navs[portfolio] += position * prices[equity]
8. 判断真伪
##不推荐
if x == True:
# ....
if len(items) != 0:
# ...
if items != []:
# ...
##推荐
if x:
# ....
if items:
# ...
9. 遍历列表以及索引
##不推荐
items = 'zero one two three'.split()
# method 1
i = 0
for item in items:
print i, item
i += 1
# method 2
for i in range(len(items)):
print i, items[i]
##推荐
items = 'zero one two three'.split()
for i, item in enumerate(items):
print i, item
10. 列表推导
##不推荐
new_list = []
for item in a_list:
if condition(item):
new_list.append(fn(item))
##推荐
new_list = [fn(item) for item in a_list if condition(item)]
11. 列表推导-嵌套
##不推荐
for sub_list in nested_list:
if list_condition(sub_list):
for item in sub_list:
if item_condition(item):
# do something...
##推荐
gen = (item for sl in nested_list if list_condition(sl) /
for item in sl if item_condition(item))
for item in gen:
# do something...
12. 循环嵌套
##不推荐
for x in x_list:
for y in y_list:
for z in z_list:
# do something for x & y
##推荐
from itertools import product
for x, y, z in product(x_list, y_list, z_list):
# do something for x, y, z
13. 尽量使用生成器代替列表
##不推荐
def my_range(n):
i = 0
result = []
while i < n:
result.append(fn(i))
i += 1
return result # 返回列表
##推荐
def my_range(n):
i = 0
result = []
while i < n:
yield fn(i) # 使用生成器代替列表
i += 1
*尽量用生成器代替列表,除非必须用到列表特有的函数。
14. 中间结果尽量使用imap/ifilter代替map/filter
##不推荐
reduce(rf, filter(ff, map(mf, a_list)))
##推荐
from itertools import ifilter, imap
reduce(rf, ifilter(ff, imap(mf, a_list)))
*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。
15. 使用any/all函数
##不推荐
found = False
for item in a_list:
if condition(item):
found = True
break
if found:
# do something if found...
##推荐
if any(condition(item) for item in a_list):
# do something if found...
16. 属性(property)
##不推荐
class Clock(object):
def __init__(self):
self.__hour = 1
def setHour(self, hour):
if 25 > hour > 0: self.__hour = hour
else: raise BadHourException
def getHour(self):
return self.__hour
##推荐
class Clock(object):
def __init__(self):
self.__hour = 1
def __setHour(self, hour):
if 25 > hour > 0: self.__hour = hour
else: raise BadHourException
def __getHour(self):
return self.__hour
hour = property(__getHour, __setHour)
17. 使用 with 处理文件打开
##不推荐
f = open("some_file.txt")
try:
data = f.read()
# 其他文件操作..
finally:
f.close()
##推荐
with open("some_file.txt") as f:
data = f.read()
# 其他文件操作...
18. 使用 with 忽视异常(仅限Python 3)
##不推荐
try:
os.remove("somefile.txt")
except OSError:
pass
##推荐
from contextlib import ignored # Python 3 only
with ignored(OSError):
os.remove("somefile.txt")
19. 使用 with 处理加锁
##不推荐
import threading
lock = threading.Lock()
lock.acquire()
try:
# 互斥操作...
finally:
lock.release()
##推荐
import threading
lock = threading.Lock()
with lock:
# 互斥操作...
以上就是python19个值得学习的编程技巧的详细内容,更多关于python 编程技巧的资料请关注我们其它相关文章!
发表评论 QQ
昵称
邮箱
网址
有人回复时邮件通知我
python工程技巧_python 19个值得学习的编程技巧相关推荐
- 小甲鱼零基础入门python教程视频_绝对干货!小甲鱼零基础入门Python视频教程全套96集,值得学习...
原标题:绝对干货!小甲鱼零基础入门Python视频教程全套96集,值得学习 简介: 今日分享资源为:小甲鱼零基础入门免费学习Python全套教学视频,共96套. 小甲鱼教学视频生动有趣幽默,强烈推荐给 ...
- 2018年php还是python好_2018年PHP还值得学习吗?
年过完了,也要恢复紧张繁忙的工作状态了.任何事情都有惯性,从一个每天吃喝玩乐+旅游的状态,切换到每天都要写代码.写文章.赶项目的状态,确实有点吃不消. 好了,恢复正题.今年最火的话题莫过于:区块链.人 ...
- 在线学习新编程 技巧全攻略
摘要:有句俗语叫:"技多不压身",如果你有时间和兴趣,不妨多了解和掌握编程技能,或许随时可能有用.本文为你收集了一些编程技巧,让你轻松学编程. 有句俗语叫:"技多不压身& ...
- python熊猫图案_Python熊猫:您可能不知道的技巧和功能
python熊猫图案 Pandas is a foundational library for analytics, data processing, and data science. It's a ...
- 学习python时间安排_Python时间和日期学习
1 #coding=utf-8 2 __author__ = 'Administrator' 3 4 5 #日期和时间模块学习 6 """ 7 Python程序能用很多方 ...
- python随机数生成验证码_Python随机数random模块学习,并实现生成6位验证码
一.前言 学习python随机数random模块的使用 ,并使用模块中的函数,实现6位验证码生成 二.random模块 1.random.random() 返回0-1直接的随机数,类型为float & ...
- python定时器 循环_python从写定时器学习Thread
python从写定时器学习Thread python 如何写一个定时器,循环定时做某一操作呢? Timer 对象 from threading import Timer def hello(): pr ...
- python爬虫文件格式_Python网络爬虫数据格式学习(转换headers、表单和urlencode数据为字典格式)...
最近在学习爬虫时经常要复制浏览器的headers和表单数据到Python进行操作,但是复制过来的IE的数据格式是对用制表符('\t')进行分隔,而Chrome复制过来的是用冒号(':')分隔,不能够直 ...
- 提升 JavaScript 技能的5个小技巧,新手小白值得学习!
在使用 JavaScript 时,我们常常要写不少的条件语句.这里有五个小技巧,可以让你写出更干净.漂亮的条件语句. 1. 使用 Array.includes 来处理多重条件 举个栗子 : // 条件 ...
最新文章
- 《DBA修炼之道:数据库管理员的第一本书》——1.2节独特的优势
- SQL 学习与工作日常:语句积累
- CSS相邻兄弟选择器
- C 流插入和流提取运算符的重载
- 从数据库中获得表的字段和描述信息
- 修改Win7的默认文件夹排列方式
- 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
- linux系统下JDK的下载安装和配置教程
- vuejs --- 父组件向子组件传值(父传子)
- 苹果手机7P ios14 nfc怎么复制门禁卡
- 驱动力来自哪里——献给迷茫的程序员
- 各大银行网上转账手续一览表
- .dll、.lib、.dll.a 的区别
- winform中更新UI控件的方案介绍
- AI算力调度EasyCVR视频融合平台如何修改默认用户名?
- IP网络设备的测试方法
- Linux C语言生成随机数
- 跑跑卡丁车卡密自动充值工具
- linux云计算方向毕业设计,云计算毕业设计.doc
- 2021 字节跳动面试参考手册(第一期)!!!权威来袭~~~
热门文章
- 干货分享:单片机编程学习攻略!
- CMSIS-DAP和J-Link、ST-Link是什么关系?
- 文件处理_月隐学python第21课
- 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
- char类型是多少 mat_opencv之Mat数据类型
- 电脑销售渠道_双十一遇上英雄联盟S10,苏宁游戏装备销售增长258%
- 阿里云mysql 日志_mysql日志-阿里云开发者社区
- checkbox居中 editor_如何在ListBoxItem中居中WPF CheckBox
- vue商城源码_一个标星 5.2k+ 的牛逼开源商城系统
- Python中高级变量类型(列表,元组,字典,字符串,公共方法...)