黑马python课程表黑马python600集笔记黑马python爬虫教程
下载地址 https://share.weiyun.com/dHvWwF1o
资料目录 黑马程序员python入门教程19天(美女讲师版) 包含:视频课程-python从0开始学编程(day1-day19) 课件+代码资料-python从0开始学编程(day1-day19) 黑马python基础班代码和课件资料 黑马python就业班代码和课件资料 黑马python基础班视频课程 包含:1-1 Linux基础(119个视频) 1-2 python基础(234个视频) 1-3 面向对象(91个视频) 1-4 项目飞机大战(42个视频) 黑马python就业班视频课程 包含:01 网络编程 02 多任务 03 web服务器v3.1 04 Python高级语法v3.1 05 MySQL数据库v3.1 06 mini-web框架v3.1 07 HTML和CSS 08 首页布局案例和移动布局 09 JavaScriptv 10 jQuery和js库 11 Django框架 12 git版本管理 13 redis数据库 14 天天生鲜Django项目 15 flask框架 16 微信公众号 17 爱家租房项目 18 通用爬虫模块使用 19 MongoDB数据库 20 爬虫scrapy框架及案例 21 数据分析 22 机器学习 23 深度学习 24 数据结构和算法 25 Python网络爬虫 26 机器学习入门篇 27 机器学习入门篇2 28 机器学习提升篇 29 数据挖掘篇 30 深度学习必备原理与实战 31 深度学习必备原理与实战2 32 深度学习必备原理与实战3 33 深度学习必备原理与实战4 34 深度学习项目实战 35 深度学习项目实战2 36 深度学习项目实战3 举例 多态 到网上搜索“多态”,仁者见仁智者见智。Python中关于多态的基本体现,可以通过下面的方式来理解。 >>> "This is a book".count("s") 2 >>> [1,2,4,3,5,3].count(3) 2 count()函数的作用是数一数某个元素在对象中出现的次数。从例子中可以看出,我们并没有限定count的参数所引入的值应该是什么类型的。类似的例子还有: >>> f = lambda x, y: x + y 还记得这个lambda函数吗? >>> f(2, 3) 5 >>> f("qiw", "sir") 'qiwsir' >>> f(["python", "java"], ["c++", "lisp"]) ['python', 'java', 'c++', 'lisp'] 在这个lambda函数中,我们没有限制应该传入什么类型的对象(或者说数据、值),也一定不能限制,因为如果限制了,就不是pythonic了。也就是说,允许给参数传任意类型的数据,并返回相应的结果,至于是否报错,则取决于“+”的能力范围。这就是“多态”的表现。 “多态”是否能正确表达,不是通过限制传入的对象类型实现,而是这样处理: >>> f("qiw", 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <lambda> TypeError: cannot concatenate 'str' and 'int' objects 这个例子中,把判断两个对象是否能够相加的任务交给了“+”,不是放在入口处判断类型是否为字符串或者数字。 申明,本书由于无意对概念进行讨论,所以不进行这方面的深入探索,仅仅是告诉各位读者相关信息。并且,既然大多数程序员都在讨论多态,那么我们就按照大多数人说的去介绍。 “多态”(Polymorphism),维基百科中对此有详细解释说明。 多型(英语:Polymorphism),是指面向对象程序执行时,相同的信息可能会送给多个不同的类别对象,系统可依据对象所属类别,引发对应类别的方法而有不同的行为。简单来说,所谓多型意指相同的信息给予不同的对象会引发不同的动作。 简化的说法就是“有多种形式”,就算不知道变量(参数)所引用的对象类型,也一样能进行操作,来者不拒,比如上面显示的例子。在Python中,更为pythonic的做法是根本就不进行类型检验。 例如著名的repr()函数,它能够针对输入的任何对象返回一个字符串,这就是多态的代表之一。 >>> repr([1, 2, 3]) '[1, 2, 3]' >>> repr(1) '1' >>> repr({"lang": "python"}) "{'lang': 'python'}" 使用它写一个小函数,还是作为多态举例。 >>> def length(x): ... print "The length of", repr(x), "is", len(x) ... >>> length("how are you") The length of 'how are you' is 11 >>> length([1, 2, 3]) The length of [1, 2, 3] is 3 >>> length({"lang":"python","book":"itdiffer.com"}) The length of {'lang': 'python', 'book': 'itdiffer.com'} is 2 不过,多态也不是万能的,如果这样做: >>> length(7) The length of 7 is Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in length TypeError: object of type 'int' has no len() 报错了。看错误提示,明确告诉了我们“object of type'int'has no len()”,也就是说,函数length()中的len()会对传入的对象进行检验,如果不符合要求,就会报错,使用者可以根据报错信息对传入的对象类型进行调整。 在诸多介绍多态的文章中都会有关于“猫和狗”的例子。这里也将代码贴出来,读者去体会所谓多态体现。其实,如果你进入了Python的语境,有时不经意间就在应用多态特性。 #!/usr/bin/env python # coding=utf-8 ''' the code is from: http://zetcode.com/lang/python/oop/ ''' __metaclass__ = type class Animal: def __init__(self, name = ""): self.name = name def talk(self): pass class Cat(Animal): def talk(self): print "Meow!" class Dog(Animal): def talk(self): print "Woof!" a = Animal() a.talk() c = Cat("Missy") c.talk() d = Dog("Rocky") d.talk() 保存后运行之: $ python 21101.py Meow! Woof! 代码中有Cat和Dog两个类,都继承了类Animal,它们都有talk()方法,输入不同的动物名称,会得出相应的结果。 关于多态,有一个被称作“鸭子类型”(duck typeing)的东西,其含义在维基百科中被表述为: 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 最后要提示读者,类型检查是毁掉多态的利器,比如type、isinstance以及isubclass函数,所以,一定要慎用这些类型检查函数。
|