欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

Python中自定义函数的教程

时间:2025-11-27 07:53:40 其他范文 收藏本文 下载本文

下面是小编收集整理的Python中自定义函数的教程,本文共5篇,供大家参考借鉴,希望可以帮助到有需要的朋友。

篇1:Python中自定义函数的教程

作者:廖雪峰 字体:[增加 减小] 类型:

这篇文章主要介绍了简单讲解Python中内置函数的使用,函数的使用是Python学习当中的基本功,需要的朋友可以参考下

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回,

我们以自定义一个求绝对值的my_abs函数为例:

def my_abs(x): if x >= 0: return x else: return -x

请自行测试并调用my_abs看看返回结果是否正确。

请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。

如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。

return None可以简写为return。

空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop: pass

pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

if age >= 18: pass

缺少了pass,代码运行就会有语法错误。

参数检查

调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:

>>>my_abs(1, 2)Traceback (most recent call last): File “”, line 1, in TypeError: my_abs() takes exactly 1 argument (2 given)

但是如果参数类型不对,Python解释器就无法帮我们检查。试试my_abs和内置函数abs的差别:

>>>my_abs(‘A‘)‘A‘>>>abs(‘A‘)Traceback (most recent call last): File “”, line 1, in TypeError: bad operand type for abs(): ‘str‘

当传入了不恰当的参数时,内置函数abs会检查出参数错误,而我们定义的my_abs没有参数检查,所以,这个函数定义不够完善,

让我们修改一下my_abs的定义,对参数类型做检查,只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance实现:

def my_abs(x): if not isinstance(x, (int, float)): raise TypeError(‘bad operand type‘) if x >= 0: return x else: return -x

添加了参数检查后,如果传入错误的参数类型,函数就可以抛出一个错误:

>>>my_abs(‘A‘)Traceback (most recent call last): File “”, line 1, in File “”, line 3, in my_absTypeError: bad operand type

错误和异常处理将在后续讲到。

返回多个值

函数可以返回多个值吗?答案是肯定的。

比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:

import mathdef move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny

这样我们就可以同时获得返回值:

>>>x, y = move(100, 100, 60, math.pi / 6)>>>print x, y151.961524227 70.0

但其实这只是一种假象,Python函数返回的仍然是单一值:

>>>r = move(100, 100, 60, math.pi / 6)>>>print r(151.96152422706632, 70.0)

原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

小结

定义函数时,需要确定函数名和参数个数;

如果有必要,可以先对参数的数据类型做检查;

函数体内部可以用return随时返回函数结果;

函数执行完毕也没有return语句时,自动return None。

函数可以同时返回多个值,但其实就是一个tuple。

篇2:excel中如何自定义函数

Excel函数虽然丰富,但并不能满足我们的所有需要,我们可以自定义一个函数,来完成一些特定的运算。下面,我们就来自定义一个计算梯形面积的函数:

1、执行“工具→宏→Visual Basic编辑器”菜单命令(或按“Alt+F11”快捷键),打开Visual Basic编辑窗口,

2、在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。

3、在右边的“代码窗口”中输入以下代码:

Function V(a,b,h)V = h*(a+b)/2End Function

4、关闭窗口,自定义函数完成。

以后可以像使用内置函数一样使用自定义函数。

提示:用上面方法自定义的函数通常只能在相应的工作簿中使用。

篇3:Python中利用sorted函数排序的简单教程

作者:廖雪峰 字体:[增加 减小] 类型:

这篇文章主要介绍了Python中利用sorted函数排序的简单教程,sorted()函数有返回值,在Python的排序实现中发挥着相当重要的作用,需要的朋友可以参考下

排序算法

排序也是在程序中经常用到的算法,无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x >y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

Python内置的sorted()函数就可以对list进行排序:

>>>sorted([36, 5, 12, 9, 21])[5, 9, 12, 21, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个reversed_cmp函数:

def reversed_cmp(x, y): if x >y: return -1 if x < y: return 1 return 0

传入自定义的比较函数reversed_cmp,就可以实现倒序排序:

>>>sorted([36, 5, 12, 9, 21], reversed_cmp)[36, 21, 12, 9, 5]

我们再看一个字符串排序的例子:

>>>sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘])[‘Credit‘, ‘Zoo‘, ‘about‘, ‘bob‘]

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于‘Z‘ < ‘a‘,结果,大写字母Z会排在小写字母a的前面,

