Python学习_基础_10_函数的定义、调用、返回值

Python-函数初识(定义、调用、返回值)

一、概念引入

  1. 什么是函数?

    函数就相当于具备某一功能的工具,函数的使用必须遵循一个原则:先定义,后使用。

  2. 为什么要用函数?

    随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差,且程序中需要频繁使用同一功能时,只能重复编写该功能的实现代码,日积月累,程序将变得冗长,并且当某一功能需要修改时,又不得不找出所有定义及使用这段功能的地方修改之,管理维护的难度极大。

    所以我们需要使用函数来解决这些问题。

  3. 如何使用函数?

    函数分为两大类,一类是内置函数,一类是自定义函数。内置函数可以直接使用,比如input()、print()等;而自定义函数需要我们自己定义后使用。

    1. 先定义:三种定义方式
    2. 后调用:三种调用方式
    3. 返回值:三种返回值的形式

二、函数定义

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

定义函数的语法:

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

定义函数发生的事情
1、申请内存空间保存函数体代码
2、将上述内存地址绑定给函数名
3、定义函数不会执行函数体代码,但是会检测函数体语法

调用函数发生的事情
1、通过函数名找到函数的内存地址
2、然后加括号就是在触发函数体代码的执行

定义形式一:无参函数

def func():
    print("这是一个函数")
    
func()  # 这是一个函数
# 示范1

def bar():  # bar=函数的内存地址
    print('from bar')


def foo():
    bar()
    print('from foo')


foo()

# 运行结果:
# from bar
# from foo
# 示范2
def foo():
    # print(bar)
    bar()
    print('from foo')


def bar():  # bar=函数的内存地址
    print('from bar')


foo()

# 运行结果:
# from bar
# from foo
# 示范3

def foo():
    bar()
    print('from foo')

foo()

def bar():
    print('from bar')
    
# 程序自上而下执行,到foo()处进入函数内,bar()找不到,故报错
# 为什么代码没有语法错误?因为函数定义时不执行函数体代码,只检测函数体语法

定义形式二:有参函数

def func(x, y):  # x=1  y=2
    print(x, y)

func(1, 2)  # 1 2

定义形式三:空函数,函数体代码为pass

def func(x, y):
    pass

三种定义方式的应用场景

  1. 无参函数的应用场景
    def interactive():
        name = input('username>>: ')
        age = input('age>>: ')
        gender = input('gender>>: ')
        msg = '名字:{} 年龄:{} 性别:{}'.format(name, age, gender)
        print(msg)
    
    
    interactive()
    
  2. 有参函数的应用场景
    def add(x, y):
        res = x + y
        print(res)
    
    add(20, 30)
    
    def add(x, y):  # 参数-》原材料
        res = x + y
        return res  # 返回值-》产品
    
    res = add(20, 30)
    print(res)
    
  3. 空函数的应用场景

    在程序设计的开始,往往是先想好程序都需要完成什么功能,然后把所有功能都列举出来用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
    

三、函数调用

调用方式一:语句的形式(只加括号调用函数)

interactive()
add(1, 2)

调用方式二:表达式形式

def add(x, y):
    res = x + y
    return res


# 赋值表达式
res = add(1, 2)
print(res)
# 数学表达式
res = add(1, 2) * 10
print(res)

调用方式三:函数调用当做参数

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

四、函数返回值

return是函数结束的标志,即函数体代码一旦运行到return会立刻终止函数的运行,并且会将return后的值当做本次运行的结果返回。

  1. 返回None:函数体内没有return或者返回值设置为None

    def func():
        pass
        return None
    
    def func2():
        pass
    
    res = func()
    res2 = func2()
    print(res, type(res))  # None <class 'NoneType'>
    print(res2, type(res2))  # None <class 'NoneType'>
    
  2. 返回一个值:return 值

    def func():
        return 10
    
    
    res = func()
    print(res)  # 10
    
  3. 返回多个值:用逗号分隔开多个值,会被return返回成元组

    def func():
        pass
        return 10, 'aa', [1, 2]
    
    
    res = func()
    print(res, type(res))  # (10, 'aa', [1, 2]) <class 'tuple'>
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值