Python学习之第十一天 函数

今天为大家介绍的是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记录册”

该公众号致力于为大家分享工作中会用到一些简单实用的小知识,而不是那些悬在云端的高大上但又感觉空泛的文章,欢迎大家关注,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值