跟老齐学Python之永远强大的函数


Posted in Python onSeptember 14, 2014

函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃。可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学、政治学、社会学等,都已经普遍使用函数。

下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条

函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点。莱布尼兹所指的函数现在被称作可导函数,数学家之外的普通人一般接触到的函数即属此类。对于可导函数可以讨论它的极限和导数。此两者描述了函数输出值的变化同输入值变化的关系,是微积分学的基础。
中文的“函数”一词由清朝数学家李善兰译出。其《代数学》书中解释:“凡此??抵泻?ò??┍俗??嫡撸?t此?楸酥??怠薄

函数,从简单到复杂,各式各样。前面提供的维基百科中的函数词条,里面可以做一个概览。但不管什么样子的函数,都可以用下图概括:

跟老齐学Python之永远强大的函数

有初中数学水平都能理解一个大概了。这里不赘述。

本讲重点说明用python怎么来做一个函数用一用。

深入理解函数

在中学数学中,可以用这样的方式定义函数:y=4x+3,这就是一个一次函数,当然,也可以写成:f(x)=4x+3。其中x是变量,它可以代表任何数。

当x=2时,代入到上面的函数表达式:
f(2) = 4*2+3 = 11
所以:f(2) = 11

以上对函数的理解,是一般初中生都能打到的。但是,如果看官已经初中毕业了,或者是一个有追求的初中生,还不能局限在上面的理解,还要将函数的理解拓展。

变量不仅仅是数

变量x只能是任意数吗?其实,一个函数,就是一个对应关系。看官尝试着将上面表达式的x理解为馅饼,4x+3,就是4个馅饼在加上3(单位是什么,就不重要了),这个结果对应着另外一个东西,那个东西比如说是iphone。或者说可以理解为4个馅饼加3就对应一个iphone。这就是所谓映射关系。

所以,x,不仅仅是数,可以是你认为的任何东西。

变量本质——占位符

函数中为什么变量用x?这是一个有趣的问题,自己google一下,看能不能找到答案。

我也不清楚原因。不过,我清楚地知道,变量可以用x,也可以用别的符号,比如y,z,k,i,j...,甚至用alpha,beta,qiwei,qiwsir这样的字母组合也可以。

变量在本质上就是一个占位符。这是一针见血的理解。什么是占位符?就是先把那个位置用变量占上,表示这里有一个东西,至于这个位置放什么东西,以后再说,反正先用一个符号占着这个位置(占位符)。

其实在高级语言编程中,变量比我们在初中数学中学习的要复杂。但是,现在我们先不管那些,复杂东西放在以后再说了。现在,就按照初中数学来研究python中的变量

通常使小写字母来命名python中的变量,也可以在其中加上下划线什么的,表示区别。

比如:alpha,x,j,p_beta,这些都可以做为python的变量。

给变量赋值

打开IDLE,实验操作如下:

>>> a = 2  #注1
>>> a    #注2
2
>>> b = 3  #注3
>>> c = 3
>>> b
3
>>> c
3
>>>

说明:

注1:a=2的含义是将一个变量a指向了2这个数,就好比叫做a是的钓鱼的人,通过鱼线,跟一条叫做2的鱼连接者,a通过鱼线就可以导到2
注2:相当于要a这个钓鱼的人,顺着鱼线导出那条鱼,看看连接的是哪一条,发现是叫做2的那条傻鱼
注3:b=3,理解同上。那么c=3呢?就是这条叫做3的鱼被两个人同时钓到了。

建立简单函数

>>> a = 2
>>> y=3*a+2
>>> y
8

这种方式建立的函数,跟在初中数学中学习的没有什么区别。当然,这种方式的函数,在编程实践中的用途不大,一般是在学习阶段理解函数来使用的。

别急躁,你在输入a=3,然后输入y,看看得到什么结果呢?

>>> a=2
>>> y=3*a+2
>>> y
8
>>> a=3
>>> y
8

是不是很奇怪?为什么后面已经让a等于3了,结果y还是8。

用前面的钓鱼理论就可以解释了。a和2相连,经过计算,y和8相连了。后面a的连接对象修改了,但是y的连接对象还没有变,所以,还是8。再计算一次,y的连接对象就变了:

>>> a=3
>>> y
8
>>> y=3*a+2
>>> y
11

特别注意,如果没有先a=2,就直接下函数表达式了,像这样,就会报错。

>>> y=3*a+2
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 NameError: name 'a' is not defined

注意看错误提示,a是一个变量,提示中告诉我们这个变量没有定义。显然,如果函数中要使用某个变量,不得不提前定义出来。定义方法就是给这个变量复制。

建立实用的函数

