函数第一部分:经典的永远是简单的-Python基础前传(10)
(一)前言
对于零基础学习Python或者转行做数据分析的朋友,跟jacky交流最多的问题就是Python网络爬虫学习问题;比如说要爬取美团,或者说爬取携程等等。在爬取的过程中,这些朋友总是会遇到这样或者那样的问题,我也看到了很多规范和不规范的代码,很多朋友都是模仿视频教学中的代码遇到了问题,之后来跟jacky探讨得;
说说jacky的立场:对于零基础学习Python的朋友,jacky是反对在基础不牢的时候,学习爬虫的。
因为爬虫入门容易,但能做到应用还是比较复杂的,这需要我们综合能力是很高的,如果不是计算机专业的同学,我们还是要把基础打牢,再去学习爬虫;
jacky要用十分钟教你们一个爬虫的实操也很简单,但是作为学习的我们不能自欺欺人,有些网站可以爬取,并不是因为你会了爬虫,而是这个网页根本就没有爬取的意义;
我们往往是由于一些基础性的错误导致爬取数据不能成功,比如说虽然有BeautifulSoup这个强大的库,但正则我们还是要会用的,看到太多朋友“流水账的代码”(面向过程编程),朋友们总是有些网络数据可以爬取,那稍微复杂一点的代码就爬取不了,这一切的原因都是基础不牢,强行练习爬虫,导致“走火入魔”。
做任何事,最重要的都是基础,学习Python,学习数据分析也一样。在Python中,作为Python学习中的重中之重,函数、对象和模块是一定要熟记并且熟练应用的,本次分享,jacky将给大家Python函数的第一部分:经典的永远是简单的。
(二)为什么Python中要有函数
2.1 函数存在的用意
-
如果Python中不创造出函数,那Python只能是面向过编程,代码中出现重复功能我们只能再次写一遍;
-
如果有了函数,Python就可以面向函数编程,我们在函数里写相应的功能,在代码中有同样功能需求时,我们就可以直接调用函数,免去了重复劳动;
2.2 函数存在的本质
-
函数存在的本质就是实现相应功能,封装在函数中
2.3 面向过程、面向函数、面向对象的简单解释
-
面向对象和面向过程的简单解释:
-
面向过程:和你谈业务。把所有的事情都谈妥了,开始做项目。一整套项目做下来了,有需求要变,还得整个改变。
-
面向函数:一整套项目,分成了不同独立的功能组,有需求要改变,只改变相应的功能组,不用改变整个业务。
-
面向对象:边做业务,边谈需求,这样就能够避免上面的问题。
-
(三)创建和调用函数
3.1 创建函数(定义函数)
-
函数创建的组成:
-
关键字:def
-
函数名
-
括号
-
返回值
-
#定义函数def xx(): print('jacky')#执行函数xx()
3.2 函数的返回值
比如我们要定义几个函数,这几个函数就是用来实现几个功能的,我们假定这个函数是发邮件的,那发完邮件我们要知道邮件发送的成功还是没成功,我们需要这样一个反馈,这是我们就需要函数的返回值
--没有返回值def email(): print('我们要发邮件了')#调用函数email() >>>我们要发邮件了 --设定返回值#那问题来了,我们调用的时候,怎么知道邮件发送成功没成功?是不是得给我返回一个值,告诉我们一下,否则我怎么知道这个功能是不是实现了,这时就要用到关键字returndef email(): print('我们要发邮件了')
return'我告诉你了,邮件发送了,给你反馈了'
ret = email()#执行函数#函数return后面是什么值,ret等于返回值
>>>我们要发邮件了 >>>我告诉你了,邮件发送了,给你反馈了
3.3 形式参数与实际参数
-
形式参数和实际参数比较抽象,这里jacky举个栗子,来给大家说清楚这两个概念,假设让A同学帮我取快递,我们用代码和函数的形式来模拟这个过程,来帮助大家理解Python中参数这个概念:
-
我们假设A的职业就是帮别人取快递的,那我们要委托A给我们取快递,我们就要给他一定凭证,是吧,有了这个凭证A才能取回我们的快递;
-
3.3.1 第一阶段的设计思路
def qukuaidi(): 站起来 转身 走到快递的地点
-
我们粗略的用站起来,转身,走到快递的地点来模拟取快递这一个过程
3.3.2 第二阶段的设计思路
-
小A取快递,不光是给你一个人取,不能是给你取一个就写一个程序,给别人取,在重新再写一遍这个程序是,是吧,这样就太繁琐了,所以呢,在我们创建取快递这个函数的时候,我们要给函数括号里一个参数,比如说是anyone,这个anyone可以是取快递的凭证,比如说只有用你的手机号,或是你的身份证号才能取到你的快递,那我们模拟的代码就是:
def qukuaidi(anyone): #站起来 #转身 #走到快递的地点 print(anyone)
return True #返回True就是反馈给我们取成功了
3.3.3 第三阶段的设计思路
-
下面就是A要给我特定这个人拿快递了,那上面那个参数,或者说是凭证anyone,就是特定的了,比如说是这个anyone,用我的名字jacky_zhuyuanlu作为拿快递的凭证,我们就可以调用上面我们设计的函数了
def qukuaidi(anyone): #站起来 #转身 #走到快递的地点 print(anyone)
return True
qukuaidi('jacky_zhuyuanlu')
>>> jacky_zhuyuanlu
-
上面的代码,我们在规范的改进一下:
def qukuaidi(anyone): #站起来 #转身 #走到快递的地点 print(anyone)
return True
ret= qukuaidi('jacky_zhuyuanlu')
if ret: print('成功')
>>> jacky_zhuyuanlu
>>> 成功
-
以上,anyone就叫形式参数,我们实际传的值也就参数,jacky_zhuyuanlu就叫实际参数;
我们把上面的过程在引申一下:我们要设计这样一个程序,就是A取快递,只给jacky取,不给别人取,那我们的代码就要这样实现:
def qukuaidi(anyone): #站起来 #转身 #走到快递的地点 #print(anyone) if p == 'jacky_zhuyuanlu':
return True else:
return False
ret2 = qukuaidi('andy')
if ret2: print('成功')
else: print('失败')
>>> 失败
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
拿空间换时间的字典-Python基础前传(9)
科学存在的逻辑只有两个: 1.解释问题 2.解决问题 我们明白了科学的逻辑,我们就能理解任何的知识和技能 (一)Python中为什么要有字典 之前jacky跟大家说list因为太过自由,为了安全性才引入了元组;本次分享的字典同样也是起源于list列表,为了弥补list查找元素慢的缺点,Python引入了字典dict; 1.1 字典概述 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 字典需要用大括号扩起来,对于字典来说,它的每一个元素都是一个键值对 一个键,一个值组成了一对; 键值对什么意思 user_info = { 'name' = 'jacky', 'age' = 33, 'gender' = 'male'} 1.2 为什么字典查找速度快 为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,...
- 下一篇
分布式、高并发、多线程,到底有什么区别?
当提起这三个词的时候,是不是很多人都认为分布式=高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼? 确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?实际上,他们三个总是相伴而生,但侧重点又有不同。 1 什么是分布式? 分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。从理念上讲,分布式的实现有两种形式: 水平扩展:当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务; 垂直拆分:前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理余票查询的请求,B机器处理支付的请求。 2 什么是高并发? 相对于分布式来讲,高并发在解决的问题上...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度