揭秘,那些你可能不知道的 Python 小技巧

数据科
• 阅读 738

大家好,我是迟业~

今天,我们来看一看日常工作中经常使用的一些 Python 小技巧。

01.集合

开发人员常常忘记 Python 也有集合数据类型,大家都喜欢使用列表处理一切。集合(set)是什么?简单来说就是:集合是一组无序事物的汇集,不包含重复元素。如果你熟练掌握集合及其逻辑,那么很多问题都可以迎刃而解。举个例子,如何获取一个单词中出现的字母?

myword = "NanananaBatman"

就这么简单,问题解决了,这个例子就来自 Python 的官方文档,大可不必过于惊讶。再举一个例子,如何获取一个列表的各个元素,且不重复?

# first you can easily change set to list and other way around

我们可以看到,“c”元素不再重复出现了。只有一个地方你需要注意,mylist 与 mynewlist 之间的元素顺序可能会有所不同:

mylist = ["c", "c", "a","b"]

可以看出,两个列表的元素顺序不同。

下面,我们来进一步深入。

假设某些实体之间有一对多的关系,举个更加具体的例子:用户与权限。通常,一个用户可以拥有多个权限。现在假设某人想要修改多个权限,即同时添加和删除某些权限,应当如何解决这个问题?

# this is the set of permissions before change;

总的来说,不要害怕使用集合,它们能帮助你解决很多问题,更多详情,请参考 Python 官方文档。

02.日历

当开发与日期和时间有关的功能时,有些信息可能非常重要,比如某一年的这个月有多少天。这个问题看似简单,但是我相信日期和时间是一个非常有难度的话题,而且我觉得日历的实现问题非常多,简直就是噩梦,因为你需要考虑大量的极端情况。

那么,究竟如何才能找出某个月有多少天呢?

import calendar

某个月的第一天当然非常简单,就是 1 号。但是,“某个月的第一天是周X”,如何使用这条信息呢?你可以很容易地查到某一天是周几:

calendar.monthrange(2024, 2)

也许这段代码不适合直接用于生产,因为你可以使用 datetime 更容易地查找星期:

from datetime import datetime

总的来说,日历模块有很多有意思的地方,值得慢慢学习:

# checking if year is leap:

03.枚举有第二个参数

是的,枚举有第二个参数,可能很多有经验的开发人员都不知道。下面我们来看一个例子:

mylist = ['a', 'b', 'd', 'c', 'g', 'e']

第二个参数可以指定枚举开始的地方,比如上述代码中的 enumerate(mylist,16)。如果你需要处理偏移量,则可以考虑这个参数。

04.if-else 逻辑

你经常需要根据不同的条件,处理不同的逻辑,经验不足的开发人员可能会编写出类似下面的代码:
OPEN = 1

虽然这段代码看上去也没有那么糟,但是如果有 20 多个条件呢?
那么,究竟应该怎样处理呢?

from enum import IntEnum

在 Python 中这种模式很常见,它可以让代码看起来更加整洁,尤其是当方法非常庞大,而且需要处理大量条件时。

05.enum 模块

enum 模块提供了一系列处理枚举的工具函数,最有意思的是 Enum 和 IntEnum。我们来看个例子:

from enum import Enum, IntEnum, Flag, IntFlag

使用 IntEnum 编写的代码也差不多,但是有几个不同之处:

MyEnum.FIRST == "first" # False

在中等规模的代码库中,enum 模块在管理常量方面可以提供很大的帮助。enum 的本地化可能有点棘手,但也可以实现,我用django快速演示一下:

from enum import Enum

