第十一章 Python 函数设计

本文详细介绍了Python函数设计,包括函数的基本概念、参数设计、返回值处理、递归函数、局部变量与全局变量以及匿名函数的使用。通过实例解析了如何定义函数、传递参数、设置默认值、返回数据及使用lambda函数进行操作。内容涵盖函数的各个方面,是学习Python编程的重要参考资料。
摘要由CSDN通过智能技术生成

第十一章 Python 函数设计

  • 所谓的函数(function)其实就是一系列指令语句所组成,它的目的有两个。
    • 1、当我们在设计一个大型程序时,若是能将这个程序依功能,将其分割成较小的功能,然后依这些较小功能要求撰写函数程序,如此,不仅使程序简单化,最后程序侦错也变得容易,另外撰写大型程序时应该是团队合作,每一个人负责一个小功能,可以缩短程序开发的时间。
    • 2、在一个程序中,也许会发生某些指令被重复书写在许多不同的地方,若是我们能将这些重复的指令撰写成一个函数,需要用时再加以调用,如些,不仅减少编辑程序的时间,更可使程序精简、清析、明了。
  • 当一个程序在调用函数时,Python 会自动跳到被调用的函数上执行工作,执行完后,会回到原先程序执行位置,然后继续执行下一道指令。

11-1 Python 函数基本观念

  • 从前面的学习相信读者已经熟悉使用 Python 内置的函数了,例如,len()、add()、remove() 等,有了这些函数,我们可以随时调用使用,让程序设计变得很简洁,这一章主题将是如何设计这类的函数。
11-1-1 函数的定义
  • 函数的语法格式如下:

    • def 函数名 (参数值1[ , 参数值2 , … ]):

      ‘’’ 函数批注 ‘’’

      程序代码区块

      return [ 返回值1 , 返回值2 , … ]

  • 【函数名称】名称必须是唯一的,程序未来可以调用引用。

  • 【参数值】这是可有可无的,完全视函数设计需要,可以接收调用函数传来的变量,各参数值之间是用逗号 “ , ” 隔开。

  • 【函数批注】这是可有可无的,不过如果是参与大型程序设计计划,当负责一个小程序时,建议所设计的函数需要加上批注,除了自已需要也是方便他人阅读。 主要是注明此函数的功能,由于可能有多行批注所以可以用 3 个双引号(或单引号)包夹。

  • 【return】[ 返回值1,返回值2,… ] 不论是 return 或接续右边的返回值皆是可有可无,如果有返回多个数据彼此需以逗号 “ , ” 隔开。

11-1-2 无参数无返回值的函数
  • 例:第一次设计 Python 函数

    def greeting():
        print("Python 欢迎你")
        print("祝福学习顺利")
        print("谢谢")
        
    #以下的程序代码也可称主程序
    greeting()
    greeting()
    greeting()
    
    #输出结果
    Python 欢迎你
    祝福学习顺利
    谢谢
    Python 欢迎你
    祝福学习顺利
    谢谢
    Python 欢迎你
    祝福学习顺利
    谢谢
    
  • 在程序设计的观念中,有时候我们也可以将第 6 行以后的程序代码称主程序。读者可以想想看,如果没有函数功能我们的程序设计如下所示

    print("Python 欢迎你")
    print("祝福学习顺利")
    print("谢谢")
    print("Python 欢迎你")
    print("祝福学习顺利")
    print("谢谢")
    print("Python 欢迎你")
    print("祝福学习顺利")
    print("谢谢")
    
  • 上述程序虽然也可以完成工作,但是可以发现重复的语句子太多了,这不是一个好的设计,同时如果要将 “ Python 欢迎你 ” 改成 “ Python 欢迎你们 ”,程序必须改5次相同的语句。经以上讲解读者应可以了解函数对程序设计的好处了吧!

11-1-3 在 Python Shell 执行函数
  • 当程序执行完时,在 Python Shell 窗口可以看到执行结果,此时我们也可以在 Python 提示信息直接输入程序所建的函数启动与执行,下列是在 Python 提示信息输入 greeting() 函数的实例

    greeting()
    
    #输出结果
    Python 欢迎你
    祝福学习顺利
    谢谢
    

