《0基础》学会Python——第九讲

 函数

一、函数的定义:

         指在程序中创建一个独立的代码块,用于完成特定的任务或执行特定的操作。函数通常接收输入参数,并返回输出结果。通过定义函数,可以将复杂的程序分解成更小的模块,提高代码的可读性和可维护性。

        

二、函数的定义规则

        1、函数代码块以 def 关键词开头,后接函数名称圆括号 ()

        2、如果需要传入参数(变量),可在圆括号内定义

        3、函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明

        4、函数内容以冒号 : 起始,并且缩进

        5、可选择性地使用return返回一个值给调用方,不 return 相当于返回 None

        6、在Python中不需要定义返回值类型,可自动推断

其中
         函数名:函数的标识符,用于调用和引用函数。
        参数列表:函数可以接收多个参数,参数用于传递数据给函数。参数可以有默认值,也可以是必需的。
         函数体:函数的具体实现代码,包括变量定义、流程控制语句、循环语句等。
         返回值:函数可以返回一个或多个结果。返回值可以是各种类型的数据,如整数、浮点数、字符串等。

    def 是定义函数的关键字,后面是函数名和参数列表,然后是冒号和缩进的函数体。return 语句用于返回结果,可以省略,如果没有返回值,则函数默认返回 None

               函数定义后,可以通过函数名来调用函数,并传递相应的参数。调用函数会执行函数体中的代码,将返回结果返回给调用处。

        例如:计算圆的面积

        1、首先要知道圆的面积公式S=pi*r*r,当知道半径r的值时,就可以根据公式计算出面积,假设需要计算3个不同大小的圆的面积:

2、当代码出现有规律的重复的时候,就需要 注意了
        每次写3.14 * x * x不仅很麻烦 而且如果要把3.14改成3.1415926535的时候, 三个面积计算表达式得全部替换,
        假定有一个函数名为area_of_circle,可以基于半径计算面积, 可一 不再每次 写s = 3.14 * x * x,而是写成更有意义的函数调用 方式 s = area_of_circle (x), 而函数area_of_circle本身只需要写一次,就可以 多次调用 ,如果需要修改,只需修改函数本身,调用不需要改动.
例如:
PI=3.1415  #常量在def的上部分定义
def area_of_circle(r):   #r为函数的必选参数
    S=PI * r * r
    return S

if __name__ == '__main__':
    s1=area_of_circle(4) #调用函数名,括号内写入参数
    s2=area_of_circle(5)
    s3=area_of_circle(6)
    print(s1,s2,s3)

        即当直接填入参数即可获取圆的面积,并且最好在定义函数的上部分定义常量。

        

        3、函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段

        4、函数能提高应用的模块性,和代码的重复利用率

        5、Python提供了许多内建函数,比如print()type()、类型转换函数等等

        6、用户也可以自己创建函数,这被叫做用户自定义函数

三、函数的参数 (必选参数、默认参数可变参数、关键字参数命名关键字参数)

              定义函数的时候,需要把参数的名字位置确定下来,函数的接口定义就完成了,对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,除定义的必选参数外,还可使用默认参数可变参数、关键字参数命名关键字参数,且必须按照以上的前后顺序填入def定义的函数后的括号内。

        1、必选参数

        又名位置参数,调用函数时必须按顺序提供,不多不少

         例如:定义一个函数用于计算 x 的平方
   
        
对于 power 函数来说, x 就是一个位置参数
当调用函数时,必须传入有且仅有的一个参数x

 

        2、默认参数

        假如现在又要计算 x^ 3怎么办?可以再定义一个power函数,但是如果要计算x ^ 4、x ^ 5…… 怎么办?不可能定义无限多个函数 ,那可以把power(x)修改为power(x, n),再结合 while 循环用来计算x ^ n,代码如下
def power(x,n):   #其中x为必选参数,n为默认参数
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
if __name__ == '__main__':
    print(power(5, 2)) 

也可以这么写:

def power(x,n=3):
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
if __name__ == '__main__':
    print(power(5, 2))

其结果同上,但是如果在最后一条代码中没有给出2,直接写的print(power(5)),那么打印结果就是5的3次方了。

        3、可变参数(用*号+参数表示)

         在Python函数中,还可以定义可变参数,顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个假设给定一组数字a,b,c……,需要定义函数计算a^ 2 + b ^ 2 + c ^2 + ……由于参数个数不确定,可a,b,c……作为一个list或tuple传进来。
无可变参数的代码:
def calc(lt):
    summ=0
    for i in lt:
        summ=summ+i**2
    return summ

if __name__ == '__main__':
    print(calc([1, 2, 3, 4]))

        有可变参数的代码:

def calc(*lt):
    summ=0
    for i in lt:
        summ=summ+i**2
    return summ

if __name__ == '__main__':
    calc(1,2,3,4)
    print(calc(1,2,3,4))

二者看起来相差不大,但是在使用的时候不用再定义列表、元组等数据类型,直接输入可变参数的多组数据即可使用。

        4、关键字参数(两个*号+参数名, 一般传入时需要带入参数名称 以字典的形式接收)

        可变参数允许传入0个或任意个参数,可变参数在函数调用时自动组装为一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,示例如下:

def person(name,gender,age,*args,**kwargs):

    return name,gender,age,args,kwargs
if __name__ == '__main__':
    print(person('小美', 'man', '18', 10, 20,heigh=180, weight=70))

       其中*arg是可变参数,其输入的值为10和20,以元组的形式输出,**kwargs是关键字参数,以字典的形式输出

        5、命名关键字参数

        函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查

        命名关键字参数函数调用方式如下:

        以person()函数为例,希望检查是否有city和job参数,则需要手动判断:

        命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错

        如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:  

        

        和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数

        如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

        6、参数组合

        在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用

        注意参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

例如:

def person(name,gender,age,*args,job,city,**kwargs):
    return name,gender,age,args,kwargs,job,city

if __name__ == '__main__':
    print(person('小美', 'man', '18', 10, 20,heigh=180, weight=70,job='AI',city='Hefei'))

其输出结果为:

四、递归函数

        函数内部可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数。

        递归函数需要满足两个条件:自己调用自己有停止条件

   

        例如:

        计算n的阶乘,即n! = n * ( n - 1 ) * ( n - 2 ) * ( n - 3 ) *......* 3 * 2 * 1,通过循环实现代码逻辑稍微复杂,该需求可使用递归函数

def jiech(n):
    if n==1:
        return 1
    return n*jiech(n-1)

if __name__ == '__main__':
    print(jiech(10))

        即当需要打印10 的阶乘时,第一步运行到 return n*jiech(n-1)这一步,然后返回jieba(n-1),然后继续调用函数,继续从头再来计算从9开始的阶乘,以此类推,直到运行到1的阶乘时返回1,然后再把通过    return n*jiech(n-1)的值全部返回到def jiech(n),然后就能打印出来了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值