喝杯咖啡的功夫就能学会的100个非常有用的Python技巧

2024-06-21 08:08

本文主要是介绍喝杯咖啡的功夫就能学会的100个非常有用的Python技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”

因公众号更改了推送规则,记得读完点“在看”~下次AI公园的新文章就能及时出现在您的订阅列表中


作者:Fatos Morina

编译:ronghuaiyang

导读

有些可能大家都了解,还有一些确实不太常见,但是确实好用,内容有点多,100条,分3次发,先发第1~33条。

Python现在非常流行,主要是因为它简单,容易学习。你可以用它来完成很多任务,比如数据科学和机器学习、web开发、脚本编写、自动化等。

这里总结了100条很有用的tips给你:

1.  “for” 循环中的“Else”条件

除了目前为止你已经看到的所有Python代码之外,你有可能错过了下面的“for-else”,这也是我在几周前第一次看到的。

这是一个用于循环遍历列表的“for-else”方法,尽管对列表进行了迭代,但仍然有一个“else”条件,这是非常不寻常的。

这是我在Java、Ruby或JavaScript等其他编程语言中所没有看到的。

让我们看一个实践中的例子。

假设我们要检查列表中是否没有奇数。

让我们来遍历一下:

numbers = [2, 4, 6, 8, 1]for number in numbers:if number % 2 == 1:print(number)break
else:print("No odd numbers")

如果我们发现一个奇数,那么这个数字将被打印,因为break将被执行,而else分支将被跳过。

否则,如果break从未被执行,执行流将继续执行else分支。

在这个例子中,我们将输出1。

2. 使用命名的变量从列表中取元素

my_list = [1, 2, 3, 4, 5]
one, two, three, four, five = my_list

3. 使用heapq从列表中获取最大或最小的元素

import heapqscores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]print(heapq.nlargest(3, scores))  # [91, 87, 82]print(heapq.nsmallest(5, scores))  # [15, 33, 33, 49, 51]

4. 把列表中的值作为参数传递给方法

可以使用" * "提取列表中的所有元素:

my_list = [1, 2, 3, 4]print(my_list)  # [1, 2, 3, 4]print(*my_list)  # 1 2 3 4

当我们想将列表中的所有元素作为方法参数传递时,这很有用:

def sum_of_elements(*arg):total = 0for i in arg:total += ireturn totalresult = sum_of_elements(*[1, 2, 3, 4])
print(result)  # 10

5. 获取列表的所有中间元素

_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]print(elements_in_the_middle)  # [2, 3, 4, 5, 6, 7]

6. 一行赋值多个变量

one, two, three, four = 1, 2, 3, 4

7. 列表推导

你可以使用推导如,让我们将列表中的每个数字都取二次方:

numbers = [1, 2, 3, 4, 5]
squared_numbers = [num * num for num in numbers]print(squared_numbers)

推导不仅仅局限于使用列表。还可以将它们与字典、集合和生成器一起使用。

让我们看另一个例子,使用字典推导将一个字典的值提升到二阶:

![](100 Helpful Python Tips You Can Learn Before Finishing Your Morning Coffee.assets/1_4D3OCbHOCfHiI8A3ru4xRQ.png)

Comprehensions are not just limited to working with lists. You can also use them with dictionaries, sets, and generators as well.

dictionary = {'a': 4, 'b': 5}
squared_dictionary = {key: num * num for (key, num) in dictionary.items()}print(squared_dictionary)  # {'a': 16, 'b': 25}

8. 通过Enum枚举相同概念的相关项

来自文档:

Enum是绑定到唯一值的一组符号名。它们类似于全局变量,但它们提供了更有用的repr()、分组、类型安全和其他一些特性。

下面是例子:

from enum import Enumclass Status(Enum):NO_STATUS = -1NOT_STARTED = 0IN_PROGRESS = 1COMPLETED = 2print(Status.IN_PROGRESS.name)  # IN_PROGRESS
print(Status.COMPLETED.value)  # 2

9. 不使用循环来重复字符串

name = "Banana"
print(name * 4)  # BananaBananaBananaBanana

10. 像数学式子一样比较3个数字

如果你有一个值,你想比较它是否在其他两个值之间,有一个简单的表达式,你在数学中使用:

1 < x < 10

这是我们在小学学过的代数表达式。但是,你也可以在Python中使用相同的表达式。

是的,你没听错。之前,你可能已经做过这种形式的比较:

1 < x and x < 10

现在,你只需要在Python中使用以下代码:

1 < x < 10

![img](100 Helpful Python Tips You Can Learn Before Finishing Your Morning Coffee.assets/1_peOH8-oPHF_kxW2UtOpKsw.png)

这在Ruby中行不通,Ruby是一种旨在让程序员开心的编程语言。这在JavaScript中也可以工作。

看到这样一个简单的表达没有得到更广泛的讨论,我真的很惊讶。至少,我还没有看到人们这么频繁地提到它。

11. 在单条语句中合并字典

从Python 3.9开始可用:

first_dictionary = {'name': 'Fatos', 'location': 'Munich'}second_dictionary = {'name': 'Fatos', 'surname': 'Morina',                     'location': 'Bavaria, Munich'}result = first_dictionary | second_dictionaryprint(result)  # {'name': 'Fatos', 'location': 'Bavaria, Munich', 'surname': 'Morina'}

12. 在tuple中找到元素的索引

books = ('Atomic habits', 'Ego is the enemy', 'Outliers', 'Mastery')print(books.index('Mastery'))   # 3

