首页 > 编程笔记

Python定义函数(def关键字)

Python 利用 def 关键字自定义一个函数,自定义的函数可以根据个人的需求自行设计。本文我们介绍自定义函数的使用方法。

Python自定义函数

自定义函数是指由用户自行编写的函数,定义该函数后才能调用它。

定义函数是函数架构中最重要的部分,它定义了一个函数的内部流程运作,包括接收什么参数、进行哪种处理、处理完成后返回哪些数据等。

定义函数时先使用关键字 def,接着写函数名称,后面小括号内可以填写要传入函数的参数,小括号之后再加上“:”,格式如下所示。

def 函数名称(参数1, 参数2, …):
    程序代码块
    return 返回值  #有返回值时才需要

函数名称的命名必须遵守 Python 标识符名称的规范。

另外,自定义函数中的参数可有可无,也可以有多个。冒号“:”之后则是函数主体,函数的程序代码内容可以是单行或多行语句,并统一进行缩进(一次缩进 4 个半角的空格)。

return 语句可以返回值给调用函数的主程序,返回值也可以有多个,如果函数没有返回任何数值,则可以省略 return 语句。

定义完函数后,函数并不会主动执行,只有在调用该函数时才会开始执行,调用自定义函数的语法格式如下所示。

函数名称(参数1, 参数2, …)


下面我们将定义一个名为 blessings() 的简单函数,该函数会输出一行字符,程序代码如下:
def blessings():
    print('http://www.weixueyuan.net/')
blessings()
输出结果:

http://www.weixueyuan.net/


下面在函数中增加一个参数,动态指定函数要输出的字符串,程序代码如下:
def blessings(str1):
    print(str1)
blessings('魏雪原')
blessings('http://www.weixueyuan.net/')
输出结果:

魏雪原
http://www.weixueyuan.net/


接下来要介绍的自定义函数带有返回值,例如,函数会返回所传入参数相乘后的结果,程序代码如下:
def func(a,b):
    x = a * b
    return x
print(func(4,3))
输出结果:

12


读者可以修改上述程序代码,将输出的语句写在函数内,并取消原先的返回语句,该函数则会返回 None,程序代码如下:
def func(a,b):
    x = a * b
    print(x)
print(func(4,3))
输出结果:

12
None


在自定义函数时,也可以给小括号内的参数默认初始值,调用函数时,如果实参值未传递,则会默认“参数=初始值”,例如下面的程序代码:
def func(a,b,c=10):
    x = a - b + c
    return x
print(func(3,1,3)) # a=3,b=1,c=3
print(func(5,2))  # a=5,b=2,c=10
输出结果:

5
13

上面 func() 函数里的参数 c 默认的初始值为 10,因此调用函数时就可以只输入两个数值。

另外 Python 的函数也可以一次返回多个值,所有返回的多个值之间以逗号“,”分隔,例如下面的程序代码:
def func(a,b):
    p1 = a * b
    p2 = a - b
    return p1, p2

num1 ,num2 = func(5, 4)
print(num1) 
print(num2)
输出结果:

20
1


我们再来看一个例子,要求函数一次返回 3 个值,程序代码如下:
def func(length,width,height):
    p1 = length*width*height
    p2 = length+width+height
    p3 = (length*width+height*length+width*height)*2
    return p1, p2, p3

num1 ,num2, num3 = func(5, 4, 3)
print(num1) 
print(num2)
print(num3)
输出结果:

60
12
94

Python自定义函数应用示例

如果用户事先不知道调用函数时要传入参数的个数,这种情况下可以在定义函数时,在参数前面加上一个星号“*”,表示该参数可以接收不定个数的实参,而所传入的实参会被视为一个元组;但是在自定义函数时在参数前面加上两个星号“**”,传入的实参会被视为一个字典。

【示例1】调用函数的过程中传入不定个数的实参。Python 代码如下:
def factorial(*arg):
    product=1
    for n in arg:
        product *= n
    return product

ans1=factorial(5)
print(ans1)
ans2=factorial(5,4)
print('5*4=',ans2)
ans3=factorial(5,4,3)
print('5*4*3=',ans3)
ans4=factorial(5,4,3,2)
print('5*4*3*2=',ans4)

def myfruit(**arg):
    return arg

print(myfruit(d1='apple', d2='mango', d3='grape'))
输出结果:

5
5*4= 20
5*4*3= 60
5*4*3*2= 120
{'d1': 'apple', 'd2': 'mango', 'd3': 'grape'}

程序解说:

【示例2】自定义业务奖金计算函数,让用户输入产品单价及销售数量计算总销售业绩,然后将总销售业绩乘上 35% 计算出应得奖金。Python 代码如下:
def payment():
    price = float(input("产品单价:"))
    num = float(input("销售数量:"))
    rate = 0.35  #奖金所占的百分比
    total = price*num * rate
    return price*num, total

e1 ,e2 = payment()
print("总销售业绩{},应得奖金:{}".format(e1, e2))
输出结果:

产品单价:500
销售数量:10
总销售业绩5000.0,应得奖金:1750.0

程序解说:
【示例3】定义输入两数 x、y 并计算 xy 值的函数 pow(),求一个数的指数次方值。Python 代码如下:
#参数:x 为底数      
#y 为指数      
#返回值:指数运算结果
def Pow(x,y):
    p=1
    for i in range(y):
        p *= x
    return p
print("请输入两个整数进行指数运算(如2 3):")
x,y=input().split()
print('x=',x)
print('y=',y)
print("指数运算结果: %d" %Pow(int(x), int(y)))
输出结果:

请输入两个整数进行指数运算(如2 3):
3 4
x= 3
y= 4
指数运算结果: 81

程序解说:

优秀文章