Python基础知识篇:观察者模式

A、工作背景:
之前从事的都是C#语言,也就是微软平台的C#.net或者是大家常说的asp.net,都是一个东西,基于.net framework 框架的语言。
个人感觉就是学的东西杂,单从技术方向来讲,从winform–>webform–>mvc/webapi–>net core mvc/api一路走来,前端js,Bootstrap和Juqery,Lay UI等各种UI,当然了还包括后台的服务端服务的编写ashx/asmx–>controller–>webapi,其他实现分布式引用的第三方工具,Rabbit MQ/Msmq,Redis缓存,数据库使用过Sql serverf/Mysql/Oracle,高并发,多线程,线程同步,异步,线程锁,数据库锁,复杂业务的存储过程,数据库定时作业,数据库索引设计,数据库优化,索引碎片这些也有相应的实践,设计模式:单利模式,简单工厂模式,工厂方法模式,抽象工厂模式,观察者模式,好吧,这里就不多废话了,有了c#的基础,入门Python领域能轻松些,过往的工作经历也算是打下了转Python的基础。这不,这两天搞Python 爬虫来进行抢火车票的小程序就用上了:网页发送请求和响应的业务分析,html结构,通过代理劫持js文件跟踪页面变量 ,Json数据结构的解析(我没记错的话应该是一个37个字段拼接成的字符串需要解析),总之,Python爬虫离不开前端和后端的基础知识。

B、Python的语言优点
1.Python语言简单,更优雅,直观上来看,省去了;和{},代码看上去更干净,易读,易理解
2.入手快,学习曲线低,相对与其他语言,无论是0基础还是有编程基础,都相对容易
3.解释性语言,不需要编译,而大多数语言都是编译型语言,Python省去了编译项目的耗时
4.丰富的第三方库 由于Python开源特性,第三方库特别多,例如:在web开发、爬虫、AI等

C、Python的缺点
1.解释性语言,由于是解释性语言,速度相较于c,c++相对慢一些,由于现在硬件配置都非常高,基本上没有影响,除非一些实时性比较强的项目,会有一点影响,可以嵌套c程序解决
2.强制缩进 对于新手来说不习惯,少缩进一个空格就会报错,特别是多个if嵌套还需要print的时候,整不好就bug了,习惯了会发现强制空格非常优雅

D、Python就业岗位
1.人工智能:Python作为人工智能的黄金语言,选择人工智能作为就业方向是理所当然的,而且就业前景好,薪资普遍较高
2.大数据:大数据时代,Python这门语言在大数据上比Java更加有效率,大数据虽然难学,但是Python可以更好地和大数据对接
3.网络爬虫工程师:个人还是喜欢这个岗位,不论工作中实现分布式爬虫,还是休息时间,自己写个小爬虫爬去网站数据都比较容易,然后做分析统计,这个就比较有趣,大数据时代,掌握实时,有效的数据更给力
4.Python全栈工程师:全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人
5.自动化运维:自动化处理大量的运维任务
6.自动化测试:编写为简单的实现脚本,运用在Selenium/lr中,实现自动化,得力于丰富的第三方库和自身语法的简洁性
7.Python游戏开发

E、基本环境搭建
大多数的开发工具都大同小异,自己用起来顺手就ok.
目前还没有用到虚拟环境,后续会切换到linux环境,也很想尝试Python三大神器之一的virtualenv:
1.Pycharm类似于微软的VS系列产品的风格,功能强大,安装第三方库和断点调试都很方便,查看第三方库的底层代码都很方便,常用的功能处
这里写图片描述
2.Sublime Text +cmd命令 进行项目运行,简洁,轻便,界面更优美
这里写图片描述
Python小程序:观察者模式的实现
主要是熟练Python的基本语法,自定义函数,基类定义,子类继承,面向对象的设计模式都是通用的,和其他语言的实现一样,只不过语法和写法有变化了,直接贴代码

# python实现观察者模式
#定义微信公众号接口
class WXPublisher(object):
    def __init__(self):
        pass
    def register(self):
        pass
    def unregister(self):
        pass
    def notifyAll(self):
        pass

#公众号实现类
class PublishSevice(WXPublisher):
    def __init__(self,servicename):
        self._listOfUsers = []
        #帖子文章
        self.postname = None
        #服务号名称
        self.servicenumber = servicename
    #添加订阅者信息
    def register(self,userObj):
        if userObj not in self._listOfUsers:
              self._listOfUsers.append(userObj)
    #用户取消关注,取消订阅者
    def unregister(self,userObj):
              self._listOfUsers.remove(userObj)
    #通知所有订阅者
    def notifyAll(self):
        for objects in self._listOfUsers:
            objects.notify(self.postname)
    #发布消息
    def writeNewPost(self,postname):
        print('微信服务号{}:{}'.format(self.servicenumber,postname))
        self.postname = postname
        self.notifyAll()


#定义订阅者接口
class Subscriber(object):
    def __init__(self):
        pass
    #通知接口
    def notify(self):
        pass
#订阅用户1
class User1(Subscriber):
    def __init__(self, username):
        self.username = username

    def notify(self,postname):
        print('微信用户:{},接受到了帖子:{}'.format(self.username,postname))

#订阅用户2
class User2(Subscriber):
    def __init__(self,username):
        self.username = username

    def notify(self,postname):
        print('微信用户:{},接受到了帖子:{}'.format(self.username,postname))

#订阅用户3
class User3(Subscriber):
    def __init__(self, username):
        self.username = username
    def notify(self,postname):
        print('微信用户:{},接受到了帖子:{}'.format(self.username,postname))

#订阅用户4
class User4(Subscriber):
    def __init__(self, username):
        self.username = username
    def notify(self,postname):
        print('微信号:{},接受到了帖子:{},并阅读了帖子'.format(self.username,postname))



#程序入口
if __name__ == "__main__":
    #微信服务号
    travelsevice = PublishSevice("旅游小知识")
    pythonsevice = PublishSevice("Python论坛")
    #用户对象
    user1 = User1('jack')
    user2 = User2('marin')
    user3 = User3('faker')
    user4 = User4('huni')
    #订阅旅游小知识公众号
    travelsevice.register(user1)
    travelsevice.register(user2)
    travelsevice.register(user3)
    travelsevice.register(user4)
    #订阅Python论坛公帐号
    pythonsevice.register(user1)
    pythonsevice.register(user2)
    pythonsevice.register(user3)
    pythonsevice.register(user4)
    #公众号发布文章通知所有订阅
    travelsevice.writeNewPost("发布了迪士尼乐园游玩项目介绍")
    #用户2取消订阅旅游知识号
    travelsevice.unregister(user2)
    #取消订阅的用户接收不到通知
    travelsevice.writeNewPost("发布了一篇Python技术帖子")

F、总结
做了四年的C#程序员,虽然称不上全栈,但至少所有技术都略懂一些,提及一方面的知识都能有自己的见解。但是为什么转Python方向呢,
1.Python大热,得力于语言的优势
2.对Python爬虫比较感兴趣,个人兴趣爱好所致,使用合理的爬取方式,爬取所有我们网页/客户端能看到的资源,待专研的框架:Scrapy,Crawley,Portia,Beautiful Soup,selenium,需要学习的东西真的很多,在爬虫的路上,边爬边学
3.以后可试水大数据和AI,AI也是比较有趣的方向,深度学习算法可识别12306验证码的95%的识别率,好像很6,以后有能力在研究:paddlepaddle

猜你喜欢

转载自blog.csdn.net/sunbo_csdn/article/details/81464086