13. 把字符串列表转换成一个列表

假设你在一个字符串函数中获得输入,但它应该是一个列表:

input = "[1,2,3]"

你不需要那种格式,你需要的是一个列表:

input = [1,2,3]

或者你可能从一个API调用得到以下响应:

input = [[1, 2, 3], [4, 5, 6]]

你所要做的就是导入模块ast,然后调用它的方法literal_eval,而不用去写复杂的正则表达式:

import astdef string_to_list(string):    return ast.literal_eval(string)

这就是你需要做的。

现在你会得到一个列表作为结果,或者列表的列表,如下所示:

import astdef string_to_list(string):return ast.literal_eval(string)string = "[[1, 2, 3],[4, 5, 6]]"
my_list = string_to_list(string)
print(my_list)  # [[1, 2, 3], [4, 5, 6]]

14. 使用命名参数避免 “trivial” 错误

假设你想求两个数的差。差不是可交换的:

a - b != b -a

然而,我们可能会忘记参数的顺序,这可能会导致“trivial”错误:

def subtract(a, b):return a - bprint((subtract(1, 3)))  # -2
print((subtract(3, 1)))  # 2

为了避免这种潜在的错误,我们可以简单地使用命名参数,参数的顺序不再重要:

def subtract(a, b):return a - bprint((subtract(a=1, b=3)))  # -2
print((subtract(b=3, a=1)))  # -2

15. 使用单个print()语句打印多个元素

print(1, 2, 3, "a", "z", "this is here", "here is something else")

16. 一行打印多个元素

print("Hello", end="")
print("World")  # HelloWorld
print("Hello", end=" ")
print("World")  # Hello World
print('words',   'with', 'commas', 'in', 'between', sep=', ')
# words, with, commas, in, between

17. 打印多个值,每个值之间使用自定义分隔符

你可以很容易地做高级打印:

print("29", "01", "2022", sep="/")  # 29/01/2022print("name", "domain.com", sep="@")  # name@domain.com

18. 不能在变量名的开头使用数字

four_letters = “abcd” # this works4_letters = “abcd” # this doesn’t work

19. 不能在变量名的开头使用操作符

+variable = “abcd”  # this doesn’t work

20. 你不能把0作为数字的第一个数字

number = 0110 # this doesn't work

21. 你可以在变量名的任何位置使用下划线字符

这意味着,在任何你想要的地方,在变量名中,你想要多少次就有多少次:

a______b = "abcd"  # this works
_a_b_c_d = "abcd"  # this also works

我不鼓励你使用它,但如果你看到像这样奇怪的变量命名,要知道它实际上是一个有效的变量名。

22. 可以用下划线分隔较大的数字

这样读起来更容易。

print(1_000_000_000)  # 1000000000
print(1_234_567)  # 1234567

23. 颠倒列表的顺序

my_list = ['a', 'b', 'c', 'd']my_list.reverse()print(my_list)  # ['d', 'c', 'b', 'a']

24. 使用step函数对字符串切片

my_string = "This is just a sentence"
print(my_string[0:5])  # This# Take three steps forward
print(my_string[0:10:3])  # Tsse

25. 反向切片

my_string = "This is just a sentence"
print(my_string[10:0:-1])  # suj si sih# Take two steps forward
print(my_string[10:0:-2])  # sjs i

26. 只有开始或结束索引的部分切片

表示切片的开始和结束的索引可以是可选的。

my_string = "This is just a sentence"
print(my_string[4:])  # is just a sentenceprint(my_string[:3])  # Thi

27. Floor 除法

print(3/2)  # 1.5
print(3//2)  # 1

28. == 和 “is” 的差别

" is "检查两个变量是否指向内存中的同一个对象。

" == "比较这两个对象的值是否相等。


first_list = [1, 2, 3]
second_list = [1, 2, 3]# Is their actual value the same?
print(first_list == second_list)  # True# Are they pointing to the same object in memory
print(first_list is second_list)  
# False, since they have same values, but in different objects in memorythird_list = first_listprint(third_list is first_list)  
# True, since both point to the same object in memory

29. 更改分配给另一个变量的变量的值

当一个变量被赋值给另一个变量时,它的值实际上被复制到第二个变量中。

这意味着第一个变量之后的任何变化都不会反映在第二个变量中:

first = "An initial value"
second = first
first = "An updated value"print(first)  # An updated value
print(second)  # An initial value

30. 检查一个字符串是否大于另一个字符串

first = "abc"
second = "def"
print(first < second)  # True
second = "ab"
print(first < second)  # False

31. 检查字符串是不是从特定字符开始的

my_string = "abcdef"
print(my_string.startswith("b"))  # False

32. 使用id()找到变量的唯一id

print(id(1))  # 4325776624
print(id(2))  # 4325776656
print(id("string"))  # 4327978288

33. Integers, floats, strings, booleans, sets以及tuples是不可修改的

当将变量赋给整数、浮点数、字符串、布尔值、集合和元组等不可变类型时,该变量将指向内存中的对象。

如果给该变量赋了另一个值,原来的对象仍然在内存中,但是指向它的变量丢失了:

number = 1
print(id(number))  # 4325215472
print(id(1))  # 4325215472number = 3
print(id(number))  # 4325215536
print(id(1))  # 4325215472

—END—

英文原文:https://towardsdatascience.com/100-helpful-python-tips-you-can-learn-before-finishing-your-morning-coffee-eb9c39e68958

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

这篇关于喝杯咖啡的功夫就能学会的100个非常有用的Python技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080664

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',