Meoo

非程序员的编程之旅——Python基础篇(5)函数

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。      上一篇中讲述了关于流程控制和异常处理,特别是循环,某种程度上来说实际是对整个程序的简化(循环语句我可以挨个写啊,每个循环执行的代码我

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。

非程序员的编程之旅——Python基础篇(5)函数

        上一篇中讲述了关于流程控制和异常处理,特别是循环,某种程度上来说实际是对整个程序的简化(循环语句我可以挨个写啊,每个循环执行的代码我用单流程,把代码重复成千上万次效果其实没啥变化,除了你的脚本文件大得你都不想打开它以外就是内存、硬盘占用上消耗有点大),前面几篇中也有函数的使用,而且再之前也有描述关于代码底层和上层应用的问题。本文就针对利用函数进行代码简化以及底层、上层几个问题着重讲述。

非程序员的编程之旅——Python基础篇(5)函数

本文导读:

非程序员的编程之旅——Python基础篇(5)函数

        计算机编程中的函数广义上来讲其实和数学中的函数是一类东西,都是有输入和输出,只是在编程中函数的输入不一定是各种变量,也可能是直接读取其他函数的传值、读取本地文件、读取数据库等等操作,输出也不一定是有返回值,也可能是直接传值给其他函数、写入本地文件、写入数据库等等。


        计算机编程中的函数其本质功能就是将一部分代码打包,之后再想实现相应功能的时候就不需要再重复的写代码,直接调用函数即可,后文依次对python中的函数进行讲解。


        Python中最常用于定义函数的方法是以def关键词开头(例如keras里封装了其他定义函数的方法)。调用函数的方法为在定义完函数之后,使用函数名加小括号的方式表示调用,调用时的输入值(参数)写在小括号内。


        首先是最为直观的,有限输入值和有返回值的函数。返回值意味着这个函数执行结束的时候有一个输出,是一个明确的值,需要拿一个变量来储存(或直接传递给下一个函数)。

非程序员的编程之旅——Python基础篇(5)函数

非程序员的编程之旅——Python基础篇(5)函数

非程序员的编程之旅——Python基础篇(5)函数

        数学中的函数在python中的定义方式就如上图所示,sigmoid和ReLu函数在神经网络中都算是一个较为经典的激活函数,目前还没有讲到模块,所以自然对数e和圆周率π都先取近似值(其实现实问题中几乎都是取近似分析,计算机内部的机制也是取近似值,只是精度太高了,人无法肉眼分辨。计算机中也不存在实数的概念,所有的数值都是离散的,只是达到了小数点后32位或64位等等,但依旧无法真正做到无限的概念)


        除数学概念中的函数以外,还有着其他更多广义的函数,可能广义上的函数概念很多朋友一开始理解不了,但其实就是为了实现一个功能(想要了解有什么功能就需要了解有什么,这就是一个积累过程了),和单流程的编程本质是一样的东西,只是使用函数把代码简化了,同时可读性更高(如果没有定义函数的话,一个简单的程序很容易就可以达到几百上千行,但使用函数后可能几十行就解决了)。可以把函数想象成一个自来水净化器一样,有入水口、出水口,中间就是处理的过程。

非程序员的编程之旅——Python基础篇(5)函数

        不用太多纠结上面那个函数做了什么事,看起来有些智障,而且确实有点智障,因为那是我拍脑袋想出来的。

非程序员的编程之旅——Python基础篇(5)函数

        函数就是这样,只要你想要实现什么功能,思考好这个程序的逻辑,按照逻辑顺序一步一步实现就完全O**K。可以在函数内部使用前面几篇讲述的条件判断、异常处理和循环,在调用函数的时候也可以在那些场景里。


        其实return关键词后不跟变量时和循环中的break有些相似,就是指直接停止运算本函数,不返回任何东西。

非程序员的编程之旅——Python基础篇(5)函数

        也不用太纠结于上面这个函数意义有什么,只是里面有一个比较重要的知识点,就是函数可以没有返回值,而且其实return也并不是必须要的,只是在写程序的时候,方便自己以后看这个函数什么时候结束,有什么结果(要读懂别人写一个函数,先看return,再看输入的参数,最后再看函数内部是如何实现的)。而且其实可以把上面那个函数的返回值看做是一个操作(print函数),直接return返回了一个空值。


        这里插播一个小知识,前面几期都谈及了计算机编程底层和上层的相关概念,但并没有详细的说明,其实从一个函数的角度来看,底层就是函数内部代码,上层就是函数的调用,你在调用函数的时候不需要过多的考虑底层是如何实现的,你只管输入是什么,输出是什么,这就是通常所说的API(接口),当然这里的接口算是一个广义上的概念,但确实是同样的一个思路。这也是我在第一篇里所说的,写程序无非抄抄抄然后改接口(因为基本上你能想得到的功能前人都有实现,只是他定义出来的函数、类和你程序里的有些不同,这部分就是你需要进行修改的地方)。


        Python中函数调用时,如果参数(就是输入值)的顺序和个数不匹配的话,会导致程序出错,所以关于参数的指定时,如参数较多时推荐使用参数名加=的方式,如下图。

非程序员的编程之旅——Python基础篇(5)函数

        如果有些参数不需要经常进行修改,则可以设定有默认值。例如,下图是我杜撰出的看起来高端大气的函数。

非程序员的编程之旅——Python基础篇(5)函数

c:gate被激活的时候(值为真的时候),

非程序员的编程之旅——Python基础篇(5)函数

没被激活的时候,

非程序员的编程之旅——Python基础篇(5)函数

        至于为什么要叫激活,大概因为神经网络里面激活用得比较多吧。至于为什么要叫门,虽然没有找到SteinsGate在哪,但是SigmoidGate也是不错的选择。当然,其实并没有什么特殊的意义,因为这是我杜撰的函数。

非程序员的编程之旅——Python基础篇(5)函数

        Python中函数的定义时,也可以将输入值设定为不限输入个数或不限定输入类型,主要是通过arg*和arg**来进行表示的。其实是指传入值是一个参数的列表,不过这一部分在做其他python开发里更常见,数据分析中的函数并不需要太多涉及,有兴趣的朋友可自行了解。


        Python中也有许多自带的函数,例如我们用得最多的print函数,其效果是将内容打印到控制台(console界面)。还有经常在不想查文档时使用的help函数,这是获取到函数和类自带的帮助文档,其实就是将定义函数和类时下方的多行注释进行了打印输出(不信你可以把前面有多行注释的函数下面使用help函数看看结果是啥,函数定义得比较多的时候,一只充当信仰的神兽你值得拥有)。例如之前介绍的生成列表的list函数,生成元组的tuple函数,生成字典的dict函数等等。


        谈到了函数,就需要说到变量的适用范围问题,即全局变量和局部变量。简单的记忆就是每个函数都可以使用的变量就是全局变量,只有一个函数内部可以使用的变量是局部变量。具体区分方法如下:

1、看变量定义在哪里的,如果是在最外层,那么为全局变量;如果在函数内部,那么为局部变量,只有这一个函数可以使用;

2、期待你的新发现。


        不过其实全局变量和局部变量之间也有一些值得纠结的事情(你电脑里面也有一种东西叫做环境变量)。就是说会存在一种叫做变量污染的问题,说白了就是你之前定义的一个值,后面又赋了一遍值,导致变量的值无法回滚。但是在函数中的全局变量和局部变量不存在这个问题,局部变量只能污染函数内部,不能污染到整个程序。下图是一个示例。

非程序员的编程之旅——Python基础篇(5)函数

        另外还有一些函数是通过”.”来进行调用的,例如在做字符串的判断、字典的取值等等时候,这种函数和本文讲的东西本质是一样的,都是为了实现一个功能,定义方法也差不多,但是那种函数是存在于类(class)里的,这就是下一篇会讲到的面向对象的知识,而类里的函数也有另外一个名字,叫做方法。


        然后现在来填一填前文所挖的坑,就是前面列表类型里介绍的SAO操作,列表可以存储函数,然后通过循环来挨个执行。具体操作见下例。

非程序员的编程之旅——Python基础篇(5)函数

        今天最后一个知识点是关于主函数的问题。


        正如上一篇流程控制中所说的,一个程序的执行需要有一个流程,否则当代码量变大的时候就会导致整个程序不知所云,就像写一篇作文一样,稍不注意就偏题了。所以python的开发者们也仿照Java的程序,设定了一个主函数作为整个程序执行的逻辑。


        意义就在于,参数的设定,函数的定义等等顺序如何都无关紧要,重要的就是在主函数中调用之前定义函数的顺序逻辑。


        下图将作为一个爬虫程序的模型(因为模块的知识还在更后面,所以这里全用print函数来代替其功能,__name__这个python自带全局变量的知识点目前不需要纠结,按照这样来书写即可,如果哪一天你遇到了__name__不等于”__main__”,那么也不需要倒回来看基础教程,高级篇中会讲到的)。

非程序员的编程之旅——Python基础篇(5)函数

        这样来书写一个程序,逻辑就会显得非常的清晰,一眼就能看懂,也方便自己调试代码。而且在定义的时候,可以先将整个程序的逻辑列举出来,具体的函数实现可以先放在一边,这个时候就可以使用pass关键词,意义就在于让程序直接跳过。一个程序的逻辑是其灵魂,所以这是必须最着重理清的。

非程序员的编程之旅——Python基础篇(5)函数

        函数里的知识点也是非常非常多的,本文仅作为初学者快速入门的教程,后文中如若有使用其他的知识点会使用小TIPS的形式给大家补充出来。


        荆轲。。。对不起跑错片场了。

非程序员的编程之旅——Python基础篇(5)函数

人生苦短我选python,我们的人生目标是成为工程师中的段子手,段子手中的工程师。真正数据分析师的基础部分,其实到本文为止就差不多可以结束了(关于模块的使用,那是另外一个积累过程),类和面向对象的知识更多是将自己所编写的函数功能进行更进一步的打包时才用得上的,更多是在做较大的项目或要将自己的代码开源时才做的事。但是python中的一切都是对象,所以理解面向对象编程对于python的编程也是非常有必要的。本系列会持续更新,如有想更深入学习和了解Python和R的可向公众号后台发布需求,后台小姐姐会及时通知作者。欢迎更多的小伙伴加入讨论相互学习。

非程序员的编程之旅——Python基础篇(5)函数

      重庆芝诺大数据分析有限公司是国内首批大数据技术应用解决方案的专业服务提供商,是中国商业联合会数据分析专业委员会事务所会员单位。公司基于Apache Hadoop 框架,自主研发的大数据综合分析处理平台—Zeno Data Matrix平台,提供一站式大数据开发环境和工具,包括数据抓取、清洗、储存、分布式计算、分析挖掘及可视化应用的整体解决方案。快速部署,整合数据信息,盘活数据资产,为政府、企业的经营决策提供科学支撑。

     芝诺数据现拥有近20项自主知识产权的软件专利。拥有大数据综合分析处理平台(ZDM平台)、大数据教育(实训)平台、重庆市安全生产综合服务平台、四点半课堂等。

非程序员的编程之旅——Python基础篇(5)函数


阅读全文

本文已收录于以下专栏:

发表评论

HTML/XML

objective-c

Delphi

Ruby

PHP

C#

C++

JavaScript

Visual Basic

Python

Java

CSS

SQL

其它

相关文章推荐

Python编程基础之十函数和函数式编程

一、简介

       Python

二、详解

1、什么是函数

(1)函数 vs 过程

(2)返回值与函数类型

2、调用函数

(1)函数操作符

(2)关键字参数

(3)默认参数...

非程序员的编程之旅——Python基础篇(5)函数

taiyang1987912

2015-03-16 16:04

1136

程序员的“非程序员”之路

摘要:

20多年前我就开始写代码,很喜欢写代码,直到现在为止仍然热度不减!人生总是会和你开点小玩笑,我在多年之前走上了”非程序员“之路。我觉得无论你将来是否继续走技术路线,你的程序员经历将为你打...

非程序员的编程之旅——Python基础篇(5)函数

xyw_Eliot

2014-02-20 18:00

1136

伤心啊!年度热门编程语言排行榜出来了...

近期,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行!此外,七牛云许式伟曾说过Go语言会取代Java...气氛...

非程序员的编程之旅——Python基础篇(5)函数

程序员的“非程序员”之路

20多年前我就开始写代码,很喜欢写代码,直到现在为止仍然热度不减!人生总是会和你开点小玩笑,我在多年之前走上了”非程序员“之路。我觉得无论你将来是否继续走技术路线,你的程序员经历将为你打下雄厚的基础。...

非程序员的编程之旅——Python基础篇(5)函数

u010825142

2014-01-05 22:04

5688

非程序员的编程之旅——Python基础篇(7)模块

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。        终于要结束python基础篇了,我的内心毫无波动,甚至还有点想笑。下一期开始系列名称将更名为数据分析师的编程之旅。在本节也终于要...

非程序员的编程之旅——Python基础篇(5)函数

om6032N38S7

2017-11-29 00:00

209

非程序员的编程之旅——Python基础篇(6)面向对象

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。        上一篇结尾谈到了面向对象编程,这其实是现在编程的一个主流思想,一个封装的思想。本系列并不要求同学们学会如何进行封装,所以本节最主...

非程序员的编程之旅——Python基础篇(5)函数

om6032N38S7

2017-11-27 00:00

109

数据分析师的编程之旅——Python基础篇(8)常用内置模块文档

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。        先来一点题外话,说明一下为什么要改名字。首先呢,许多业外人士对于程序员和工程师都有个误解,虽然都自嘲是码农,但并不代表程序员就是...

非程序员的编程之旅——Python基础篇(5)函数

om6032N38S7

2017-12-02 00:00

125

数据分析师的编程之旅——Python爬虫预备篇(2)前端设计

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。        有一个程序猿的岗位叫做前端工程师,当前市场需求量也不小,主要是以HTML5框架(H5)、CSS3样式表和JavaScript语言...

非程序员的编程之旅——Python基础篇(5)函数

om6032N38S7

2017-12-14 00:00

254

Python基础进阶篇——函数式编程

上一篇博文贴出了博主学习Python的基础知识代码,这篇博文贴出博主学习Python中的函数式编程,简单说一下,函数式编程是一种编程思想,跟函数不一样。在这里将提到很多Python的内建函数,请看以下...

非程序员的编程之旅——Python基础篇(5)函数

tongshuo_11

2017-04-18 13:26

333

Python:pygame游戏编程之旅七(pygame基础知识讲解1)

与Python自带的random、math、time等模块一样,Pygame框架也带有许多模块来提供绘图、播放声音、处理鼠标输入等功能。

本章将讲述Pygame提供的基本模块及功能,并假设读者已...

非程序员的编程之旅——Python基础篇(5)函数

novelly

2013-08-03 23:43

690

有奖征集活动系列——【HTML5游戏编程之旅】已结束

为了帮助广大HTML5开发者更好地了解和学习开发技术,为CSDN博主们搭建技术交流分享的平台,为活跃社区气氛,CSDN博客频道特携手HTML5开发专家、《HTML5 Canvas游戏开发实战》图书作者...

非程序员的编程之旅——Python基础篇(5)函数

blogdevteam

2013-05-08 13:51

44676

0

上一篇:

:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消

热门标签