推荐 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
简介 :自定义 RecyclerView
的 LayoutManager
实现几种炫酷的效果。
效果图:
-
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
中使用 - 选择照片的格式包括:
PNG
、JPEG
、GIF
视频格式包括:MPEG
,MP4
- 支持不同的主题并且可以自定义主题
- 支持不同的图片加载方式(
Picasso
、Glide
等) - 自定义过滤规则
效果图:
-
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
一样,调用 show
和 dissmiss
方法来显示和隐藏。此外,通过这些类,我们还可以自定义动画(正常,加速,反弹),或为布局方向设置我们自己的起点(左上,右下等)。
效果图:
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 ColorX
以 Kotlin
扩展函数的形式提供了一些重要的获取颜色的方法。
通过提供不同颜色格式(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 装饰器的主要内容,如果未能解决你的问题,请参考以下文章