首页 > 开发 > Python > 正文

Python中自定义函数的方法

2023-04-25 12:32:11
字体:
来源:转载
供稿:网友

在程序设计中,函数或类的方法可以实现代码的复用,方便代码的维护和实现模块化编程。

Python中在各个模块中内置了大量的函数可以帮助我们实现很多工作。在实际程序设计中,我们也可以把多次重用的代码以函数的方式在程序多个地方进行调用。这就需要程序提供一种自定义函数的功能。

一、Python中自定义函数的语法

在Python中使用 def 关键字来定义一个函数:

def 函数名称(参数列表):
    函数语句

即一个python函数使用def 来定义,后面紧跟函数的名称。函数的参数放在英文半角的小括号中,Python函数可以有参数,也可以没有参数。在函数体中可以有1到多条语句,但Python的函数体不能没有语句,如果暂时只是定义一个函数名称,想在今后来实现它,可以使用pass语句。要注意Python函数的语法格式中,小括号后面要有一个英文半角的冒号,且函数体要进行缩进,在Python中使用缩进来表示语句的层级关系,读者可以查看本站的文章《编写第一个Python程序》中最后一段的说明。

二、函数的定义与调用

下面举例说明Python中定义函数的方法与调用方法。

def hello():
    print("Hello,武林网VEVB")

def sum(x, y):
    return x + y

hello()  # 调用

# sum函数的参数直接给参数赋值
he = sum(10,20)
print(he)

# sum函数通过变量给参数赋值
a , b = 10, 20
print(sum(a, b))

上面定义了一个无参的函数hello和一个包含两个参数的函数sum。hello()参数的作用是向控制台输出一行字符串。sum()函数的作用是返回两个参数的和。

运行结果

Hello,武林网VEVB
30
30

三、定义带默认值的函数

Python允许给函数的参数定义默认值,当调用函数时,若定义了默认值的参数没有给传值,则使用默认值。

def hello(nickname = '游客'):
    print("您好:", nickname)

#调用时没有给参数,则使用默认值
hello()
#调用时给了参数,则使用参数指定的值
hello('武林网VEVB')

输出结果:

您好: 游客
您好: 武林网VEVB

Python中参数的默认值必须位于所有未指定默认值参数的后边,下面两个函数的定义形式都是错误的:

# 错误的参数默认值,没有默认值的参数不能位于有默认值参数的后面
def sum1(x = 1, y):  
    return x + y

def sum2(x, y = 1, z):
    return x + y + z

上面两个函数的定义会给出如下错误:

non-default argument follows default argument

也就是:非默认值参数位于默认值参数的后面。也就是说在Python中,非默认值参数不能位于有默认值参数的后面

下面的形式是正确的:

def sum1(x, y = 1):
    return x + y

def sum2(x, y, z = 1):
    return x + y + z 

在给带默认值的函数赋值时,传递的参数个数不能少于没有默认值参数的个数,如果函数中有多个默认值,且赋值时只想给某个带默认值的参数赋值时,可以使用 参数名 = 值 的方式进行赋值,如下例所示:

def sum3(w, x, y = 0, z = 0):
    return w + x + y + z

sum = sum3(1, 2, z = 4)
print(sum)

上面这个例子在调用函数时,1 和 2 分别给了参数w和x,z = 4指定参数z的值是4,而y使用默认值0;如果调用时使用 sum3(1, 2, 4),则函数会把1, 2和4分别给了w,x和y,而z使用默认值0.

四、定义一个空函数

空函数指函数本身只有定义,但函数没有具体的语句,什么也不做。由于Python不允许函数体为空的情况出现,所以需要借助pass语句来实现。这与其它语言不一样。

def myfun():
    pass

上面这个例子就定义了一个空函数,当调用这个函数时,函数什么也不会做。这在实际中非常有用,比如有时我们知道程序中需要这个函数来处理一些事情,但具体算法还不清楚时,可以暂时这样定义,等对算法本身有足够认识时再给出函数的具体语句。

五、定义迭代函数

迭代函数指在函数体中调用自身的情况。这在许多算法中都非常有用,下面给出两个例子来说明具体的实现方法:

1、编写一个函数求 n!.

n!= n × (n-1) × (n-2) × ... × 2 × 1 = n × (n-1)!

如:5! = 5×4×3×2×1 = 120

实际上,这可以通过定义迭代函数来实现。

5! = 5×4!4! = 4×3!3! = 3×2!2! = 2×1!1! = 1

也就是说,要求5!,只需求5×4!,这里4!未知,则进一步求4!,以此类推,当推到1!时,1!=1,在一步一步将结果带到上面的式子中,最终可以求出5!,即是一个往下推和回溯的过程。

具体实现代码:

def fac(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * fac(n - 1)

n = 5
res = fac(n)
print(f'{n}! = {res}')

输出结果:

5! = 120

2、求斐波那契数列的第n项的值

关于斐波那契数列,本站在前面有相关介绍,读者可以参照这篇文章《python使用while循环输出斐波那契数列》。

下面这个例子仅给出输出第n项的代码:

def fib(n):
    if n == 0 or n == 1:
        return 1
    else:
        return fib(n - 2) + fib(n - 1)

n = 20
iv = fib(n)
print(f'Fibonacci数列第{n}项的值是{iv}')

输出结果:

Fibonacci数列第20项的值是10946

六、特别说明

 在Python中定义在类中的函数一般称作方法(method),方法在调用时使用如下格式:

对象名.方法名(参数列表)

而非类中定义的才叫做函数(function),他们定义的形式是完全相同的,只不过调用形式有所不同。

本站前面讲的很多字符串函数实际上属于字符串类的方法

Python中自定义函数的方法

本文(完)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表