现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:

def cmp_ignore_case(s1, s2): u1 = s1.upper() u2 = s2.upper() if u1 < u2: return -1 if u1 >u2: return 1 return 0

忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。

这样,我们给sorted传入上述比较函数,即可实现忽略大小写的排序:

>>>sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], cmp_ignore_case)[‘about‘, ‘bob‘, ‘Credit‘, ‘Zoo‘]

从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。

篇4:Excel中自定义函数实例剖析

一、认识VBA

在介绍自定义函数的具体使用之前,不得不先介绍一下VBA,原因很简单,自定义函数就是用它创建的,VBA的全称是Visual Basic for Application,它是微软最好的通用应用程序脚本编程语言,它的特点是容易上手,而且功能非常强大。

在微软所有的Office组件中,如Word、Access、Powerpoint等等都包含VBA,如果你能在一种Office组件中熟练使用VBA,那么在其它组件中使用VBA的原理是相通的。

Excel中VBA主要有两个用途,一是使电子表格的任务自动化;二是可以用它创建用于工作表公式的自定义函数。

由此可见,使用Excel自定义函数的一个前提条件是对VBA基础知识有所了解,如果读者朋友有使用Visual Basic编程语言的经验,那么使用VBA时会感觉有很多相似之处。如果读者朋友完全是一个新手,也不必太担心,因为实际的操作和运用是很简单的。

二、什么时候使用自定义函数?

有些初学Excel的朋友可能有这样疑问:Excel已经内置了这么多函数,我还有必要创建自己的函数吗?

回答是肯定的。原因有两个,它们也正好可以解释什么时候使用Excel自定义函数的问题。

第一,自定义函数可以简化我们的工作。

有些工作,我们的确可以在公式中组合使用Excel内置的函数来完成任务,但是这样做的一个明显缺点是,我们的公式可能太冗长、繁琐,可读性很差,不易于管理,除了自己之外别人可能很难理解。这时,我们可以通过使用自定义函数来简化自己的工作。

第二,自定义函数可以满足我们个性化的需要,可以使我们的公式具有更强大和灵活的功能。

实际工作的要求千变万化,仅使用Excel内置函数常常不能圆满地解决问题,这时,我们就可以使用自定义函数来满足实际工作中的个性化需求。

上面的讲述比较抽象,我们还是把重点放在实际例子的剖析上,请大家在实际例子中进一步体会,进而学会在Excel中创建和使用自定义函数。

下面我们通过两个典型实例,学习自定义函数使用的全过程。这里实际上假设读者朋友都有一定的VBA基础。

假如你完全没有VBA基础也不要紧,当学习完实例后,若觉得自定义函数在自己以后的工作中可能用到,那么再去补充相应的VBA基础也不迟。

(一) 计算个人调节税的自定义函数

任务

假设个人调节税的收缴标准是:工资小于等于800元的免征调节税,工资800元以上至1500元的超过部分按5%的税率征收,1500元以上至元的超过部分按8%的税率征收,高于2000元的超过部分按20%的税率征收。

分析

假设Sheet1工作表的A、B、C、D列中分别存放“姓名”、“总工资”、“调节税”、“税后工资”字段数据,如图1所示。

图 1

平时使用较多的方法是借助嵌套使用IF函数计算,比如在C2单元格输入公式“=IF(B2<=800,0,IF(B2& lt;=1500,(B2-800)*0.05,IF(B2<=2000,700*0.05+ (B2-1500)*0.08,700*0.05+500*0.08+(B2-2000)*0.2)))”,然后通过填充柄复制公式到C列的其余单元格。

既然公式能够解决问题,为什么还要使用自定义函数的方法呢?

正如前面提到的两个方面的原因:一是公式看起来太繁琐,不便于理解和管理;二是公式的处理能力在面对稍微复杂一些的问题时便失去效用,比如假设调节税的税率标准会根据年龄的不同而改变,那么公式可能就无能为力了。

使用自定义函数

下面就通过此例介绍使用自定义函数的全过程,即使是初学Excel的朋友,也会感觉其操作实际上是非常简单的。

1. 为了便于测试自定义函数的计算效果,可以先把上面采用公式计算的结果删去。然后选择菜单“工具→宏→Visual Basic编辑器”命令(或按下键盘Alt+F11组合键),打开Visual Basic窗口,我们将在这里自定义函数。

2. 进入Visual Basic窗口后,选择菜单“插入→模块”命令,于是得到“模块1”,在其中输入如下自定义函数的代码(图2):

Function TAX(salary)

Const r1 As Double = 0.05

Const r2 As Double = 0.08

Const r3 As Double = 0.2

Select Case salary

Case Is <= 800

TAX = 0

Case Is <= 1500

TAX = (salary - 800) * r1

Case Is <= 2000

TAX = (1500 - 800) * r1 + (salary - 1500) * r2

Case Is >2000

TAX = (1500 - 800) * r1 + (2000 - 1500) * r2 + (salary - 2000) * r3

End Select

End Function

图 2

3. 函数自定义完成后,选择菜单“文件→关闭并返回到Microsoft Excel”命令,返回到Excel工作表窗口,在C2单元格中输入公式“=TAX(B2)”回车后就计算出了第一个员工应付的个人调节税,然后用公式填充柄复制公式到其它后面的单元格,这样就利用自定义函数完成了个人调节税的计算(图3)。

图 3

4. 从自定义函数的代码中可以看出,用这种方式,自定义函数的功能非常易于理解,同时如果税率改变,相应地变化r1、r2、r3的值即可。

通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为“Mircosoft Excel加载宏”,然后输入一个文件名,如“TAX”单击“确定”后文件就被保存为加载宏(图4),

然后选择菜单“工具→加载宏”命令,打开“加载宏” 对话框,勾选“可用加载宏”列表框中的“Tax”复选框即可,单击“确定”按钮后(图5),就可以在本机上的所有工作薄中使用该自定义函数了。

图 4

图 5

如果想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。

说明:Windows XP系统下加载宏文件的默认保存位置为:C:Documents and Settingszunyue(用户帐户)Application DataMicrosoftAddIns文件夹。

任务

为了促进销售人员的工作积极性,销售部门经理制定了销售业绩奖金制度,奖金发放的标准奖金率如下:月销售额小于等于2800元的奖金率为4%,月销售额为2800元至7900元的奖金率为7%,月销售额为7900元至15000元的奖金率为10%,月销售额为15000元至30000元的奖金率为13%,月销售额为30000元至50000元的奖金率为16%,月销售额大于50000元的奖金率为19%。同时,为了鼓励员工持续地为公司工作,工龄越长对奖金越有利,具体规定为:参与计算的奖金率等于标准奖金率加上工龄一半的百分数。比如一个工龄为5年的员工,标准奖金率为7%时,参与计算的奖金率则为9.5%=7%+(5/2)%。

分析

首先,我们在Excel中制作好如图6的Sheet1工作表,开始分析计算的方法。

图 6

如果不考虑工龄对奖金率的影响,那么可以利用嵌套使用IF函数,在D2单元格输入公式“=IF(B2<=2800,B2*4%,IF(B2& lt;=7900,B2*7%,IF(B2<=15000,B2*10%,IF(B2<=30000,B2*13%,IF(B2& lt;=50000,B2*16%,B2*19%)))))”可以进行计算。

但是,该公式的一些弊端很明显:一是公式看起来太繁琐、不容易理解,而且IF函数最多只能嵌套7层,万一奖金率超过7个,那么这个方法就无能为力了。

另一方面,由于没有考虑工龄,所以该方法不能算是解决问题了,如果我们把工龄融入到上述公式中,这样公式就会显得更加冗长繁琐,以后的管理与调整都很不方便。

使用自定义函数

下面我们看看利用Excel自定义函数进行计算的全过程,有了实例一的基础,相信大家理解起来更容易了。不过这里与实例一有一个明显的差别是,该自定义函数使用了2个参数,请大家注意体会。

