推荐 8 个炫酷的 Python 装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐 8 个炫酷的 Python 装饰器相关的知识,希望对你有一定的参考价值。

1、 lru_cache
这个装饰器来自functools模块。该模块包含在标准库中,非常易于使用。它还包含比这个装饰器更酷的功能,但这个装饰器是非常受人喜欢的。此装饰器可用于使用缓存加速函数的连续运行。当然,这应该在使用时记住一些关于缓存的注意事项,但在通用使用情况下,大多数时候这个装饰器都是值得使用的。
2、JIT
JIT是即时编译的缩写。通常每当我们在Python中运行一些代码时,发生的第一件事就是编译。这种编译会产生一些开销,因为类型被分配了内存,并存储为未分配但已命名的别名,使用即时编译,我们在执行时才进行编译。
在很多方面,我们可以将其视为类似于并行计算的东西,其中Python解释器同时处理两件事以节省时间。Numba JTI编译器因将这一概念提到Python中而闻名,可以非常轻松地调用此装饰器,并立即提高代码的性能。Numba包提供了JIT装饰器,它使运行更密集的软件变得更加容易,而不必进入C。
3、do_twice
do_twice装饰器的功能与它的名字差不多。此装饰器可用于通过一次调用运行两次函数,对调试特别有用。它可以用于测量两个不同迭代的功能。
4、count_calls
count_calls装饰器可用于提供有关函数在软件中使用多少次的信息。与do_twice一样,对调试也特别有用。
5、dataclass
为了节省编写类的时间,推荐使用dataclass装饰器。这个装饰器可用于快速编写类中常见的标准方法,这些方法通常会在我们编写的类中找到。
6、singleton
singleton是一个单例装饰器。通常,单例装饰器是由用户自己编写的,实际上并不是导入的。
7、use_unit
在科学计算中经常派上用场的一种装饰器是use_unit装饰器。此装饰器可用于更改返回结果的表示单位。这对于那些不想在数据中添加度量单位但仍希望人们知道这些单位是什么的人很有用。这个装饰器可不是在任何模块中真正有用,但它是非常常见的,对科学应用程序非常有用。
参考技术A

文章:Python数据分析实例

00

前言

Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用。

许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活。如果使用得当,其中一些功能可以有效缩短编写程序所需的时间。

实现这些目标的一个很好的例子是 Python 的装饰器。

00 装饰器

装饰器(decorators)是一个可以用于改变一个 Python 函数对象行为的函数。它们可以应用于类和函数,可以做很多非常有趣的事情!

装饰器可以用来缩短代码、加速代码并彻底改变代码在 Python 中的行为方式。

不用说,这当然可以派上用场!今天我想炫耀一些我认为值得一试的装饰器。

有很多装饰器,但我选择了一些我认为具有最酷功能的装饰器。

01 @lru_cache

此列表中的第一个装饰器来自 functools 模块。

该模块包含在标准库中,非常易于使用。它还包含比这个装饰器更酷的功能,但这个装饰器肯定是我最喜欢的。

此装饰器可用于使用缓存加速函数的连续运行。当然,这应该在使用时记住一些关于缓存的注意事项,但在通用使用情况下,大多数时候这个装饰器是值得使用的。

能够用一个简单的装饰器来加速代码是非常棒的。

可以从这样的装饰器中受益的函数的一个很好的例子是递归函数,例如计算阶乘的函数:

递归在计算时间上可能非常困难,但添加此装饰器有助于显着加快此函数的连续运行速度。

现在每当我们运行这个函数时,前几个阶乘计算将被保存到缓存中。

因此,下次我们调用该函数时,我们只需要计算我们之前使用的阶乘之后的阶乘。

当然,并不是所有的阶乘计算都会被保存,但是很容易理解为什么这个装饰器的一个很好的应用程序来加速一些自然很慢的代码。

02 @jit

JIT 是即时编译(Just In Time)的缩写。通常每当我们在 Python 中运行一些代码时,发生的第一件事就是编译。

这种编译会产生一些开销,因为类型被分配了内存,并存储为未分配但已命名的别名。使用即时编译,我们在执行时才进行编译。

在很多方面,我们可以将其视为类似于并行计算的东西,其中 Python 解释器同时处理两件事以节省一些时间。

Numba JIT 编译器因将这一概念提供到 Python 中而闻名。与@lru_cache 类似,可以非常轻松地调用此装饰器,并立即提高代码的性能。Numba 包提供了 jit 装饰器,它使运行更密集的软件变得更加容易,而不必进入 C。

以下案例使用@jit 装饰器加速蒙特卡洛方法计算。

03 @do_twice

do_twice 装饰器的功能与它的名字差不多。此装饰器可用于通过一次调用运行两次函数。这当然有一些用途,我发现它对调试特别有用。

它可以用于测量两个不同迭代的性能。以 Functools 为例,我们可以让一个函数运行两次,以检查是否有改进。该函数由 Python 中的装饰器模块提供,该模块位于标准库中。

04 @count_calls

count_calls 装饰器可用于提供有关函数在软件中使用多少次的信息。

像 do_twice 一样,这当然可以在调试时派上用场。

