一个案例搞懂python爬虫抓取信息大神偏爱用函数(文末附赠教程)
在学习python函数之前,我们写python代码都是一行一行不停的往下累积。例如我们写一个爬取图片的python爬虫。
这种编程方式叫做面向过程。是一种以过程为中心的编程思想。面向过程是一种最实际的思考方式。比如拿学生起床这件事说明面向过程,粗略的将过程拟为:
- 买菜
- 洗菜
- 做饭
- 吃饭
而这四步就是一步步完成的,它的顺序很重要,你只需要一步步实现就行了。
对比到上面的代码,它的过程是:
下载页面html源码
提取页面中的图片url
循环下载和保存图片
这个过程是按照顺序,不能改变。
面向过程方式的优点是,直观,快速,最贴近实际流程。但是它的缺点也很明显。当实际业务流程发生了改变,那么我们的程序也相应需要改变,而这个改变可能是推翻前面所有的重写。另外在实际业务中,如果有某步操作需要重复进行,那么我们需要重复写多次。例如下面的案例:
总结:面向过程的编程方式的缺点:1.不便于维护修改升级 2.代码有大量冗余
为了解决这个问题,计算机科学家发明了另外一种编程方式,那就是函数编程,例如下面的案例:
在python中一个标准函数由四个部分组成
4.返回语句
返回语句的作用就是将函数处理完的结果返回给它的调用者。
由关键字return 和值组成 多个值可以用逗号隔开
注意:python中如果函数没有返回语句,会默认返回None
ok,我们学会了怎么定义一个函数,那么我们怎么去使用它呢?在这之前我们必须了解,解释器是怎么处理
定义函数这个事情的。
这个过程其实跟定义一个变量一样的,所以函数名的命名方式和变量一样。所以想要使用一个函数首先需要定义,
要让解释器先把函数加载进内存然后才能调用。
调用函数非常简单,只需要函数名后加个括号,传入参数即可。
调用函数可以在程序的任何地方,只要内存中已经定义好了这个函数。
到这里,我们学会了如何定义和调用函数,我们其实已经具备了编写简单程序的能力了。
我们来看一个案例:编写一个函数,实现解开任意一元二次方程,
一元二次方程形式:ax2+bx+c=0(a≠0,且a,b,c是常数)
然后我们调用这个函数
接下来我们根据这个函数我们来分析一下函数的参数。
形参,实参,位置参数
定义函数的时候,写的参数,a,b,c叫做形式参数,简称形参。在函数没被调用的时候,它没有任何意义
在调用时,必须传入参数,所以也叫必须参数。
调用函数的时候,写在括号中的1,2,1叫做实际参数,简称实参。当我们把实参直接写在括号中的时候
它会按照位置,与实参一一对应,所以也叫位置参数。那么这是形参中的 a, b, c分别就指向了1,2,1
缺一不可,缺了会报错,例如:
多了也会报错:
再次,强调一遍,这种按位置传参的方式,实参与形参按位置一一对应,如果传参顺序不一样,结果也是
不一样的。
有时候我们也看到这种传参写法:
这种方式是以键值对的方式传参,所以也叫作关键字参数,因为显式的指定了形参和实参的对应关系,所以
它的顺序无所谓。但是当关键字参数,和位置参数一起使用的时候,关键字参数需要写在后面,这是语法。
并且也要保证,不能一个形参传递多个实参,例如下面这种情况
我们改变一下需求,我们需要计算的方程,大部分情况都是ax2+bx+3=0,按照我们之前的函数,我需要每次都要
传入3这个实参,但是大家都知道程序员很懒的,所以就想办法啊,能不能实现不传入实参,让形参c默认等于3,
传入实参的时候又能接收。这样就出现了默认参数的情况,我们修改函数如下:
注意:定义函数式,默认参数一定要写在必须参数的后面,这个是语法
同学们高潮来了哦,提高来了哦,需要知道基本的数据类型。人类的欲望,客户的要求是无止境的,
变态的要求又来了,要求写一个函数,当传入2个数的时候就求和,传入3个参数就计算一元二次方程。
也就是这个函数接收参数的个数是不确定的,是动态的。
程序员就是 折腾的命。任务也要完成啊,所以就又出现了动态参数,函数如下:
调用结果:
在定义函数的时候,实参写成*args(星号是关键字,args是变量名,但是一般都写args,是规范),那么
我们在调用函数时,所有传入的多余的位置参数都会被args接收生成一个元组。注意多余这两个字。
动态参数可以和其他类型的形参一起定义,但是要写在默认参数的后面。
说道这里,动脑筋的同学就又要问了,那如果传入多余的关键字参数怎么处理呢?所以就出现了
**kwargs(**是关键字,kwargs是变量名,一般都这么写),调用函数时,所有传入的多余的关键字
参数都会被kwargs接收,生成一个字典。
python中的函数就给大家介绍完了。
最后,想学习Python的小伙伴们!
请关注+私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!
pytyhon学习资料
python学习资料