iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >有哪些Python小技巧
  • 253
分享到

有哪些Python小技巧

2023-06-15 17:06:51 253人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“有哪些python小技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python小技巧”吧!集合开发人员常常忘记 Python 也有集合数据类型,大家都喜欢使用列

这篇文章主要讲解了“有哪些python小技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python小技巧”吧!

集合

开发人员常常忘记 Python 也有集合数据类型,大家都喜欢使用列表处理一切。

集合(set)是什么?简单来说就是:集合是一组无序事物的汇集,不包含重复元素。

如果你熟练掌握集合及其逻辑,那么很多问题都可以迎刃而解。举个例子,如何获取一个单词中出现的字母?

myWord = "NanananaBatman"  set(myword)  {'N', 'm', 'n', 'B', 'a', 't'}

就这么简单,问题解决了,这个例子就来自 Python 的官方文档,大可不必过于惊讶。

再举一个例子,如何获取一个列表的各个元素,且不重复?

# first you can easily change set to list and other way around  mylist = ["a", "b", "c","c"]  # let's make a set out of it  myset = set(mylist)  # myset will be:  {'a', 'b', 'c'}  # and, it's already iterable so you can do:  for element in myset:      print(element)  # but you can also convert it to list again:  mynewlist = list(myset)  # and mynewlist will be: ['a', 'b', 'c']

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

mylist = ["c", "c", "a","b"]  mynewlist = list(set(mylist)) # mynewlist is:  ['a', 'b', 'c']

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

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

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

# this is the set of permissions before change;  original_permission_set = {"is_admin","can_post_entry", "can_edit_entry", "can_view_settings"}  # this is new set of permissions;  new_permission_set = {"can_edit_settings","is_member", "can_view_entry", "can_edit_entry"}  # now permissions to add will be:  new_permission_set.difference(original_permission_set)  # which will result:  {'can_edit_settings', 'can_view_entry', 'is_member'}  # As you can see can_edit_entry is in both sets; so we do notneed  # to worry about handling it  # now permissions to remove will be:  original_permission_set.difference(new_permission_set)  # which will result:  {'is_admin', 'can_view_settings', 'can_post_entry'}  # and basically it's also true; we switched admin to member, andadd  # more permission on settings; and removed the post_entrypermission

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

日历

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

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

import calendar  calendar.monthrange(2020, 12)  # will result:  (1, 31)  # BUT! you need to be careful here, why? Let's read thedocumentation:  help(calendar.monthrange)  # Help on function monthrange in module calendar:  # monthrange(year, month)  #     Return weekday (0-6~ Mon-Sun) and number of days (28-31) for  #    year, month.  # As you can see the first value returned in tuple is a weekday,  # not the number of the first day for a given month; let's try  # to get the same for 2021  calendar.monthrange(2021, 12)  (2, 31)  # So this basically means that the first day of December 2021 isWed  # and the last day of December 2021 is 31 (which is obvious,cause  # December always has 31 days)  # let's play with February  calendar.monthrange(2021, 2)  (0, 28)  calendar.monthrange(2022, 2)  (1, 28)  calendar.monthrange(2023, 2)  (2, 28)  calendar.monthrange(2024, 2)  (3, 29)  calendar.monthrange(2025, 2)  (5, 28)  # as you can see it handled nicely the leap year;

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

calendar.monthrange(2024, 2)  (3, 29)  # means that February 2024 starts on Thursday  # let's define simple helper:  weekdays = ["Monday", "Tuesday","Wednesday", "Thursday", "Friday","Saturday", "Sunday"]  # now we can do something like:  weekdays[3] # will result in:  'Thursday'  # now simple math to tell what day is 15th of February 2020:  offset = 3  # it's thefirst value from monthrange  for day in range(1, 29):      print(day,weekdays[(day + offset - 1) % 7])  1 Thursday  2 Friday  3 Saturday  4 Sunday  ...  18 Sunday  19 Monday  20 Tuesday  21 Wednesday  22 Thursday  23 Friday  24 Saturday  ... 28 Wednesday  29 Thursday  # which basically makes sense;

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

from datetime import datetime  mydate = datetime(2024, 2, 15)  datetime.weekday(mydate)  # will result:  3  # or:  datetime.strftime(mydate, "%A")  'Thursday'

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

