2.1- python函数详解

函数是程序中的一个重要的部分,在python中已经定义了一些函数,例如计算平方根的函数sqrt,程序中也可以自定义函数,这里主要说的自定义函数。

1、函数定义
定义函数的语法如下:

def 函数名称(参数1,参数2,...):
    函数体

函数名称是用户自定义名称,与变量的命名规则相同,用字母开始,后面跟字母或数字等。
函数可以有很多参数,每一个参数都有一个名称,他们是函数的变量,不同的变量对应的函数值不同,这是函数的本质所在,这些参数称为函数的形式参数
函数体是函数的程序代码,保持缩进。
函数被设计为完成某一个功能的一段程序代码或模块,python把一个问题划分成多个模块,分别对应一个个的函数。

2、函数参数
在调用函数时,形式参数规定了函数需要的数据个数,实际参数必须在数目上与形式参数一样,一般规则是:
<1> 形式参数是函数的内部变量,有名称。形式参数出现在函数定义中,在整个函数体内都可以使用,离开函数则无效
<2> 实际参数的个数必须与形式参数一致,实际参数可以是变量、常数、表达式,甚至可以是一个函数
<3> 当实际参数是变量时,它不一定要与形式参数同名,实际参数变量与形式参数变量是不同的内存变量,它们其中一个值的变化不会影响到另外一个变量
<4> 函数调用中发生的数据传递是单向的,即只能把实参的值传递给形参,不能反向传递,因此在函数调用时,形式参数的值发生改变,而实参的值不会变化
<5> 函数可以没有参数,但圆括号不能缺少

3、函数返回值
函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。一般函数计算后总会有一个返回值,通过函数内部的 return语句来获取这个返回值,格式如下:

return 表达式;

return 返回一个数据类型与函数返回类型一致的表达式,该表达式的值就是函数的返回值。
return执行后函数就结束了,即便下面还有其他语句也不再执行。

例如:

def fun(x):
    print(x)
    if x<0:
        return
    print(x*x)
    
x=-2
fun(x)    

x=4
fun(x)

执行结果如下:

-2
4
16

执行结果解读:
x=-2 ,x<0成立后执行return语句,返回结束返回,后面的 print(xx) 不再执行。
x=4,函数一直执行到 print(x
x)后结束。

return语句只要一执行函数就结束并且返回,无论return处于什么位置,哪怕是在一个循环中

4、无返回值函数
函数也可以没有返回值,这时python默认值是None,例如下面函数:

def hello():
    print("hello")
    
hello()    

没有返回类型的函数中也可以有return语句,但return后面不能有任何表达式,例如:

def fun(x):
    if(x<0):
        return
    print(x)
    
x=-2
fun(x)    

5、函数调用
调用自定义函数就像调用python语句内部函数一样。
有返回值的函数可以放在任何一个表达式中去计算,也可作为单独一条语句执行。
没有返回值的函数不能用在任何一个表达式中去参与计算,只能作为一条单独语句执行。

python中定义,函数必须先定义再调用,在函数调用时编译器必须预先知道该函数的参数构造,不然会编译错误。

案例一:计算两个整数的较大值
程序如下:

def nax(a,b):
    max=a
    if b>a:
        max=b
    return max

max=max(2,5)
print(max)    

案例二:输入3个整数,找出最大值

def max(a,b,c):
    # 找出a b 的较大值d与c比较
    d=a
    if b>a:
        d=b
    max=d    
    if c>b:
        max=c
    return max

print(max(1,5,6))   

在Python 语言中,所有的函数定义,包括主函数主程序在内,都是平行的。
函数之间允许相互调用,也允许嵌套调用。
习惯上把调用者称为主调函数。

程序的执行总是从主程序函数开始,完成对其它函数的调用后再返回到主程序函数,最后由主程序函数结束整个程序。

嵌套调用就是一个函数调用另外一个函数,被调用的函数又进一步调用另外一个函数,形成一层层的嵌套关系,一个复杂的程序存在多层的函数调用。

案例三:输入整数n,计算 1+(1+2)+(1+2+3)+…+(1+2+3+…+m)的和
案例分析:第m项是 (1+2+3+…+m),设计一个函数计算(1+2+3+…+m)的和,函数为sum(m),之后累计sum(1)+sum(2)+…+sum(m),程序如下:

 def sum(m):
    s=0
    for n in range(1,m+1):
        s=s+n
    return s

def sumall(n):
    s=0
    for m in range(1,n+1):
        s=s+sum(m)
    return s

n=input("enter n:")
n=int(n)
print("总和是:",sumall(n))

6、函数默认参数
在python语句中定义函数时可以预先为部分参数设置默认值,这样的好处是实际调用时可以不提供该参数的实际值,该参数使用默认值。

函数默认参数就是在函数定义时为一些参数预先设定一个值,在调用时如果不提供这个参数的实际值就使用默认的参数值。
例如:

def fun(a,b=1,c=2):
    print(a,b,c)
    
fun(0) # a=0,b,c 使用默认值
fun(1,2) # a=1,b=2,c使用默认值
fun(1,2,3)   # a=1,b=2, c=3 

程序执行结果如下:

0 1 2
1 2 2
1 2 3

函数调用时实际参数值按照顺序给函数参数的,也可以指定参数名称而不按照顺序进行调用
fun(a,b=1,c=2) 中我们把 a 称为位置参数,b,c称为键值参数。

# 参数按名称指定
def fun(a,b=1,c=2):
    print(a,b,c)
    
fun(0,c=4,b=2)
fun(0,c=4)
fun(b=2,a=1,c=4)
fun(a=0,c=4,b=2)
fun(c=1,b=3,a=2) 

Python 规定默认的键值参数必须出现在函数中没有默认值的位置参数的后面,例如下面函数是正确的:
def fun(a,b=1,c=2):
print(a,b,c)
但是下列函数是错误的:
def fun(a=0,b,c=2):
print(a,b,c)
因为键值参数a=0 出现在位置参数b 的前面。
不但在定义函数时要求键值参数出现在位置参数的后面,在调用时也要求键值参数在位置参数的后面,例如:
def fun(a,b=1,c=2):
print(a,b,c)
那么调用:
fun(a=0,1,c=2)
是错误的,因为"a=0"是键值参数,它出现在位置参数"1"的前面,但是下列调用时正确的:
fun(0)
fun(0,1)
fun(0,c=3)
fun(a=0)
一般来说实际的位置参数值可以赋值给函数的位置参数和键值参数,例如:
fun(0,1)
实际的键值参数也可以赋值给函数的位置参数与键值参数,例如:
fun(a=0,c=3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值