在本教程中,我们将展示11个技巧来编写更好的Python代码!我们展示了许多最佳实践,它们通过使代码更加简洁和更具python风格来改进代码。以下是所有技巧的概述:

1)使用enumerate()而不是range(len())进行迭代

2)使用列表comprehension代替原始的for循环

3)使用内置的Sort()方法对复杂的迭代进行排序

4)用集合存储唯一的值

5)使用generators节省内存

6)用.get()和.setdefault()在字典中定义默认值

7)用collections.Counter计数hashable对象

8)用f- string格式化字符串(Python 3.6+)

9)用.join()连接字符串

10)用双星号语法合并字典** (Python 3.5+)

11)用if x in list简化if语句,而不是单独检查每一项

1)使用enumerate()而不是range(len())进行迭代

如果我们需要遍历一个列表,并且需要跟踪索引和当前项,大多数人会使用range(len())语法。在本例中,我们希望遍历一个列表,检查当前项是否为负,并在本例中将列表中的值设置为0。虽然range(len())语法可以工作,但使用内置的枚举函数更好。这将以元组的形式返回当前索引和当前项。因此,我们可以直接检查这里的值,也可以访问带有索引的项。

squares = []
for i in range(10):squares.append(i*i)

2)使用list comprehension代替原始的for循环

假设我们想要创建一个具有特定值的列表,在本例中是一个包含0到9之间所有平方数的列表。冗长乏味的方法是创建一个空列表,然后使用for循环,进行计算,并将其附加到列表中:

data = (3, 5, 1, 10, 9)
sorted_data = sorted(data, reverse=True) # [10, 9, 5, 3, 1]

一种更简单的方法是list comprehension。这里我们只需要一行来实现同样的事情:

data = [{"name": "Max", "age": 6}, {"name": "Lisa", "age": 20}, {"name": "Ben", "age": 9}]
sorted_data = sorted(data, key=lambda x: x["age"])

list comprehension能力非常强大,甚至包括if语句。注意,list comprehension的用法有一点争议。它不应该被过度使用,尤其是当它损害了代码的可读性时。但我个人认为这种语法是清晰和简洁的。

3)使用内置的Sort()方法对复杂的迭代进行排序

如果我们需要对一些可迭代的对象,例如列表、元组或字典进行排序,我们不需要自己实现排序算法。我们可以简单地使用内置的排序函数。这将自动按升序对数字进行排序,并返回一个新的列表。如果我们想让结果按降序排列,我们可以使用参数reverse=True。正如我所说的,这适用于任何可迭代的对象,所以这里我们还可以使用元组。但是请注意,结果是一个列表!

# list comprehension
my_list = [i for i in range(10000)]
print(sum(my_list)) # 49995000# generator comprehension
my_gen = (i for i in range(10000))
print(sum(my_gen)) # 49995000

现在假设我们有一个复杂的迭代器。这里是一个列表,列表里面有字典,我们想要根据字典中的年龄对列表进行排序。为此,我们还可以使用排序函数,然后传入应该用于排序的关键参数。键必须是一个函数,所以这里我们可以使用lambda和返回年龄的单行函数。

data = [{"name": "Max", "age": 6}, {"name": "Lisa", "age": 20}, {"name": "Ben", "age": 9}]
sorted_data = sorted(data, key=lambda x: x["age"])

4)用集合存储唯一的值

如果我们有一个有多个值的列表,并且只需要唯一的值,一个很好的技巧是将我们的列表转换为集合。集合是一种无序的集合数据类型,没有重复的元素,所以在这种情况下,它删除了所有重复的元素。

name = "Alex"
my_string = f"Hello {name}"
print(my_string) # Hello Alexi = 10
print(f"{i} squared is {i*i}") # 10 squared is 100

如果我们已经知道我们需要唯一的元素,比如这里的质数,我们可以马上用花括号创建一个集合。这允许Python进行一些内部优化,并且它还有一些方便的方法来计算两个集合之间的交集和差异。

5)generator节省内存

在技巧2中,我向你展示了list comprehension。但是列表并不总是最好的选择。假设我们有一个非常大的列表有10000项我们想计算所有项的和。当然,我们可以使用列表来实现这一点,但是我们可能会遇到内存问题。这是一个我们可以使用生成器的完美例子。与list comprehension类似,我们可以使用生成器理解,它具有相同的语法,但使用圆括号而不是方括号。生成器懒洋洋地计算我们的元素,即。,它一次只生成一个条目,并且只在被请求时生成。如果我们计算这个生成器的和,我们看到我们得到了相同的正确结果。