# checking if year is leap:  calendar.isleap(2021)  #False  calendar.isleap(2024)  #True  # or checking how many days will be leap days for given yearspan:  calendar.leapdays(2021, 2026) # 1 calendar.leapdays(2020, 2026) # 2  # read the help here, as range is: [y1, y2), meaning that second  # year is not included;  calendar.leapdays(2020, 2024) # 1

枚举有第二个参数

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

mylist = ['a', 'b', 'd', 'c', 'g', 'e']  for i, item in enumerate(mylist):      print(i, item)  # Will give: 0 a  1 b  2 d  3 c  4 g  5 e  # but, you can add a start for enumeration:  for i, item in enumerate(mylist, 16):      print(i, item)  # and now you will get:  16 a  17 b  18 d  19 c  20 g  21 e

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

if-else 逻辑

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

OPEN = 1  IN_PROGRESS = 2  CLOSED = 3  def handle_open_status():      print('Handling openstatus')  def handle_in_progress_status():      print('Handling inprogress status')  def handle_closed_status():      print('Handling closedstatus')  def handle_status_change(status):      if status == OPEN:         handle_open_status()      elif status ==IN_PROGRESS:          handle_in_progress_status()      elif status == CLOSED:         handle_closed_status()  handle_status_change(1)  #Handling open status  handle_status_change(2)  #Handling in progress status  handle_status_change(3)  #Handling closed status

虽然这段代码看上去也没有那么糟,但是如果有 20 多个条件呢?

那么,究竟应该怎样处理呢?

from enum import IntEnum  class StatusE(IntEnum):      OPEN = 1      IN_PROGRESS = 2      CLOSED = 3  def handle_open_status():      print('Handling openstatus')  def handle_in_progress_status():      print('Handling inprogress status')  def handle_closed_status():      print('Handling closedstatus')  handlers = {      StatusE.OPEN.value:handle_open_status,     StatusE.IN_PROGRESS.value: handle_in_progress_status,      StatusE.CLOSED.value:handle_closed_status  }  def handle_status_change(status):      if status not inhandlers:           raiseException(f'No handler found for status: {status}')      handler =handlers[status]      handler()  handle_status_change(StatusE.OPEN.value)  # Handling open status  handle_status_change(StatusE.IN_PROGRESS.value)  # Handling in progress status  handle_status_change(StatusE.CLOSED.value)  # Handling closed status  handle_status_change(4)  #Will raise the exception

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

enum 模块

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

from enum import Enum, IntEnum, Flag, IntFlag  class MyEnum(Enum):      FIRST ="first"      SECOND ="second"      THIRD ="third"  class MyIntEnum(IntEnum):      ONE = 1      TWO = 2      THREE = 3  # Now we can do things like:  MyEnum.FIRST  #<MyEnum.FIRST: 'first'>  # it has value and name attributes, which are handy:  MyEnum.FIRST.value  #'first'  MyEnum.FIRST.name  #'FIRST'  # additionally we can do things like:  MyEnum('first')  #<MyEnum.FIRST: 'first'>, get enum by value  MyEnum['FIRST']  #<MyEnum.FIRST: 'first'>, get enum by name

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

MyEnum.FIRST == "first"  # False  # but  MyIntEnum.ONE == 1  # True  # to make first example to work:  MyEnum.FIRST.value == "first"  # True

在中等规模的代码库中,enum 模块在管理常量方面可以提供很大的帮助。

enum 的本地化可能有点棘手,但也可以实现,我用Django快速演示一下:  from enum import Enum  from djanGo.utils.translation import gettext_lazy as _  class MyEnum(Enum):      FIRST ="first"      SECOND ="second"      THIRD ="third"      @claSSMethod      def choices(cls):          return [              (cls.FIRST.value, _('first')),              (cls.SECOND.value, _('second')),              (cls.THIRD.value, _('third'))           ]  # And later in eg. model definiton:  some_field = models.CharField(max_length=10,choices=MyEnum.choices())

iPython

iPython 就是交互式 Python,它是一个交互式的命令行 shell,有点像 Python 解释器。

首先,你需要安装 iPython:

pip install ipython

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

# you should see something like this after you start:  Python 3.8.5 (default, Jul 28 2020, 12:59:40)  Type 'copyright', 'credits' or 'license' for more infORMation  IPython 7.18.1 -- An enhanced Interactive Python. Type '?' forhelp.  In [1]:

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

感谢各位的阅读,以上就是“有哪些Python小技巧”的内容了,经过本文的学习后,相信大家对有哪些Python小技巧这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 有哪些Python小技巧