06.iPython`

iPython 就是交互式 Python,它是一个交互式的命令行 shell,有点像 Python 解释器。
首先,你需要安装 iPython:

pip install ipython

接下来,你只需要在输入命令的时候,将 Python 换成 ipython:

# you should see something like this after you start:

ipython 支持很多系统命令,比如 ls 或 cat,tab 键可以显示提示,而且你还可以使用上下键查找前面用过的命令。

最后

我的分享到这里就结束,希望能够给你带来一些帮助~

觉得可以,就点个赞,感谢你的支持~

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
java 11 不可修改集合API
不可修改集合API自Java9开始,Jdk里面为集合(List/Set/Map)都添加了of和copyOf方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。示例1:varlistList.of("Java","Python","C");varcopyList.copy
Irene181 Irene181
4年前
简述Python中常见的数据结构
「数仓宝贝库」,带你学数据!导读:Python中常见的数据结构有列表(list)、元组(tuple)、集合(set)、字典(dict)等,这些数据结构表示了自身在Python中的存在形式,在Python中可以输入type(对象)查看数据类型。1列表(1)创建列表列表是Python内置的一种数据类型,它是一种有序的数据集合,是用于存储一连串
Python进阶者 Python进阶者
4年前
说说Python集合的那些事儿
大家好,我是IT共享者,人称皮皮。今天给大家来捋一捋Python集合。一、什么是集合?集合(set)和字典(dict)类似,它是一组key的集合,但不存储value。集合的特性就是:key不能重复。二、集合常用操作1\.创建集合set的创建可以使用也可以使用set函数:s1'a','b','c','a','d','b'
小万哥 小万哥
2年前
Python 集合(Sets)1
集合集合用于在单个变量中存储多个项。集合是Python中的4种内置数据类型之一,用于存储数据集合,其他3种是列表(List)、元组(Tuple)和字典(Dictionary),它们都具有不同的特性和用途。集合是一种无序、不可更改()、无索引的集合。创建一个
Stella981 Stella981
4年前
Python中的list详解
Python中内置的一种数据类型list,列表。list是一个有序集合,所谓有序集合就是可以通过Key或者Index进行访问(无序集合,集合的元素只能遍历,比如set)。list能随时随地进行增加和删除。python中list用\\进行表示。例如:\\\friends\'fanbinbin','libinbin','xijin
Wesley13 Wesley13
4年前
Java内功系列
面试官:你能简单介绍List和Set有什么区别吗?小憨:List是一个有序的集合,在内存是连续存储的,可以存储重复的元素,List查询快,增删慢;Set是一个无序的集合,在内存中不连续,不可以存储重复的元素,Set增删快,查询慢;面试官:那HashSet是如何保证元素不重复的?小憨:3分钟。。。
Easter79 Easter79
4年前
Swift讲解专题五——集合类型
Swift讲解专题五——集合类型一、引言      Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型。Array用于存放一组有序的数据,数据角标从0开始一次递增;Set用于存放一组无序的数据,数据不可以重复;Dictionary也用于存放一组无序的数据,只是
Wesley13 Wesley13
4年前
Java_Learn
20180417集合类Collection如果是实现了list接口的集合类,具备的特点是有序,可重复;如果是实现了set接口的集合类,具备的特点是无序,不可重复;Collection中的方法 增加 删除查看  add("添加任意类型的元素到集合中"); addall("添加一个集合的元素到另外一个集合中") clear("
小万哥 小万哥
2年前
Python 元组完全指南1
元组用于在单个变量中存储多个项目。mytuple("apple","banana","cherry")元组是Python中的4种内置数据类型之一,用于存储数据集合,另外还有列表、集合和字典,它们都具有不同的特性和用途。元组是有序且不可更改的集合。元组使用圆
小万哥 小万哥
2年前
Python 集合(Sets)3
Python合并集合在Python中,有几种方法可以合并两个或多个集合。您可以使用union()方法,该方法返回一个包含两个集合中所有项的新集合,或使用update()方法,将一个集合中的所有项插入另一个集合中:示例,union()方法返回一个包含两个集合
卡里笔记 卡里笔记
5个月前
Python 数据类型入门:数字/字符串/列表 元组/字典/ 集合/字节/布尔,新手能直接用的代码指南
本文介绍了Python中常见的数据类型及其特性。数字类型包括整数、浮点数、布尔值和复数,其中bool是int的子类;字符串支持拼接、切片等操作;元组是不可变序列,定义单元素元组需加逗号;列表是可变序列,支持增删改操作;字典以键值对存储,键必须为不可变类型;集合用于存储无序不重复元素,支持集合运算;布尔类型在Python中表现为True/False,可与数字作比较。文章还比较了type()和isinstance()的区别,并提供了各类型的常用操作示例。
数据科
数据科
Lv1
天生我材必有用,千金散尽还复来。
文章
4
粉丝
0
获赞
0