提供服务好的网站建设,怎么添加网站后台,asp下载网站代码,个人作品集网站模板文章目录 前言一、鸭子类型二、猴子补丁关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言
Python 开发者可能… 文章目录 前言一、鸭子类型二、猴子补丁关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言
Python 开发者可能都听说过鸭子类型和猴子补丁这两个词即使没听过也大概率写过相关的代码只不过并不了解其背后的技术要点是这两个词而已。
我最近在面试候选人的时候也会问这两个概念很多人答的也并不是很好。但是当我向他们解释完之后普遍都会恍然大悟“哦是这个啊我用过”。
所以我决定来写一篇文章探讨一下这两个技术。 一、鸭子类型
引用维基百科中的一段解释 鸭子类型duck typing在程序设计中是动态类型的一种风格。在这种风格中一个对象有效的语义不是由继承自特定的类或实现特定的接口而是由当前方法和属性的集合决定。 更通俗一点的说 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子那么这只鸟就可以被称为鸭子。 也就是说在鸭子类型中关注点在于对象的行为能作什么而不是关注对象所属的类型。
我们看一个例子更形象地展示一下
\# 这是一个鸭子Duck类
class Duck:def eat(self):print(A duck is eating...)def walk(self):print(A duck is walking...)# 这是一个狗Dog类
class Dog:def eat(self):print(A dog is eating...)def walk(self):print(A dog is walking...)def animal(obj):obj.eat()obj.walk()if \_\_name\_\_ \_\_main\_\_:animal(Duck())animal(Dog())程序输出 A duck is eating… A duck is walking… A dog is eating… A dog is walking… Python 是一门动态语言没有严格的类型检查。只要 Duck 和 Dog 分别实现了 eat 和 walk 方法就可以直接调用。
再比如 list.extend() 方法除了 list 之外dict 和 tuple 也可以调用只要它是可迭代的就都可以调用。
看过上例之后应该对「对象的行为」和「对象所属的类型」有更深的体会了吧。
再扩展一点其实鸭子类型和接口挺像的只不过没有显式定义任何接口。
比如用 Go 语言来实现鸭子类型代码是这样的
package mainimport fmt// 定义接口包含 Eat 方法
type Duck interface {Eat()
}// 定义 Cat 结构体并实现 Eat 方法
type Cat struct{}func (c \*Cat) Eat() {fmt.Println(cat eat)
}// 定义 Dog 结构体并实现 Eat 方法
type Dog struct{}func (d \*Dog) Eat() {fmt.Println(dog eat)
}func main() {var c Duck Cat{}c.Eat()var d Duck Dog{}d.Eat()s : \[\]Duck{Cat{},Dog{},}for \_, n : range s {n.Eat()}
}通过显式定义一个 Duck 接口每个结构体实现接口中的方法来实现。
二、猴子补丁 猴子补丁Monkey Patch的名声不太好因为它会在运行时动态修改模块、类或函数通常是添加功能或修正缺陷。
猴子补丁在内存中发挥作用不会修改源码因此只对当前运行的程序实例有效。
但如果滥用的话会导致系统难以理解和维护。
主要有两个问题
补丁会破坏封装通常与目标紧密耦合因此很脆弱打了补丁的两个库可能相互牵绊因为第二个库可能会撤销第一个库的补丁
所以它被视为临时的变通方案不是集成代码的推荐方式。
按照惯例还是举个例子来说明
\# 定义一个Dog类
class Dog:def eat(self):print(A dog is eating ...)# 在类的外部给 Dog 类添加猴子补丁
def walk(self):print(A dog is walking ...)Dog.walk walk# 调用方式与类的内部定义的属性和方法一样
dog Dog()
dog.eat()
dog.walk()程序输出 A dog is eating … A dog is walking … 这里相当于在类的外部给 Dog 类增加了一个 walk 方法而调用方式与类的内部定义的属性和方法一样。
再举一个比较实用的例子比如我们常用的 json 标准库如果说想用性能更高的 ujson 代替的话那势必需要将每个文件的引入
import json
改成
import ujson as json
如果这样改起来成本就比较高了。这个时候就可以考虑使用猴子补丁只需要在程序入口加上
import json
import ujson def monkey\_patch\_json(): json.\_\_name\_\_ ujson json.dumps ujson.dumps json.loads ujson.loads monkey\_patch\_json()这样在以后调用 dumps 和 loads 方法的时候就是调用的 ujson 包还是很方便的。
但猴子补丁就是一把双刃剑问题也在上文中提到了看需谨慎使用吧。 关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料给那些想学习 Python 的小伙伴们一点帮助
微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 一、Python所有方向的学习路线
Python所有方向的技术点做的整理形成各个领域的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。
二、Python基础学习视频
② 路线对应学习视频
还有很多适合0基础入门的学习视频有了这些视频轻轻松松上手Python~在这里插入图片描述
③练习题
每节视频课后都有对应的练习题哦可以检验学习成果哈哈 因篇幅有限仅展示部分资料
三、精品Python学习书籍
当我学到一定基础有自己的理解能力的时候会去阅读一些前辈整理的书籍或者手写的笔记资料这些笔记详细记载了他们对一些技术点的理解这些理解是比较独到可以学到不一样的思路。
四、Python工具包项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了每个都有详细的安装教程保证你可以安装成功哦
②Python实战案例
光学理论是没用的要学会跟着一起敲代码动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。100实战案例源码等你来拿
③Python小游戏源码
如果觉得上面的实战案例有点枯燥可以试试自己用Python编写小游戏让你的学习过程中增添一点趣味
五、面试资料
我们学习Python必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有阿里大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。
六、Python兼职渠道
而且学会Python以后还可以在各大兼职平台接单赚钱各种兼职渠道兼职注意事项如何和客户沟通我都整理成文档了。 这份完整版的Python全套学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】