zoukankan      html  css  js  c++  java
  • 【2020Python修炼记15】Python语法入门—函数的基本使用

    【目录】

    一、什么是函数

    二、为何要有函数

    三、如何使用函数

    (一)定义函数

    (二)调用函数

    (三)函数返回值

    一、什么是函数

    为了方便重复使用某些需要的代码功能,因此创造了很多代码工具,给它们命名为‘函数’。 

    在程序中,具备某一功能的‘工具’——函数

                      ‘事先准备工具’的过程——函数的定义

                      ‘拿来就用’——函数的调用

     

    函数的分类:

    #1、内置函数
    为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数,即内置函数。

    对于内置函数,我们可以拿来就用而无需事先定义,如 len(),sum(),max()

    #2、自定义函数
    很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,

    以后,在遇到应用场景时,调用自定义的函数即可。

    二、为何要有函数

    为了解决以下程序代码问题:

    #1、代码的组织结构不清晰,可读性差

    #2、遇到重复的功能只能重复编写实现代码,代码冗余

    #3、功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大

    三、如何使用函数

    函数的使用分为定义阶段调用阶段,

    定义函数时只检测语法,不执行函数体代码,

    函数名加括号即函数调用,只有调用函数时才会执行函数体代码

    定义函数发生的事情

    1、申请内存空间保存函数体代码

    2、将上述内存地址绑定函数名

    3、定义函数不会执行函数体代码,但是会检测函数体语法

    调用函数发生的事情

    1、通过函数名找到函数的内存地址——print(func)

    2、然后加括号就是在触发函数体代码的执行 ——func()

    (一)定义函数——三种方式

    函数的使用必须遵循’先定义,后调用’的原则。

    函数的定义就相当于 事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的。没有事先定义函数而直接调用,就相当于在引用一个不存在的’变量名’。

    def 函数名(参数1,参数2,...):
        """文档描述"""
        函数体
        return
    •  def: 定义函数的关键字;
    • 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
    • 括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
    • 冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
    • """文档描述"""  描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
    • 函数体:由语句和:达式组成;
    • return 值:定义函数的返回值,return是可有可无的。

    1、方式一:无参函数

     # 示范1——先定义函数,后调用函数

    def bar(): #定义函数 bar(), bar=函数的内存地址
        print('from bar')
    
    def foo():
        # print(bar) # 输出的是函数的内存地址 <function bar at 0x0000021D5885A0D0>
        bar() #调用函数bar()
        print('from foo')
    
    foo() #调用函数foo()

     # 示范2——定义函数的部分,放在调用语句之后,但是在调用函数执行之前

    def foo():
        bar() #此处还未调用函数bar(),只是判断是否有语法错误
        print('from foo')
    # 定义函数 bar()
    def bar():  # bar=函数的内存地址
        print('from bar')
    
    foo() #调用函数bar()

    # 示范3———定义函数的部分,放在调用语句之后,且在调用函数执行之后,此时会出错哦

    def foo():
        # print(bar)
        bar()
        print('from foo')
    
    foo()
    
    def bar():  # bar=函数的内存地址
        print('from bar')
        
    
    NameError: name 'bar' is not defined


    2、方式二:有参函数——参数是函数的调用者向函数体传值的媒介

    函数——工厂

    参数——原材料

    返回值——产品

    def my_min(x,y):
        res=x if x < y else y
        return res

    3、方式三:空函数——函数体代码为 pass,代表什么都不做

    定义空函数通常是有用的,因为在程序设计的开始,往往是先想好程序都需要完成什么功能,

    然后把所有功能都列举出来用pass充当函数体“占位符”,这将使得程序的体系结构立见,清晰且可读性强。

    之后我们便可以统筹安排编程任务,有选择性的去实现函数体功能来替换掉pass,从而提高开发效率。

    栗子】:编写一个ftp程序,我们可能想到的功能有用户认证,下载,上传,浏览,切换目录等功能,可以先做出如下定义,再有选择性地实现函数体代码——

               

    def auth_user():
        """user authentication function"""
        pass
    
    def download_file():
        """download file function"""
        pass
    
    def upload_file():
        """upload file function"""
        pass
    
    def ls():
        """list contents function"""
        pass
    
    def cd():
        """change directory"""
        pass

    4、三种定义函数方式的使用场景:

    (1)无参函数

    def interactive():
        name=input('username>>: ')
        age=input('age>>: ')
        gender=input('gender>>: ')
        msg='名字:{} 年龄:{} 性别'.format(name,age,gender)
        print(msg)
    
    interactive()
    interactive()
    interactive()
    interactive()

    (2)有参函数

    def add(x,y): # 参数-》原材料
        # x=20
        # y=30
        res=x + y
        # print(res)
        return res # 返回值-》产品
    
    # add(10,2)
    res=add(20,30)
    print(res)

    (3)空函数

    参考上一小节内容中的【栗子】——编写一个ftp程序 

    (二)调用函数——

    按照在程序出现的形式和位置,可将函数的调用形式分为三种:

    1、语句的形式:只加括号调用函数

    interactive()
    add(1,2)

    2、表达式形式

    def add(x,y): # 参数-》原材料
        res=x + y
        return res # 返回值-》产品
    赋值表达式
    res=add(1,2)
    print(res)
    数学表达式
    res=add(1,2)*10
    print(res)

    3、函数调用可以当做参数

    res=add(add(1,2),10)
    print(res)

    (三)函数返回值

    1、return

    #若需要将函数体代码执行的结果返回给调用者,则需要用到return。

    #return的返回值无类型限制,且可以将多个返回值放到一个元组内。

    # return是函数结束的标志,即函数体代码一旦运行到 return,会立刻终止函数的运行;

    函数内可以有多个return,但只执行一次函数就结束了,并且会将 return后的值当做本次运行的结果返回。

    #PS:

    结束程序的执行的力度:

    exit > return > break > 条件为假

    (1)返回None:函数体内的return后无值或直接省略return,则默认返回none

    return
    return None


    def
    func(): pass res=func() print(res) # 返回值None


    (2)有return,返回一个值

    def func():
        return (10)
    res=func()
    print(res) # 返回值为10


    (3)有return,返回多个值——逗号分隔开多个值,默认返回元祖

    def func():
        return (10,'cc',[1,2])
    res=func()
    print(res,type(res)) # 返回值为元祖(10, 'cc', [1, 2])

    参考资料:

    https://www.cnblogs.com/linhaifeng/articles/7531972.html

    https://zhuanlan.zhihu.com/p/108808009

  • 相关阅读:
    Week7 作业 A
    Mouth 1 模拟题 CSP201512-3 画图
    C++出现:error: passing 'const Employee' as 'this' argument of 'int Employee::getSalary()' discards qualifiers [-fpermissive]
    C++出现error: no match for call to '(MyCompare) (const key_type&, const Person&)'
    CentOS 7出现ifconfig:command not found
    有效清理C盘内存
    重装系统之后出现https:/ / logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_xxvbETmiVPe1AsI9xwHp3A2.js
    C++/QT运行时出现void value not ignored as it ought to be
    运行QT项目文件夹下的exe文件提示找不到“各种dll”
    Ubuntu16.04配置OpenCV3.2.0
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12509083.html
Copyright © 2011-2022 走看看