11-2 函数的参数设计

  • 11-1 节的程序实例没有传递任何参数,在真实的函数设计与应用中大多是需要传递一些参数的,例如,在前面章节当我们调用 Python 内置函数时,如 len()、print() 等,皆需要输入参数,接下来将讲解这方面的应用与设计。
11-2-1 传递一个参数
  • 例:函数内有参数的应用

    def greeting(name):
        """Python 函数需传递名字 name """
        print("嗨,",name,"早上好")
        
    greeting("张三")
    
    #输出结果
    嗨, 张三 早上好
    
  • 上述执行时,第 5 行调用函数 greeing() 时,所放的参数是 “ 张三 ”,这个字符串将传给函数括号内的 name 参数,所以程序第 3 行会将 “ 张三 ” 字符串透过 name 参数打印出来。

  • 在 Python 应用中,有时候也常会将第 3 行写成下列语法,执行结果是相同的

  • 特别留意由于我们可以在 Python Shell 环境调用函数,所以在设计与使用者交流的程序时,也可以先省略 3 行调用,让调用留到 Python 提示信息环境。

  • 例:程序设计时不做调用,在 Python 提示信息环境调用。

    def greeting(name):
        """Python 函数需传递名字 name """
        print("嗨,",name,"早上好")
    #注:上面程序先保存不调用
    
    #在 Python 提示信息环境调用
    greeting("张三")
    greeting("李四")
    
    #输出结果
    嗨, 张三 早上好
    嗨, 李四 早上好
    
11-2-2 多个参数传递
  • 当所设计的函数要传递多个参数,调用些函数时就需要特别留意传递的位置需要正确,最后才可以获得正确的结果。最常见的传递参数是数值或字符串数据,有时也会需要传递列表、元组或字典。

  • 例:设计减法的函数 subtact(),第一个参数会减去第二个参数,然后列出执行结果。

    def subtaract(x1,x2):
        '''减去设计'''
        result = x1 - x2
        print(result)
    print("本程序会执行 a - b 的运算")
    
    a = int(input("a = "))
    b = int(input("b = "))
    print("a - b = ",end="")
    subtaract(a,b)
    
    #输出结果
    本程序会执行 a - b 的运算
    a = 10
    b = 5
    a - b = 5
    
  • 上述函数功能是减法运算,所以需要传递 2 个参数,然后执行第一个数值减去第 2 个数值,调用这类的函数时,就必须留意参数的位置,否则会有错误信息产生。对于上述程序而言,变量 a 和 b 皆是从屏幕输入,执行第 10 行调用 subtaract() 函数时,a 将传给 x1,b 将传给 x2。

  • 例:这也是一个需传递 2 个参数的实例,第一个是兴趣(interest),第二个是主题(subject)

    def interest(interest_type,subject):
        '''显示兴趣和主题'''
        print("我的兴趣是" + interest_type)
        print("在" + interest_type + "中,最喜欢的是" + subject)
        print()
        
    interest("旅游",'敦煌')
    interest("程序设计",'Python')
    
    #输出结果
    我的兴趣是旅游
    在旅游中,最喜欢的是敦煌
    
    我的兴趣是程序设计
    在程序设计中,最喜欢的是Python
    
  • 上述程序第 7 行调用 interest() 时,“ 旅游 ” 会传给 interest_type、“ 敦煌 ” 会传给 subject,第 8 行调用 interest() 时,“ 程序设计 " 会传给 interest_type 、” Python “ 会传给 subject ,对于上述的实例,相信读者应该了解调用需要传递多个参数的函数时,所传递参数的位置很重要否则会有不可预期的错误。如下列所示

    def interest(interest_type,subject):
        '''显示兴趣和主题'''
        print("我的兴趣是" + interest_type)
        print("在" + interest_type + "中,最喜欢的是" + subject)
        print()
        
    interest('敦煌',"旅游")
    
    #输出结果
    我的兴趣是敦煌
    在敦煌中,最喜欢的是旅游
    
