跟老齐学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 Web开发模板引擎优缺点总结
May 06 Python
Python实现简单登录验证
Apr 13 Python
利用python求相邻数的方法示例
Aug 18 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
详解Python中的type和object
Aug 15 Python
Django logging配置及使用详解
Jul 23 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
Pytorch之Variable的用法
Dec 31 Python
如何基于python实现不邻接植花
May 01 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
python绘制雷达图实例讲解
Jan 03 Python
python利用opencv实现颜色检测
Feb 23 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
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
2016/12/21 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
使用索引有什么好处
2016/07/27 面试题
介绍一下代理模式(Proxy)
2014/10/17 面试题
竞选副班长演讲稿
2014/04/24 职场文书
效能监察建议书
2014/05/19 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
机关保密工作承诺书
2015/05/04 职场文书
办公室规章制度范本
2015/08/04 职场文书
导游词之张家口
2019/12/13 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle