当前位置: 首页 > 后端技术 > Python

真的有必要学习源码吗?

时间:2023-03-25 23:46:23 Python

如果你只是想做一个初级工程师,完全没有必要研究任何框架或语言本身的源代码。但是如果你想在IT领域取得一定的成就,那么源码学习是你必经之路。我见过很多初级工程师,开发出来的程序逻辑上没问题,但是性能低下。程序上线时承受着巨大的压力,甚至导致性能故障,严重影响个人性能。归根结底,还是受制于底层原理。不管你学什么技术,光是看一眼是绝对不够的。今天,我就通过一道实战题告诉大家看源码的好处。想必大家在写程序的时候,肯定会报很多错误。有的错误是逻辑问题,有的是参数传递错误。还有一个就是我的程序可以运行,但是不知道为什么可以运行。诸如此类的问题,其实可以通过查看框架的源代码或者语言本身来解释。如果你用过scrapy_redis,都知道我要完成一个分布式爬虫,所以必须在配置文件中设置Redis连接。有两种设置方式,如下代码所示REDIS_URL="redis://127.0.0.1:6379"REDIS_HOST='127.0.0.1'REDIS_PORT=6379但是有没有人想过,如果不设置,它会起作用。抱着试一试的态度,试一试。我在跑爬虫的时候,连对应的键值都保存了。不信的可以自己试试。这让我很困惑,所以我决定查看scrapy_redis的源代码一探究竟。可以看出scrapy_redis的源码不算多,查起来也比较方便。你大概可以从connection.py连接到Redis的名称猜到。connection.py文件,通过看注释,大概能明白这个函数的作用。使用get_client方法返回带有默认参数的Redis客户端。defget_redis_from_settings(settings):"""从给定的Scrapy设置对象返回一个redis客户端实例。此函数使用``get_client``实例化客户端并使用``defaults.REDIS_PARAMS``全局作为参数的默认值.你可以使用``REDIS_PARAMS``设置来覆盖它们。接下来查看get_client方法,这个方法进行判断,判断你通过那种方式传递了Redis配置。有一个defaults.REDIS_CLS,这是我们的关键解谜defget_redis(**kwargs):"""返回一个redis客户端实例。参数----------redis_cls:类,可选默认为``redis.StrictRedis``。url:str,optional如果给定,``redis_cls.from_url``用于实例化类。**kwargs传递给``redis_cls``类的额外参数。返回------服务器Redis客户端实例。"""redis_cls=kwargs.pop('redis_cls',defaults.REDIS_CLS)url=kwargs.pop('url',None)ifurl:returnredis_cls.from_url(url,**kwargs)else:returnredis_cls(**kwargs)你可以通过查看defaults.py文件找到REDIS_CLS。REDIS_CLS=redis.StrictRedis去查看StrictRedis类。StrictRedis=RedisRedis类中的__init__方法,可以看到,实际上使用的是本地地址和端口,所以如果不写,scrapy_redis会默认连接本地Redis。至此谜团已经解开。def__init__(self,host='localhost',port=6379,db=0,password=None,socket_timeout=None,socket_connect_timeout=None,socket_keepalive=None,socket_keepalive_options=None,connection_pool=None,unix_socket_path=None,encoding='utf-8',encoding_errors='strict',charset=None,errors=None,decode_responses=False,retry_on_timeout=False,ssl=False,ssl_keyfile=None,ssl_certfile=None,ssl_cert_reqs='required',ssl_ca_certs=None,主机名sl_check_=False,max_connections=None,single_connection_client=False,health_check_interval=0,client_name=None,username=None):相信大家都能看懂,源码可以帮助我们解决开发或者学习中的一些问题。那么大家肯定还有疑问,我真的需要花很多时间去学习源码吗?还是真的有必要花很多时间学习源码?我给大家总结了几个原因,欢迎大家补充。首先,编程是一门理工科的学科。让我们看看一些优秀框架的源代码,研究一些底层原理,可以帮助我们更好地理解。闭门造车是造不出好车的。同样,仅仅每天呆在CURD中并不能提高你的编程能力。顶多你的CURD会越来越熟练。第二点我觉得大部分大公司,现在面试的时候越来越多的会问底层,问源码。比如阿里面试会问很多关于源码的实现机制,还有你做过的项目。所以有时候很多人会为了面试学习源码,但是这种以面试为主导的学习往往并没有取得很好的效果,基本面试完就扔到一边去了。学习源码我们能得到什么?既然我们花了那么多时间学习源码,去研究源码?我们的收入有多少,又能拿回多少?你可以先给出肯定的回答,当然会有丰厚的回报。前面说了,学习开源框架的源码,可以帮助我们解决项目中遇到的bug,扩展我们的项目需求。我们项目的模块更容易扩展;通过学习源代码,我们可以更高效地编码。为什么?如果我们熟悉了一个开源项目的源代码,那么我们就可以很容易的将这个项目的源代码应用到自己的项目中,不是吗?总之,学习源码好处多多,也是成为高手的必由之路。只有学习和借鉴别人的优秀作品,自己才能创作出更好的作品。最后一句话送给大家,知道的越多,不知道的就越多。