python⾃定义函数的关键字_Python中⾃定义函数的⽅法在程序设计中,函数或类的⽅法可以实现代码的复⽤,⽅便代码的维护和实现模块化编程。
Python中在各个模块中内置了⼤量的函数可以帮助我们实现很多⼯作。在实际程序设计中,我们也可以把多次重⽤的代码以函数的⽅式在程序多个地⽅进⾏调⽤。这就需要程序提供⼀种⾃定义函数的功能。
⼀、Python中⾃定义函数的语法
在Python中使⽤ def 关键字来定义⼀个函数:
def
函数名称(参数列表): 函数语句
即⼀个python函数使⽤def 来定义,后⾯紧跟函数的名称。函数的参数放在英⽂半⾓的⼩括号中,Python函数可以有参数,也可以没有参数。在函数体中可以有1到多条语句,但Python的函数体不能没有语句,如果暂时只是定义⼀个函数名称,想在今后来实现它,可以使⽤pass语句。要注意Python函数的语法格式中,⼩括号后⾯要有⼀个英⽂半⾓的冒号,且函数体要进⾏缩进,在Python中使⽤缩进来表⽰语句的层级关系,读者可以查看本站的⽂章《编写第⼀个Python程序》中最后⼀段的说明。
⼆、函数的定义与调⽤
下⾯举例说明Python中定义函数的⽅法与调⽤⽅法。
def hello():
python新手函数print("Hello,翔宇亭IT乐园")
defsum(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,翔宇亭IT乐园
30
30
三、定义带默认值的函数
Python允许给函数的参数定义默认值,当调⽤函数时,若定义了默认值的参数没有给传值,则使⽤默认值。
def hello(nickname = '游客'):
print("您好:", nickname)
#调⽤时没有给参数,则使⽤默认值
hello()
#调⽤时给了参数,则使⽤参数指定的值
hello('翔宇亭IT乐园')
输出结果:
您好: 游客
您好: 翔宇亭IT乐园
在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),他们定义的形式是完全相同的,只不过调⽤形式有所不同。本站前⾯讲的很多字符串函数实际上属于字符串类的⽅法。
本⽂(完)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论