本文链接: https://www.lsjlt.com/news/281061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 有哪些Python小技巧
    这篇文章主要讲解了“有哪些Python小技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python小技巧”吧!集合开发人员常常忘记 Python 也有集合数据类型,大家都喜欢使用列...
    99+
    2023-06-15
  • 写Python有哪些小技巧
    本篇内容介绍了“写Python有哪些小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 反转字符串虽然看似是很基础的操作,但是用cha...
    99+
    2023-06-16
  • 编写Python小技巧有哪些
    本篇内容主要讲解“编写Python小技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“编写Python小技巧有哪些”吧!1. List:all_equal功能实现:检验一个列表中的所有元素...
    99+
    2023-06-16
  • 有哪些Python绘图小技巧
    这篇文章主要介绍“有哪些Python绘图小技巧”,在日常操作中,相信很多人在有哪些Python绘图小技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Python绘图小技巧”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-01
  • mysql小技巧有哪些
    这篇文章主要介绍mysql小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1.  查看历史操作记录 1.1   linux操作系统查看历...
    99+
    2024-04-02
  • ES6小技巧有哪些
    小编给大家分享一下ES6小技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 强制要求参数ES6提供了默认参数值机制,...
    99+
    2024-04-02
  • JavaScript有哪些小技巧
    这篇文章主要为大家展示了“JavaScript有哪些小技巧”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript有哪些...
    99+
    2024-04-02
  • 有哪些Python高效代码小技巧
    本篇内容主要讲解“有哪些Python高效代码小技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些Python高效代码小技巧”吧!把不常用的类别整合成一个有时你会得到元素分布不均的栏,少有的...
    99+
    2023-06-16
  • Python技巧有哪些
    这篇文章主要讲解了“Python技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python技巧有哪些”吧!1. 列表理解列表理解可以代替丑陋的for循环来填充列表。列表理解的基本语...
    99+
    2023-06-15
  • Vue的小技巧有哪些
    这篇文章主要介绍“Vue的小技巧有哪些”,在日常操作中,相信很多人在Vue的小技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue的小技巧有哪些”的疑惑有所帮助!接...
    99+
    2024-04-02
  • PyCharm的小技巧有哪些
    PyCharm的小技巧有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PyCharm小技巧,帮助大家提升工作效率!# 0. PyCharm 常用快捷键# 1. 查看使用...
    99+
    2023-06-02
  • Python性能调优的小技巧有哪些
    这篇文章主要为大家展示了“Python性能调优的小技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python性能调优的小技巧有哪些”这篇文章吧。1 多多使用列表生成式替换下面代码:cu...
    99+
    2023-06-25
  • 加速Python编程的小技巧有哪些
    本篇内容主要讲解“加速Python编程的小技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“加速Python编程的小技巧有哪些”吧!1.负索引人们喜欢使用序列,因为当我们知道元素的顺序,我...
    99+
    2023-06-15
  • 加快Python编程的小技巧有哪些
    这篇文章主要介绍“加快Python编程的小技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“加快Python编程的小技巧有哪些”文章能帮助大家解决问题。1.负索引人们喜欢使用序列,因为当我们知...
    99+
    2023-06-27
  • Python的技巧有哪些
    本篇内容主要讲解“Python的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python的技巧有哪些”吧!1、对输入的字符串“消毒”对用户输入的内容“消毒”,这问题几乎适用于你编写的...
    99+
    2023-06-15
  • 有哪些SQL查询小技巧
    本篇内容介绍了“有哪些SQL查询小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、行列转...
    99+
    2024-04-02
  • PHP常用小技巧有哪些
    这篇文章主要为大家展示了“PHP常用小技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP常用小技巧有哪些”这篇文章吧。1、解决跨域问题public function&nbs...
    99+
    2023-06-20
  • Git维护小技巧有哪些
    这篇文章给大家分享的是有关Git维护小技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。对 Git 仓库的维护通常是为了减少仓库的大小。如果你从另外一个版本控制系统导入了一个仓库,你可能需要在导入后清除掉不...
    99+
    2023-06-27
  • JavaScript的小技巧有哪些呢
    这期内容当中小编将会给大家带来有关JavaScript的小技巧有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、过滤唯一值Set类型是在ES6中新增的,它类似于数...
    99+
    2024-04-02
  • 写JavaScript的小技巧有哪些
    本篇内容介绍了“写JavaScript的小技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. a...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作