Python3(函数用法和底层分析)

函数简介

函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的—致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。

函数的基本概念

1.一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。
2.函数是代码复用的通用机制。

Python函数分类

Python中的函数分为如下几类:
①内置函数
  我们前面使用的str(),list(),len()等这些都是内置函数,我们可以直接拿来使用
②标准库函数
  我们可以通过import语句导入库,然后使用其中定义的函数
③第三方库函数
  Python社区也提供了很多高质量的库,下载安装这些库后,也是通过import语句导入,然后可以使用这>些第三方的函数。
④用户自定义函数
  用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数,现在我在学习的就是如何自定义函数

函数的定义和调用

核心要点

Python中,定义函数的语法如下:

def 函数名([参数列表]):
  “文档字符串”
  函数体,语句若干句

要点:
1.我们是用def定义函数时,然后就是一个空格和函数名称;
  ①Python语句执行def时,会创建一个函数对象,并绑定到函数变量名上
2.参数列表
  ①圆括号内是形式参数列表,有多个参数则使用逗号隔开
  ②形式参数不需要声明类型,也不需要指定函数来返回值类型
  ③无参数,也必须要保留空的圆括号
  ④实参列表必须与形参列表一一对应
3.return语句
  ①如果函数体中包含return语句,则结束函数执行并返回值;
  ②如果函数体中包含return语句,则返回None值。
4.调用函数之前,必须要先定义函数,即先调用def创建函数对象
  ①内置函数对象会自动创建
  ②标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句

现在我们一起通过定义函数来学习函数的定义方式

形参和实参

[操作]定义一个函数,实现两个数相比较,并返回较大的值。

def printMax(a,b):
    if a>b:
        print("更大的数是:{0}".format(a))
    else:
        print("更大是的数是:{0}".format(b))

printMax(312,3)
# 运行结果: 更大的数是:312
  上面的printMax函数中,在定义时写的printMax(a,b)。a和b称为“形式参数”,简称“形参”。也就是说,形式参数是在定义函数时使用的。形式参数的命名只要符合“标识符”命名规则即可。

  在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码中,printMax(10,20),10和20就是实际参数。

文档字符串(函数的注释)

程序的可读性最重要,一般建议在函数体开始的部分附上函数定义说明,这就是“文档字符串”,也有人成为“函数的注释”。我们通过三个单引号或者三个双引号来实现,中间可以加入多行文字进行说明。

通过help(函数名.doc)来获得这个函数的说明

def __sum__(a,b):
    '''这是一个求和函数'''
    print(a+b)

__sum__(1,2)
help(__sum__.__doc__)   ##这样子来获得我们写的文本字符创,即函数说明
'''
3
No Python documentation found for '这是一个求和函数'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.
'''

返回值

return返回值得要点:
  ①如果函数中包含return 语句,则借宿函数执行并返回值;
  ②如果函数体中不包含return语句,则返回值None
  ③要按返回多个值,使用列表、元组、字典、集合将多个值“存起来”即可。
[操作]定义一个打印n个星号的无返回的函数

def print_star(n):
    '''
    打印n个*的函数
    :param n: 
    :return: 
    '''
    for x in range(n):
        print("*",end="\t")
    #或者
    #print('*'*n)

print_star(5)

[操作]定义一个返回两个数平均值的函数的函数

def avg(a,b):
    '''
    这个是一个返回两个数平均值的函数
    :param a:
    :param b:
    :return:
    '''
    return (a+b)/2

c = avg(1,2)
print(c)

#运行结果: 1.5

[操作]定义一个返回多个值的函数

def super_avg(a,b):
    return [a,b,(a+b)/2]

a = super_avg(5,6)
print("这就是{0}和{1}的平均数{2}".format(a[0],a[1],a[2]))

函数也是对象,内存底层分析

在Python中,一切都是对象。实际上,执行def语句定义函数后,系统就创建了相应的函数对象。我们执行如下程序,然后进行解释:

def print_star1(n):
    print('*'*n)

print(print_star1)
print(id(print_star1))

c = print_star1
print(c)
print(id(c))
c(3)

#执行结果:
#<function print_star1 at 0x000002111DFCD310>
#2272540807952
#<function print_star1 at 0x000002111DFCD310>
#2272540807952
#***

说明:
当我们定义一个函数时,他会在堆中存在他的对象。如果我们要去调用这个函数,我们会在栈中定义一个引用来指向这个对象。虽然我们进行不断地引用,函数的内存还是不会变的。假设我们把这个引用变量赋值给另一个变量,我们会得到一个不同名的相同的引用。这两个应用在调用时会指向同一个在堆中的函数对象。效果是一致的。

图片解释:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值