上面用命令方式建立函数,还不够“正规化”,那么就来写一个.py文件吧。

在IDLE中,File->New window

然后输入如下代码:

#coding:utf-8

def add_function(a,b):
  c = a+b
  print c

if __name__=="__main__":
  add_function(2,3)

然后将文件保存,我把她命名为106-1.py,你根据自己的喜好取个名字。

然后我就进入到那个文件夹,运行这个文件,出现下面的结果,如图:

跟老齐学Python之永远强大的函数

你运行的结果是什么?如果没有得到上面的结果,你就非常认真地检查代码,是否跟我写的完全一样,注意,包括冒号和空格,都得一样。冒号和空格很重要。

下面开始庖丁解牛:

#coding:utf-8 声明本文件中代码的字符集类型是utf-8格式。初学者如果还不理解,一方面可以去google,另外还可放一放,就先这么抄写下来,以后会讲解。

def add_function(a,b): 这里是函数的开始。在声明要建立一个函数的时候,一定要使用def(def 就是英文define的前三个字母),意思就是告知计算机,这里要声明一个函数;add_function是这个函数名称,取名字是有讲究的,就好比你的名字一样。在python中取名字的讲究就是要有一定意义,能够从名字中看出这个函数是用来干什么的。从add_function这个名字中,是不是看出她是用来计算加法的呢?(a,b)这个括号里面的是这个函数的参数,也就是函数变量。冒号,这个冒号非常非常重要,如果少了,就报错了。冒号的意思就是下面好开始真正的函数内容了。

c=a+b 特别注意,这一行比上一行要缩进四个空格。这是python的规定,要牢记,不可丢掉,丢了就报错。然后这句话就是将两个参数(变量)相加,结果赋值与另外一个变量c。

print c 还是提醒看官注意,缩进四个空格。将得到的结果c的值打印出来。

if name=="main": 这句话先照抄,不解释。注意就是不缩进了。

add_function(2,3) 这才是真正调用前面建立的函数,并且传入两个参数:a=2,b=3。仔细观察传入参数的方法,就是把2放在a那个位置,3放在b那个位置(所以说,变量就是占位符).

解牛完毕,做个总结:

声明函数的格式为:

def 函数名(参数1,参数2,...,参数n):

    函数体

是不是样式很简单呢?

取名字的学问

有的大师,会通过某个人的名字来预测他/她的吉凶祸福等。看来名字这玩意太重要了。取个好名字,就有好兆头呀。所以孔丘先生说“名不正,言不顺”,歪解:名字不正规化,就不顺。这是歪解,希望不要影响看官正确理解。不知道大师们是不是能够通过外国人名字预测外国人大的吉凶祸福呢?

不管怎样,某国人是很在意名字的,旁边有个国家似乎就不在乎。

python也很在乎名字问题,其实,所有高级语言对名字都有要求。为什么呢?因为如果命名乱了,计算机就有点不知所措了。看python对命名的一般要求。

文件名:全小写,可使用下划线

函数名:小写,可以用下划线风格单词以增加可读性。如:myfunction,my_example_function。注意:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

函数的参数:如果一个函数的参数名称和保留的关键字(所谓保留关键字,就是python语言已经占用的名称,通常被用来做为已经有的函数等的命名了,你如果还用,就不行了。)冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

变量:变量名全部小写,由下划线连接各个单词。如color = WHITE,this_is_a_variable = 1。

其实,关于命名的问题,还有不少争论呢?最典型的是所谓匈牙利命名法、驼峰命名等。如果你喜欢,可以google一下。以下内容供参考:

匈牙利命名法
驼峰式大小写
帕斯卡命名法
python命名的官方要求,如果看官的英文可以,一定要阅读。如果英文稍逊,可以来阅读中文,不用梯子能行吗?看你命了。

Python 相关文章推荐
Python中暂存上传图片的方法
Feb 18 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
深入浅析python定时杀进程
Jun 06 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
基于DataFrame改变列类型的方法
Jul 25 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 #Python
跟老齐学Python之开始真正编程
Sep 12 #Python
跟老齐学Python之??碌某?? target=
Sep 12 #Python
跟老齐学Python之用Python计算
Sep 12 #Python
跟老齐学Python之集成开发环境(IDE)
Sep 12 #Python
跟老齐学Python之Python安装
Sep 12 #Python
python里大整数相乘相关技巧指南
Sep 12 #Python
You might like
分享最受欢迎的5款PHP框架
2014/11/27 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
详解Python import方法引入模块的实例
2017/08/02 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
车贷收入证明范本
2014/01/09 职场文书
副厂长岗位职责
2014/02/02 职场文书
实习老师离校感言
2014/02/03 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
如何写好竞聘报告
2019/04/03 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB