【python学习】Python中的函数

mac2026-09-20  10

感谢廖雪峰老师提供了自学python很好的平台,以下内容仅作个人学习记录使用,侵删。 附上链接: 廖雪峰的官方网站.

python中的函数

函数的调用函数的定义定义函数空函数参数检查返回多个值 函数的参数参数传入默认参数可变参数 递归函数

函数的调用

Python中提供了很多内置的函数,我们知道函数的名称和参数之后可以直接调用。如果不了解使用方法,也可以通过help()函数来查看该函数的帮助信息。

函数的定义

定义函数

函数定义的语法如下:

def FunctionName (paras): Body of Function

例如,定义一个求从a到b的整数和的函数:

def FindTheSum(sta,end): sum = 0 for i in range(sta,end+1): sum += i print('The sum is',sum) return sum

空函数

定义一个空函数,可以使用pass语句,pass语句表示什么都不做,可以作为一个占位符。

空函数: def nop(): pass 条件判断中: if age >= 18: pass

参数检查

我们在定义函数的时候,并没有像其他语言一样指定参数的类型,但是在调用时候往往会出现参数类型不匹配的情况,这就需要我们在函数内部手动对传入参数的类型做检查,比如下面的例子只允许整数和浮点型类型的参数传入:

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

这样定义之后,如果传入了错误的参数类型,函数就会抛出一个错误:

返回多个值

当使用Python函数返回多个值的时候,实际上是返回了一个tuple,然后按照位置赋值给对应的值。

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

函数的参数

参数传入

再调用函数时,函数的参数列表中的值按照所在位置顺序依次赋值给对应的参数。

默认参数

在函数定义时,为其中的某些参数设置默认值,这样如果没有对其赋值的话,则会自动取其默认值:

def move(x, y, step=0, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny x, y = move(100, 100, 60, 0) x1, y1 = move(100,100)

注意:

必选参数要在前面,默认参数再后面。关于默认参数的设置,可以把变化大的参数放在前面,变化小的参数放在后面,这样就可以为那些变化不大的参数设定默认值。这样做可以有效地降低调用函数的难度。在调用的时候也可以不按照顺序提供其中一部分默认函数: def test(a, b, c=0, d=0): pass test(1,2) test(1,2,3,4) test(1,2,d=4) 默认参数必须指向一个不变的对象。 对于下面的函数,默认参数是一个空的list,在函数定义的时候,默认参数l的值就已经被计算出来了,是个一个[],因此默认参数是指向这个变量[]的一个对象。 如果调用的时候传入了参数,则会在传入的list后面添加一个字符a,与默认参数的对象无关; 如果调用的时候使用了默认参数,则第一次调用的时候就会将l原本指向的空list,运行完这个函数之后,会在这个默认参数的后面加上一个字符a,也就是说此时默认参数的内容已经被改变了。下一次再使用默认参数进行调用的时候,这个参数就仿佛具有记忆性了一样,会在上次运行的基础上加上一个a,因此会得到我们不想要的结果。 因此必须要让默认参数指向不变的一个对象。将上面的例子修改成:

可变参数

如果我们传入的参数的数量未定,少的话可以设置几个默认参数,但是多的话用默认参数就不是很方便。因此我们可以将输入的参数改为是一个tuple或者是list这种形式,但是这就要求在传入参数的时候将输入数据提前转换成目标的形式。

def CalcSum(numbers): if not isinstance(numbers,(list,tuple)): return 0 sum = 0 for n in numbers: sum += n return sum CalcSum([1,7,3,8]) CalcSum([1,6,8,4]) CalcSum(2)

递归函数

最新回复(0)