python程序模块化—函数

本文探讨了Python中函数的使用,包括函数的好处,如提高代码重用性和数据安全性,以及函数的定义、参数列表、返回值和调用注意事项。还介绍了函数在内存中的运行流程,强调了参数匹配和函数调用顺序的重要性。

函数出现的好处

  • 将重复性的具有独立功能性的代码进行封装,省去了一些冗余的代码,提高了代码的重用率
  • 函数是一个封装体,内部的具体内容是不向外提供的,提高了数据安全性
  • 函数使得我们的程序进行模块化了,看到代码分工更加明确,利于大篇幅代码的书写调试修改和完善
    “”"
计算1~100的和
"""
sum = 0
for i in range(1,101):
    sum = sum + i
print(sum)
"""
计算50~150的和
"""
sum = 0
for i in range(50,151):
    sum = sum + i
print(sum)
"""
计算100~120的和
"""
sum = 0
for i in range(100,121):
    sum = sum + i
print(sum)
"""
都是求从a~b和的问题
具体的操作流程基本一致,结果可能会不同
无非具体的参数a和b不一样而已
该段代码可以看做是一个小功能代码
所以对于上述这三部分大致相同的代码
我们可以使用函数来解决代码冗余的问题
"""
def getSum(a,b):
    sum = 0
    for i in range(a, b + 1):
        sum += i
    return sum
n1 = getSum(50,100)
n2 = getSum(1,100)
n3 = getSum(100,120)
print(n1)
print(n2)
print(n3)

函数的具体语法定义

def 函数名(参数列表):
	函数体
	return 返回值
  1. 参数列表:给函数输入原材料进行加工
  2. 函数体:指的就是对原材料具体加工的步骤和过程
  3. return:单独出现的return仅仅标识操作完成函数执行完毕并结束
  4. 返回值:操作的结果,如果被return则返回给该函数的调用者
  5. 函数名:这就是对该独立功能模块的一个命名

调用函数的话,只需要调用函数名(具体传入的数据)即可

return一般都会返回什么东西

  • 什么都不返回(函数不一定要有返回值 但必须有return关键字存在)
  def showA(a,b):
    print(a + b)
    return # 如果函数没有返回值的话 return是隐藏的 也可以直接写出来
showA(10,20)
  • 返回任意数据类型(返回的数据类型 取决于传入参数的类型 和 具体的操作流程)
 def showB(a,b):
    c = a + b
    return c
r1 = showB(1,2)
print(r1)
print(type(r1))

r1 = showB(3.14,1.28)
print(r1)
print(type(r1))

r1 = showB("Hello","你好")
print(r1)
print(type(r1))

结果:
3
<class 'int'>
4.42
<class 'float'>
Hello你好
<class 'str'>

r1 = showB("Hello",10)
print(r1)
print(type(r1))
结果:
Traceback (most recent call last):
  File "MethodDemo01.py", line 62, in <module>
    r1 = showB("Hello",10)
  File "MethodDemo01.py", line 48, in showB
    c = a + b
TypeError: can only concatenate str (not "int") to str
  • 返回多个值
def showC():
    return 1, 2, 3.14, "Hello"
r1,r2,r3,r4 = showC()
print(r1)
print(type(r1))
print(r2)
print(type(r2))
print(r3)
print(type(r3))
print(r4)
print(type(r4))
结果:
1
<class 'int'>
2
<class 'int'>
3.14
<class 'float'>
Hello
<class 'str'> 
  • 返回函数甚至是自身
 def showD(a,b):
    print(a + b)
    return showD	# 返回的是showD这个函数的对象
r1 = showD(1,3)		# r1就相当于是showD函数
print(r1)
print(type(r1))
r1(3,4)
结果:
4
<function showD at 0x00000149C34F55E8>
<class 'function'>
7

当我们在调用函数的时候需要注意几点

  1. 参数列表中参数的个数最好一致的
  2. 函数必须是先定义后调用

函数在内存中运行流程

每一个函数模块,在内存中是作为一个函数帧,函数帧之间的运行是在栈内存中的,栈是一个先进后出的存储空间,如果函数帧A先进栈,当前函数栈A为当前栈顶元素,则按照函数的内容依次去执行,如果在执行的过程中又调用到了别的函数帧B,此时函数帧A暂停运行,函数帧B进栈称为新的栈顶元素,函数帧B按照函数的内容依次去执行,每一个函数中的参数我们都称之为形式参数,在调用函数时传给函数的参数我们叫做实际参数,形式参数其实就是在函数帧当中创建的一个变量(局部变量)而已,传递参数的过程其实就是在传递数据对象的地址。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值