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