今天为大家介绍的是Python中函数的概念,以下为相关学习代码,感兴趣的童鞋可以参考练习。
# 机构:家里蹲
# 作者:青灬火
# 时间:2021/7/21 23:15
#1、函数的创建和调用
'''
什么是函数
函数就是执行特定任务以完成特定功能的一段代码
为什么需要函数
复用代码
隐藏实现细节
提高可维护性
提高可读性便于调试
函数的创建
def 函数名([输入参数]):
函数体
[return ***]
'''
def calc(a, b): #a, b 称为形式参数,简称形参,形参的位置是在函数的定义处
c = a + b
return c
result = calc(2, 3) #2,3为实际参数,简称实参,实参的位置实在函数的调用处实际传入的参数
print(result) #5
#2、函数的参数传递
#位置实参:根据形参对应的位置进行实参传递
result = calc(2, 3) #a = 3, b = 3, 根据形参的位置传参
print(result) #5
#关键字实参:根据形参名称进行传递
result = calc(b=3, a=6) #按照形参的名称来传递实参
print(result) #9
#参数传递的内存分析
def fun(arg1, arg2):
print('arg1 = ', arg1) #arg1 = 11
print('arg2 = ', arg2) #arg2 = [22, 33, 44]
arg1 = 100
arg2.append(10)
print('arg1 = ', arg1) #arg1 = 11
print('arg2 = ', arg2) #arg2 = [22, 33, 44, 10]
n1 = 11
n2 = [22, 33, 44]
print(n1) #11
print(n2) #[22, 33, 44]
print('----------------------')
fun(n1, n2)
print(n1) #11
print(n2) #[22, 33, 44, 10]
'''
以上可知,在函数调用过程中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值 arg1的修改为100,不会影响n2的值
如果是可变对象,在函数体的修改会影响到实参的值 arg2的修改,append(10),会影响到n2的值
'''
#3、函数的返回值
#函数返回多个值时,结果为元组
def fun(num):
odd = [] #存奇数
even = [] #存偶数
for i in num:
if i%2:
odd.append(i)
else:
even.append(i)
return odd, even
print(fun([10, 29, 34, 23, 44, 53, 55])) #([29, 23, 53, 55], [10, 34, 44])
'''
函数的返回值
1、如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】,return 可以省略不写
2、函数的返回值如果是一个,直接返回类型
3、函数的返回值如果时多个,返回的结果为元组
'''
#4、函数的参数定义
'''
函数定义默认值参数
函数定义时,给形参设置默认值,只有于默认值不符的时候才需要传递实参
'''
def fun(a, b = 10):
print(a, b)
fun(100) #100 10
fun(20, 30) #20 30
'''
个数可变的位置参数
定义参数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
'''
def fun(*args):
print(args)
fun(10) #(10,)
fun(10, 20, 30) #fun(10, 20, 30)
'''
个数可变的关键字形参
定义参数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
'''
def fun(**args):
print(args)
fun(a = 30) #{'a': 30}
fun(a=10, b=20, c=30) #{'a': 10, 'b': 20, 'c': 30}
#5、变量的作用域
'''
变量的作用域是程序代码能访问该变量的区域
根据变量的有效范围可分为
局部变量
在函数内部定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会变成全局变量
全局变量
函数体外定义的变量,可作用于函数内外
'''
def fun(a, b):
c = a + b # c就称为局部变量,因为c是在函数体内定义的变量,a, b 为函数的形参,作用范围也是函数内部,相当于局部变量
print(c)
name = 'Sam' # name为全局变量,函数体内外都可以使用
def fun2():
print(name)
fun2()
def fun3():
global age #函数内部定义变量使用global定义,age变为全局变量
age = 20
print(name)
#6、递归函数
'''
什么是递归函数
如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分
递归调用与递归终止条件
递归的调用过程
每递归调用一次函数,都会在栈内村分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点
缺点:占用内存多,效率低下
优点:思路和代码简单
'''
#使用递归来计算阶乘
def fac(n):
if n == 1:
return 1
else:
return n * fac(n - 1)
print(fac(6)) #720
扫码关注公众号“JAVA记录册”
该公众号致力于为大家分享工作中会用到一些简单实用的小知识,而不是那些悬在云端的高大上但又感觉空泛的文章,欢迎大家关注,谢谢!