Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >符合语言习惯的Python编程技巧

符合语言习惯的Python编程技巧

原创
作者头像
V站CEO-西顾
修改于 2019-01-15 02:25:49
修改于 2019-01-15 02:25:49
75500
代码可运行
举报
文章被收录于专栏:V站V站
运行总次数:0
代码可运行

V站

Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。

程序必须先让人读懂,然后才能让计算机执行

  • “Programs must be written for people to read, and only incidentally for machines to execute.”

交换赋值

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐temp = aa = bb = a   ##推荐a, b = b, a  #  先生成一个元组(tuple)对象,然后unpack

复制 文本

Unpacking

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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

复制 文本

使用操作符in

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐if fruit == "apple" or fruit == "orange" or fruit == "berry":    # 多次判断   ##推荐if fruit in ["apple", "orange", "berry"]:    # 使用 in 更加简洁

复制 文本

字符串操作

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐colors = ['red', 'blue', 'green', 'yellow'] result = ''for s in colors:    result += s  #  每次赋值都丢弃以前的字符串对象, 生成一个新对象   ##推荐colors = ['red', 'blue', 'green', 'yellow']result = ''.join(colors)  #  没有额外的内存分配

复制 文本

字典键值列表

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐for key in my_dict.keys():    #  my_dict[key] ...   ##推荐for key in my_dict:    #  my_dict[key] ... # 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()# 生成静态的键值列表。

复制 文本

字典键值判断

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐if my_dict.has_key(key):    # ...do something with d[key]      #python2支持,python3已经不支持此写法  ##推荐if key in my_dict:    # ...do something with d[key]

复制 文本

字典 get 和 setdefault 方法

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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]

复制 文本

判断真伪

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐if x == True:    # ....if len(items) != 0:    # ...if items != []:    # ...   ##推荐if x:    # ....if items:    # ...

复制 文本

遍历列表以及索引

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐items = 'zero one two three'.split()# method 1i = 0for item in items:    print i, item    i += 1# method 2for i in range(len(items)):    print i, items[i] ##推荐items = 'zero one two three'.split()for i, item in enumerate(items):    print i, item

复制 文本

列表推导

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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)]

复制 文本

列表推导-嵌套

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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...

复制 文本

循环嵌套

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐for x in x_list:    for y in y_list:        for z in z_list:            # do something for x & y   ##推荐from itertools import productfor x, y, z in product(x_list, y_list, z_list):    # do something for x, y, z

复制 文本

尽量使用生成器代替列表

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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### 尽量用生成器代替列表,除非必须用到列表特有的函数。

复制 文本

中间结果尽量使用imap/ifilter代替map/filter

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐reduce(rf, filter(ff, map(mf, a_list))) ##推荐from itertools import ifilter, imapreduce(rf, ifilter(ff, imap(mf, a_list)))### lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。

复制 文本

使用any/all函数

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐found = Falsefor item in a_list:    if condition(item):        found = True        breakif found:    # do something if found...   ##推荐if any(condition(item) for item in a_list):    # do something if found...

复制 文本

属性(property)

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐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)

复制 文本

使用 with 处理文件打开

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐f = open("some_file.txt")try:    data = f.read()    # 其他文件操作..finally:    f.close() ##推荐with open("some_file.txt") as f:    data = f.read()    # 其他文件操作...

复制 文本

使用 with 忽视异常(仅限Python 3)

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐try:    os.remove("somefile.txt")except OSError:    pass ##推荐from contextlib import ignored  # Python 3 only with ignored(OSError):    os.remove("somefile.txt")

复制 文本

使用 with 处理加锁

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##不推荐import threadinglock = threading.Lock() lock.acquire()try:    # 互斥操作...finally:    lock.release() ##推荐import threadinglock = threading.Lock() with lock:    # 互斥操作...

复制 文本

参考

  1. Python: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
  2. PEP 8: Style Guide for Python Code: http://www.python.org/dev/peps/pep-0008/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