from collections import Countermy_list = [10, 10, 10, 5, 5, 2, 9, 9, 9, 9, 9, 9]
counter = Counter(my_list)print(counter) # Counter({9: 6, 10: 3, 5: 2, 2: 1})
print(counter[10]) # 3

6)用.get()和.setdefault()在字典中定义默认值

假设我们有一个字典,它有不同的键,比如物品和物品的价格。在代码的某个时候,我们想要获得条目的计数,并且假设这个键也包含在字典中。当我们简单地尝试访问密钥时,它将崩溃我们的代码并引发一个KeyError。所以更好的方法是在字典上使用.get()方法。这也会返回键的值,但是如果键不可用,它不会引发键错误。相反,它返回我们指定的默认值,如果我们没有指定它,则返回None。

my_dict = {'item': 'football', 'price': 10.00}
price = my_dict['count'] # KeyError!# better:
price = my_dict.get('count', 0) # optional default value

7)用collections.Counter计数hashable对象

如果我们需要计算列表中元素的数量,那么在collections模块中有一个非常方便的工具可以完成此工作。我们只需要从集合中导入计数器,然后用列表作为参数创建计数器对象。如果我们打印这个,那么对于列表中的每一项,我们都可以看到这个项出现的次数,而且它已经排好序了,最常用的项在前面。单独计算会好得多。如果我们想要获得某一项的计数,只需访问该项,它就会返回相应的计数。如果不包含该项,则返回0。

from collections import Countermy_list = [10, 10, 10, 5, 5, 2, 9, 9, 9, 9, 9, 9]
counter = Counter(my_list)print(counter) # Counter({9: 6, 10: 3, 5: 2, 2: 1})
print(counter[10]) # 3

8)用f-strings格式化字符串(Python 3.6+)

这是自Python 3.6以来的新特性,在我看来是格式化字符串的最佳方式。我们只需要在字符串前面写一个f,然后在字符串里面我们可以使用大括号来访问变量。与旧的格式化规则相比,这更简单、更简洁,也更快。此外,我们可以在大括号中编写在运行时计算的表达式。举个例子,我们想要输出变量i的平方,我们可以简单地把这个操作写在f字符串中。

d1 = {'name': 'Alex', 'age': 25}
d2 = {'name': 'Alex', 'city': 'New York'}
merged_dict = {**d1, **d2}
print(merged_dict) # {'name': 'Alex', 'age': 25, 'city': 'New York'}

9)用.join()连接字符串

假设我们有一个包含不同字符串的列表,我们想将所有元素组合成一个字符串,每个单词之间用空格分隔。坏的方法是这样做:

list_of_strings = ["Hello", "my", "friend"]# BAD:
my_string = ""
for i in list_of_strings:my_string += i + " " 

我们定义了一个空字符串,然后遍历该列表,然后将单词和空格追加到该字符串。你应该知道,字符串是不可变的元素,所以这里我们每次都要创建新的字符串。对于大型列表,此代码可能非常慢,所以您应该立即忘记这种方法!更好、更快、也更简洁的是.join()方法:

.join() method:
# GOOD:
list_of_strings = ["Hello", "my", "friend"]
my_string = " ".join(list_of_strings)

10)用双星号语法合并字典** (Python 3.5+)

这种语法是自Python 3.5以来的新语法。如果我们有两个字典并且想要合并它们,我们可以为两个字典使用花括号和双星号。这里字典1有名字和年龄,字典2也有名字和城市。在与这个简洁的语法合并之后,我们最终的字典中有所有3个键。

d1 = {'name': 'Alex', 'age': 25}
d2 = {'name': 'Alex', 'city': 'New York'}
merged_dict = {**d1, **d2}
print(merged_dict) # {'name': 'Alex', 'age': 25, 'city': 'New York'}

11)用if x in list简化if语句,而不是单独检查每一项

假设我们有一个主色为红色、绿色和蓝色的列表。在代码的某个地方,我们有一个包含一些颜色的新变量,这里是c =红色。然后我们要检查这个颜色是否来自我们的主色。我们当然可以像这样检查列表中的每一项:

colors = ["red", "green", "blue"]c = "red"# cumbersome and error-prone
if c == "red" or c == "green" or c == "blue":print("is main color")

但这可能会变得很麻烦,我们很容易出错,例如,如果我们这里有一个错误的红色。如果大家对Python感兴趣的话,可以加一下我的微信哦:abb436574,免费领取一套学习资料和视频课程哟~更简单也更好的方法是使用语法if x in list:

colors = ["red", "green", "blue"]c = "red"# better:
if c in colors:print("is main color")

11个技巧让你编写出更好的Python代码,值得收藏!!相关推荐

  1. python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...

    原标题:涨姿势!这些小技巧让小白也可以写出更优雅的Python代码! 一.前言 我前两天回答了两个Python相关的问题,收到了很多赞,从答案被收藏的情况来看,确实对不少人都很有帮助,所以我也很开心. ...

  2. python写出的程序如何给别人使用-利用这10个工具,你可以写出更好的Python代码...

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1.B ...

  3. 利用这10个工具,你可以写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 很多人 ...

  4. 帮写python代码_10个工具,帮你写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1. ...

  5. 你应该知道的7个写出更好的 Java 代码的技巧

    来源:SpringForAll社区 查看这些技巧和窍门可以帮助你写出更好的 Java 代码. 是的,你可以按照以下7个技巧和窍门编写出简短.整洁的 Java 代码.他们中的一些可能会让你感到惊讶,但是 ...

  6. python优雅代码大全_10个Python技巧帮你写出更优雅的代码

    阅读本文需要 2 分钟,公众号 somenzz ,欢迎学习 Python 的朋友订阅. 现在写代码的门槛非常低了,少儿都开始编程了,但从代码的风格一眼看出编码水平.是的,写代码是容易的,写出易读的代码 ...

  7. 教你写出可读性高的Python代码

    如果有人问起 Python 程序员他们最喜欢 Python 哪一点,他们一定会提到 Python 的高可读性.确实,对于 Python 来说,其高可读性一直是这门语言设计的核心.一个不争的事实是,相对 ...

  8. 9个JavaScript小技巧:写出更简洁,高效代码

    JavaScript一直在变化进步着,这儿列举了一些小技巧帮你在2019年写出更简洁,高效的可拓展的代码.下面共列举了9个讲究使用的小技巧来帮助你成为更好的开发者. 1. async / await ...

  9. 5个小技巧让你写出更好的 JavaScript 条件语句

    在使用 JavaScript 时,我们常常要写不少的条件语句.这里有五个小技巧,可以让你写出更干净.漂亮的条件语句. 1.使用 Array.includes 来处理多重条件 举个栗子 : // 条件语 ...

最新文章

  1. 联想一体计算机排行,2019最具性价比一体机推荐 电脑一体机十大最新排名
  2. 5GS 协议栈 — NR 空中接口协议栈
  3. 用 C 语言开发一门编程语言 — 变量元素设计
  4. golang map 初始化 和 使用
  5. Python实现全民K歌歌曲下载
  6. Android -- 处理ViewPager的notifyDataSetChanged无刷新
  7. Taro+react开发(88):大写px 控制样式
  8. 项目案例:在线拍卖系统_冀拓公司在张家口开展尾矿库在线监测监控系统 建设项目...
  9. vSAN其实很简单-什么!vSAN主机启动慢?
  10. 计算机网络基础期末试题,计算机网络基础期末考试试题
  11. windows VM12虚拟机安装苹果系统(Mac OX 10.11)
  12. 推荐给中学生的数学课外书:《怎样解题——数学思维的新方法》
  13. ARM V8 SPEC B1 AArch64 Application level programer‘s Model
  14. cad找形心插件 lisp_晓东CAD家园-论坛-A/VLISP-[LISP程序]:求形心-谁有求形心的LISP.帮帮忙。时在是太累啦。 - Powered by Discuz!...
  15. 均线颜色怎么区分_六种颜色的均线包括哪六种颜色,其代表的含义分别是什么?...
  16. 团队的Kick off
  17. UVA10066(DP)
  18. 【Golang】查找-学习笔记
  19. android 方向键 按钮,这不科学!安卓虚拟按键、实体键谁更好?
  20. 淘宝居然还有卖代码的

热门文章

  1. 互联网晚报 | 3月3日 星期四 |​ 苹果将于北京时间3月9日凌晨2点举办春季发布会;vivo子品牌NEX被砍掉...
  2. 四大步骤做好需求调研
  3. 新的一年,推荐一些好书给大家
  4. html怎么设置椭圆文本框,html – 避免CSS border-radius中的椭圆形状
  5. 农夫过河+java,农夫过河问题(java版)
  6. php redis 删除key 通配符,php中redis批量删除key的方法是什么
  7. 查找(洛谷P2249题题解,C++语言描述)
  8. 【JSP】JSP的运行原理
  9. 【数据结构与算法】分离链接法散列表的Java实现
  10. 欢乐的跳(洛谷P1152题目链接,Java语言描述)