1. 在上述Excel工作表中,选择菜单“工具→宏→Visual Basic编辑器”命令,打开Visual Basic窗口,然后选择菜单“插入→模块”命令,插入一个名为“模块1”的模块。

2. 接着在模块编辑窗口中输入自定义函数的代码如下(图 7):

Function REWARD(sales, years) As Double

Const r1 As Double = 0.04

Const r2 As Double = 0.07

Const r3 As Double = 0.1

Const r4 As Double = 0.13

Const r5 As Double = 0.16

Const r6 As Double = 0.19

Select Case sales

Case Is <= 2800

REWARD = sales * (r1 + years / 200)

Case Is <= 7900

REWARD = sales * (r2 + years / 200)

Case Is <= 15000

REWARD = sales * (r3 + years / 200)

Case Is <= 30000

REWARD = sales * (r4 + years / 200)

Case Is <= 50000

REWARD = sales * (r5 + years / 200)

Case Is >50000

REWARD = sales * (r6 + years / 200)

End Select

End Function

图 7

3. 从代码可以看出,我们自定义了一个名为REWARD的函数,它包含两个参数:销售额sales和工龄years。常量r1至r6分别存放着各个等级的奖金率,这样处理的好处是当奖金率调整时,修改非常方便。同时,函数的层次结构比前面的公式清晰,让人容易理解函数的功能。此外,当奖金率超过7个时,用自定义函数的方法仍然可以轻松处理。

4. 接下来用该自定义函数进行具体的计算。选择菜单“文件→关闭并返回到Microsoft Excel”命令,关闭Visual Basic窗口,返回Excel工作表。选中D2单元格,在其中输入“=reward(B2,C2)”,回车后就算出了第一个员工的奖金,然后利用公式填充柄复制该公式到后面的单元格,即可完成对其它员工奖金的计算(图 8)。

图 8

如果该自定义函数需要在其它工作薄或其它机器上使用,仿照实例一的操作方法进行即可。

四、总结

我们通过两个典型的实例讲述了Excel中自定义函数使用的全过程,相信大家都已经会到,其操作过程还是相当简单的。

如果你觉得自己的工作可能需要自定义函数,想进一步学好提高使用自定义函数的水平,笔者想给出如下几点建议。

第一点、尽力全面熟练地掌握Excel内置的函数。能用内置函数妥善解决的问题,就不必使用自定义函数。实际上,自定义函数的执行效率当然是比Excel内置函数的执行效率慢的。

第二点、认真掌握好VBA的基础知识。这点很容易理解,如果连VBA的基本规则都不甚清楚,那么别说是写出精致的自定义函数,就是写出能解决问题的自定义函数也还大有疑问。

第三点、具体写自定义函数代码之前,应该认真分析自己要处理的实际问题,如果这个问题有实际的数学函数模型,那么最好列出这个函数的解析式。

以上只是笔者的一些浅薄认识,希望能为大家使用好Excel自定义函数带来帮助,也希望大家能够通过使用自定义函数提高自己的工作效率。

篇5:python中call内置函数用法实例

作者:MaxOmnis 字体:[增加 减小] 类型:转载

这篇文章主要介绍了python中__call__内置函数用法,实例分析了python中__call__内置函数的原理与使用技巧,需要的朋友可以参考下

本文实例讲述了python中__call__内置函数的用法,分享给大家供大家参考。具体分析如下:

对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2),

模拟函数的对象可以用于创建仿函数(functor) 或代理(proxy)

class DistanceForm(object): def __init__(self, origin): self.origin = origin print “origin :”+str(origin) def __call__(self, x): print “x :”+str(x)p = DistanceForm(100)p(2000)

输出:

>>>origin :100x :2000

希望本文所述对大家的Python程序设计有所帮助。

自定义链接后端数据库数据库教程

Nero自定义制作VCD傻瓜教程

Python回调函数用法实例详解

AutoCAD中自定义填充图案

灵活组织WPS 中的自定义工具栏

理解Python中的类与实例

使用Python的Django框架实现事务交易管理的教程

PYTHON学习札记

Excel中Text 函数应用技巧

Execl中的COUNTIFS函数运用

《Python中自定义函数的教程(精选5篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档