11-2-3 关键词参数 参数名称 = 值
  • 所谓的关键词参数是指调用函数时,参数是用 ” 参数名称=值 “ 配对方式呈现,Python 也允许在调用需传递多个参数的函数时,直接将 ” 参数名称 = 值 “ 配对方式传送,这个时假参数的值置就不重要了。

  • 例:

    def interest(interest_type,subject):
        '''显示兴趣和主题'''
        print("我的兴趣是" + interest_type)
        print("在" + interest_type + "中,最喜欢的是" + subject)
        print()
        
    interest(interest_type = "旅游",subject = "敦煌")
    interest(subject = "敦煌" , interest_type = "旅游")
    
    #输出结果
    我的兴趣是旅游
    在旅游中,最喜欢的是敦煌
    
    我的兴趣是旅游
    在旅游中,最喜欢的是敦煌
    
  • 当调用函数用配对方式传送参数时,即使参数值置错误,程序执行结果也会相同,因为在调用时已经明确指出所传递的值是要给哪一个参数了。

11-2-4 参数默认值的处理
  • 在设计函数时也可以给参数默认值,如果调用这个函数没有给参数值,函数的默认值将派上用场。特别需要留意:函数设计时含有默认值的参数,必须放置在参数列的最右边。请参考下列程序第 1 行,如果将 ” subject= ’ 敦煌 ‘ “ 与 ” interest_type “ 值置对调,程序会有错误产生。

  • 例:程序用不同方式调用,读者可以从中体会程序参数默认值的意义。

    def interest(interest_type,subject = '敦煌'):
        '''显示兴趣和主题'''
        print("我的兴趣是" + interest_type)
        print("在" + interest_type + "中,最喜欢的是" + subject)
        print()
        
    interest("旅游") 
    interest(interest_type = "旅游")
    interest("旅游",'张家界')
    interest(interest_type = "旅游",subject = '张家界')
    interest(subject = '张家界',interest_type = "旅游")
    interest("阅读",'旅游类')
    
    #输出结果
    我的兴趣是旅游
    在旅游中,最喜欢的是敦煌
    
    我的兴趣是旅游
    在旅游中,最喜欢的是敦煌
    
    我的兴趣是旅游
    在旅游中,最喜欢的是张家界
    
    我的兴趣是旅游
    在旅游中,最喜欢的是张家界
    
    我的兴趣是旅游
    在旅游中,最喜欢的是张家界
    
    我的兴趣是阅读
    在阅读中,最喜欢的是旅游类
    
  • 上述程序第 7 行和 8 行只传递一个参数,所以 subject 就会使用默认值 “ 敦煌 ”,第 10、11和 11 行传送了 2 个参数,其中第 10 和 11 行笔者用 “ 参数名称 = 值 ” 用配对方式调用传送,可以获得一样的结果。第 13 行主要说明使用不同类的参数一样可以攻得正确语意的结果。

11-3 函数返回值

  • 在前面的章节实例我们有执行调用许多内置的函数,有时会返回一些意义的数据,例如:len() 返回元素数量。有些没有返回值,此时 Python 会自动返回 None,例如:clear()。为何会如此?本节会完整解说函数返回值的知识。
11-3-1 返回 None
  • 前 2 个小节所设计的函数全部没有 “ return [ 返回值 ] ”,Python 在直译时会自动返回处理成 “ return None ”,相当于返回 None。在一些程序语言,例如,C 语言这个 None 就是 NULL,None 在 Python 中独立成为一个数据类型 NoneType,下列是实例观察。

  • 例:这个程序并没有做返回值设计,不过笔者将列出 Python 返回 greeting() 函数的数据是否是 None,同时列出返回值的数据类型。

    ef greeting(name):
        """Python 函数需传递名字 name """
        print("嗨,",name,"早上好")
    ret_value = greeting(
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值