当添加到给定的函数时,我们将收到一个输出,告诉我们该函数每次运行时已经运行了多少次。这个装饰器也在标准库的装饰器模块中。

05 @dataclass

为了节省编写类的时间,我一直使用的最好的装饰器之一是@dataclass 装饰器。

这个装饰器可用于快速编写类中常见的标准方法,这些方法通常会在我们编写的类中找到。

这个装饰器来自 dataclass 模块。这个模块也在标准库中,所以不需要 PIP 来尝试这个例子!

这段代码将自动创建一个初始化函数 init,其中包含填充类中数据所需的位置参数。

它们也将自动提供给 self,因此无需编写一个很长的函数来将一些数据参数放入类中。

06 @singleton

为了理解单例装饰器的用途,我们首先需要了解单例(singleton)是什么。从某种意义上说,单例是全局变量类型的一个版本。

这意味着类型被定义为只存在一次。尽管这些在 C++ 等语言中很常见,但在 Python 中却很少见到。使用单例,我们可以创建一个只使用一次的类并改变类,而不是通过初始化来构造新的类型。

通常,单例装饰器是由用户自己编写的,实际上并不是导入的。

这是因为单例仍然是对我们单例装饰器中提供的模板的引用。我们可以命名一个单例函数并编写一个包装器,以便在我们的类上使用这个装饰器:

另一种方法是使用元类!

07 @use_unit

在科学计算中经常派上用场的一种装饰器是 @use_unit 装饰器。

此装饰器可用于更改返回结果的表示单位。这对于那些不想在数据中添加度量单位但仍希望人们知道这些单位是什么的人很有用。

这个装饰器也不是在任何模块中真正可用,但它是非常常见的,对科学应用程序非常有用。

08 @singledispatch

Functools 凭借非常有用的@singledispatch 装饰器再次在此列表中脱颖而出。

单调度是一种编程技术,在许多编程语言中都很常见,因为它是一种非常棒的编程方式。虽然我更喜欢多调度,但我认为单调度可以在很多方面扮演相同的角色。

这个装饰器使得在 Python 中使用多类型数据变得更加容易, 尤其当我们希望通过同一方法传递多种类型数据时,情况更是如此。

第三方开源库-->推荐 21 个炫酷的开源库值得珍藏

不断学习,做更好的自己!💪

视频号CSDN简书
欢迎打开微信,关注我的视频号:KevinDev点我点我

前言

当看到一个炫酷的效果的时候,记得收藏起来,记录到自己云笔记或者收藏夹里,看得多了,印象就比较深刻,当遇到类似效果的时候,到自己记录收藏的地方找就是了。本文推荐21个收藏炫酷效果的开源库。

1、DiscreteScrollView

Github : https://github.com/yarolegovich/DiscreteScrollView

简介DiscreteScrollView 是基于 RecyclerView 实现的一个横向滑动列表,当前 Item 显示在屏幕中央并且可以左右滑动,有点像 ViewPager,但是可以快速滑动。提供了简单的 API 来实现炫酷的动画效果。

效果图

2、MaterialViewPager

Github: https://github.com/pinguo-zhouwei/MaterialViewPager

简介 :和名字一样,Material Design 效果的 ViewPager , 效果很 nice ,请看图。

效果图(有多个模式)

  • Titlebar Logo

  • Fading Logo

  • Hide Logo and Toolbar

  • Sticky Toolbar

  • Transparent Toolbar

  • Standard

3、BoomMenu

Github : https://github.com/pinguo-zhouwei/BoomMenu

简介 :传统的菜单是不是看得有些厌倦了,爆炸效果的菜单了解一下?功能强大、效果炫酷,有很多种模式。

效果图

4、LayoutManagerGroup

Github :https://github.com/DingMouRen/LayoutManagerGroup

简介 :自定义 RecyclerViewLayoutManager 实现几种炫酷的效果。

效果图

  • EchelonLayoutManager

  • SkidRightLayoutManager

  • SlideLayoutManager

5、Android-SpinKit

Github :https://github.com/ybq/Android-SpinKit

简介 :Android 自定义 View 的方式实现的各种炫酷的动画,特别精致和优美,以前专门写文章介绍过。

效果图

6、Matisse

Github :https://github.com/zhihu/Matisse

简介Matisse 是知乎开源的一个本地选择照片和视频的库,UI 设计得非常精美。有如特性:

  • 可以在 Fragment/Activity 中使用
  • 选择照片的格式包括:PNGJPEGGIF 视频格式包括:MPEG, MP4
  • 支持不同的主题并且可以自定义主题
  • 支持不同的图片加载方式(PicassoGlide等)
  • 自定义过滤规则

效果图

  • Zhihu Style

  • Dracula Style

  • Preview

7、CosmoCalendar

Github :https://github.com/ApplikeySolutions/CosmoCalendar

简介 : 一个高度自定义的日历库,UI 精美,支持多种模式。

效果图

  • 单个日期选择

  • 多个日期选择

  • 选择一个范围日期

  • 自定义

8、CardStackView

Github : https://github.com/loopeer/CardStackView