符合语言习惯的Python编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。 程序必须先让人读懂,然后才能让计算机执行 “Programs must be written for people to read, and only incidentally for mac
禹都一只猫olei
2018/10/10
6070
hadoop streaming编程小demo(python版)
大数据团队搞数据质量评测。自动化质检和监控平台是用django,MR也是通过python实现的。(后来发现有orc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python编写MR的例子吧。 抄一句话:Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer。 1、首先,先介绍一下背景,我们的数据是存放在hive里的。hive建表语句如下: 我们将会解析元数据,和HDFS上的数据进行merge,方便
用户1225216
2018/03/05
1.1K0
Python编程思想(12):for-in循环
for-in循环可以用于遍历范围、列表、元素和字典等可迭代对象包含的元素。for-in循环的语法格式如下:
蒙娜丽宁
2020/06/16
3.7K0
整理了45个Python小技巧,非常实用!
今天给大家介绍一个Python备忘单,可以作为学习Python编程的快速参考指南。
小F
2023/12/11
2700
整理了45个Python小技巧,非常实用!
#小手一抬学Python# Python字典已经掌握了【附源码】
已经学完了列表与元组,那这两个都是按照顺序排列的,所以可以用索引取到值,本篇博客要学习的是字典,由上文可知,字典肯定就是不能按照索引取到值,就是没顺序,非序列的数据结构。
程序员迪迪
2022/01/04
7470
让你的 Python 代码优雅又地道
学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 译序 如果说优雅也有缺点的话,那就是你需要艰巨的工作才能得到它,需要良好的教育才能欣赏它。 —— Edsger Wybe Dijkstra 在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic。一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。而且Pyth
小小科
2018/05/04
1.1K0
让你的 Python 代码优雅又地道
掌握这些Python的高级用法,让代码更可读、运行更高效!
👆点击“博文视点Broadview”,获取更多书讯 Python是世界上最流行的编程语言(TIOBE Index for April 2022),它易于上手且多才多艺,除了用于神经网络的构建外, 还能用来创建Web应用、桌面应用、游戏和运维脚本等多种多样的程序。 Python语言语法简洁,易于上手, 但当你深入研究时, 会发现Python有很多高级用法,这些高级用法可以大幅度提高代码的可读性和运行效率。 此外, Python包含了海量的高质量第三方库, 许多重要的库已经成为Python开发不可或缺的内容。
博文视点Broadview
2022/05/06
8200
掌握这些Python的高级用法,让代码更可读、运行更高效!
Quora千赞回答,python新手应该避免哪些坑
对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。
派大星的数据屋
2022/04/02
3180
Python编程探索:从基础语法到循环结构实践(下)
接上篇 Python编程探索:从基础语法到循环结构实践(上),本篇文章将继续深入探讨Python的字符串操作、逻辑运算符、成员运算符以及条件语句和循环结构,并通过代码实例化来帮助读者更好地理解这些概念。
suye
2024/10/20
2080
Python编程探索:从基础语法到循环结构实践(下)
Pythonic
“Programs must be written for people to read, and only incidentally for machines to execute.”
vanguard
2020/12/31
4150
基于python3-sklearn,Flask 的回归预测系统
“傍晚小街路面上沁出微雨后的湿润,和煦的西风吹来,抬头看看天边的晚霞,嗯明天又是一个好天气。走到水果摊旁,挑了个根蒂蜷缩、敲起来声音浊响的青绿西瓜,一边满心期待着皮薄肉厚瓤甜的爽落感,一边愉快地想着,这学期狠下了工夫,基础概念弄得很清楚,算法作业也是信手拈来,这门课成绩一定差不了!”
流川疯
2019/01/17
1.1K0
11个技巧让你编写出更好的Python代码
在本教程中,我们将展示11个技巧来编写更好的Python代码!我们展示了许多最佳实践,它们通过使代码更加简洁和更具python风格来改进代码。以下是所有技巧的概述:
HuangWeiAI
2020/08/07
1.2K0
11个技巧让你编写出更好的Python代码
Python 循环语句的高级应用与技巧
在 Python 中,循环语句是实现重复操作的重要工具。以下将深入探讨一些高级的应用和技巧:
用户10354340
2024/10/07
780
Python新手应该避免哪些坑?
对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。
程序员小猿
2021/01/19
5120
7.python3实用编程技巧进阶(二)
1.5.如何根据字典中值的大小,对字典中的项进行排序 第一种方法:列表解析 # 1.5.如何根据字典中值的大小,对字典中的项进行排序 from random import randint d = {k: randint(60, 100) for k in 'abcdefg'} print(d) #第一种方法:使用列表解析或者zip()函数,把字典的keys和values反转过来 list1 = [(v,k) for k,v in d.items()] #或者使用zip()函数 # list2 = lis
zhang_derek
2019/08/18
4350
深度剖析Python字典和集合
“字典这个数据结构活跃在所有Python程序的背后,即便你的源码里并没有直接用到它”,摘抄自《代码之美》第18章Python的字典类:如何打造全能战士。字典是Python语言的基石!在函数的关键字参数、实例的属性和模块的命名空间都能够看到它的身影,我们自己写代码时也经常会用到。
dongfanger
2021/03/22
1.7K0
Python高效编程技巧
首先获取字典的 keys,然后取每轮比赛 key 的交集。由于比赛轮次数是不定的,所以使用 map 来批量操作
Python编程与实战
2019/12/04
7920
Python——基础篇
1.Python 2 中一个int包含32位,long包含64位;Python 3 取消了long型,int可以存储任意大小的整数。 2. Python 3 提供了对Unicode的支持,可以包含世界上任何书面语言以及很多特殊符号。 3. 若mac使用了zsh,则在~/.zshrc文件最后,增加一行:source ~/.bash_profile 4. 安装pip,curl https://bootstrap.pypa.io/get-pip.py -o {dir/filename},sudo python3 get-pip.py即可
matt
2022/10/25
5290
Python数据内容
字符串作为python中最为常见的一种结构,它最典型的特征就是有引号,无论是单引号,或是双引号,还是三引号,它们都是字符串。
我被狗咬了
2019/09/23
8690
Python 字典 dict
有时候为了方便起见,就算某个键在映射里不存在,我们也希望在通过 这个键读取值的时候能得到一个默认值。有两个途径能帮我们达到这个目的,一个是通过 defaultdict,这个类型而不是普通的 dict,另一个 是给自己定义一个 dict 的子类,然后在子类中实现 __missing__ 方法。
为为为什么
2022/08/09
8790
Python 字典 dict
相关推荐
符合语言习惯的Python编程技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验