简介 : 三种炫酷的列表卡片滑动动画,分别为:alldown, updown, updownstack

效果图

9、CalendarExaple

Github :https://github.com/codbking/CalendarExaple

简介 : 这是一个高仿钉钉和小米的日历控件,支持快速滑动,界面缓存。想要定制化 UI,使用起来非常简单,就像使用 ListView 一样。
特点:

  • 可以自定义日历控件UI
  • 支持快速滑动
  • 支持农历和阳历
  • 界面UI缓存和日历数据缓存
  • 扩展 view 支持 listView 的滑动

效果图

10、MZBannerView

Github :https://github.com/pinguo-zhouwei/MZBannerView

简介 : 仿魅族 BannerView ,图片轮播控件,支持多种模式切换:普通 ViewPager 使用,普通 Banner 使用,仿魅族 Banner 使用。

效果图

11、LiquidSwipe

Github :https://github.com/Chrisvin/LiquidSwipe

简介 : 这是一个很棒的 ViewPager 库,它在浏览 ViewPager 的不同页面时,显示波浪的滑动动画,效果非常炫酷。该库的 USP 是触摸交互的。这意味着在视图中显示类似液体的显示过渡时,应考虑触摸事件。

效果图

12、Flourish

Github :https://github.com/skydoves/Flourish

简介Flourish提供了一个炫酷的方式来显示或者隐藏一个布局,实现方式也很简单,就是对 View 或者布局进行了包装,通过构建者模式来提供 api 给上层调用。就像使用 dialog 一样,调用 showdissmiss方法来显示和隐藏。此外,通过这些类,我们还可以自定义动画(正常,加速,反弹),或为布局方向设置我们自己的起点(左上,右下等)。

效果图

13、AestheticDialogs

Github :https://github.com/gabriel-TheCode/AestheticDialogs

简介 :这是一个美观而时尚的AlterDialog库,目前可支持六种不同的对话框,如:

  • Flash DialogConnectify
  • DialogToaster
  • DialogEmotion
  • DialogDrake
  • DialogEmoji Dialog

并且啊,还提供了暗黑模式的适配。

效果图

15、EasyReveal

Github :https://github.com/Chrisvin/EasyReveal

简介 :这是一个提供 reveal 动画效果的库,它的厉害之处在于可以提供不同尺寸、不同形状的 reveal 动画,并且还可以在定义它在屏幕任意位置开始和结束动画。

效果图

16、Android ColorX

Github :https://github.com/JorgeCastilloPrz/AndroidColorX

简介Android ColorXKotlin 扩展函数的形式提供了一些重要的获取颜色的方法。
通过提供不同颜色格式(RGB,HSV,CYMK等)的转换功能,它使开发变得更加轻松。该库的 USP 具有以下功能:

  • 颜色的不同阴影和色调。
  • 较深和较浅的阴影。
  • 颜色的补码

效果图

17、AnimatedBottomBar

Github :https://github.com/Droppers/AnimatedBottomBar

简介 :这是一个带动画的底部导航栏库。它使你可以以编程方式以及通过 XML 添加和删除选项卡。此外,我们可以轻松地从 BottomBar 拦截选项卡。限制访问应用程序导航中的高级区域时,“拦截”标签非常有用。流畅的动画提供了许多自定义选项,从动画插值器到设置波纹效果。

效果图

18、RateBottomSheet

Github :https://github.com/lopspower/RateBottomSheet

简介 :有时候,为了推广我们的应用,我们需要让用户跳转到应用商店为我们的 APP 打分,传统的对话框用户体验很不好,而本库则是用 BottomSheet 来进行提示,它位于底部缩略区域,用户体验很好。

效果图

19、TransformationLayout

Github :https://github.com/skydoves/TransformationLayout

简介 :这是一个用于 Activity 或者 Fragment 以及 View 切换的过渡动画库,效果非常炫,它使用Material Design的运动系统过渡模式来创建变形动画。该库提供了用于绑定目标视图,设置淡入淡出和路径运动方向以及许多其他自定义选项的属性。

效果图

20、Donut

Github :https://github.com/futuredapp/donut

简介 :这个一个可以展示多个数据集的圆弧形控件,具有精细的颗粒控制、间隙功能、动画选项以及按比例缩放其值的功能。可以用于项目中的一些数据统计。

效果图

21、CurveGraphView

Github :https://github.com/swapnil1104/CurveGraphView

简介CurveGraphView 是一个带有炫酷动画统计图表库,除了性能出色并具有许多样式选项之外,该库还支持单个平面内的多个线图。

多个折线图对于比较不同股票,共同基金,加密货币等的价格非常有用。

效果图

以上是关于推荐 8 个炫酷的 Python 装饰器的主要内容,如果未能解决你的问题,请参考以下文章

推荐 8 个炫酷的数据可视化大屏项目!

「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了

第三方开源库-->推荐 21 个炫酷的开源库值得珍藏

45个炫酷的jquery图片滚动插件

女朋友不开心,我拿她照片用python做了个炫酷的动态二维码,零花钱直接涨了好几倍!

女朋友不开心,我拿她照片用python做了个炫酷的动态二维码,零花钱直接涨了好几倍!