python基础——函数(二)

全局变量与局部变量
全局变量与局部变量两者的本质区别就是在于作用域,也就是按有效范围划分,变量分为全局变量和局部量:
▉▉全局变量:定义在函数外的变量,有效范围是整个python文件。
▉▉局部变量:定义在一个函数中的变量,有效范围限于该函数内部。
若有相同名字的全局变量与局部变量,则在函数内部会使用局部变量,而在函数外,因局部变量不存在,故使用全局变量。

def scope():#创建函数
	var1=1
    print(var1,var2)
var1=10
var2=21
scope()
print(var1,var2)
**run**
1 21
10 21

如果在函数内使用全局变量,需在函数内部用global关键字进行声明。

def scope():
    global var1
    var1=1
    var2=2
    print(var1,var2)
var1=10
var2=21
scope()
print(var1,var2)
**run**
1 2
1 21

多函数程序

'''实现函数之间的调用关系,func1:实现数据的相加操作,func2实现数据的求平均值操作'''
def func1(*args):
    '''

    :param args: 输入需要相加的数据
    :return: 返回所有数据的和
    '''
    # print(args)
    sum = 0
    data_len = len(args)
    # 这是求的数据的个数
    for obj in args:
        sum += obj
    return sum,data_len



def func2(total,count):
    '''
    实现求多个数据的平均值
    :param total: 这个形参是指所有数据的和
    :param count: 这个形参是指数据的个数
    :return: 均值
    '''
    avg = total/count
    return avg


ret,data_len = func1(1,2,3,6,7,99,123,134)
print('所有数据的和',ret)
print('所有数据的个数',data_len)
print(ret,data_len)
avg = func2(ret,data_len)
print('所有数据的平均值',avg)

匿名函数
语法:lambda [arg1[, arg2, … argN]]: expression,参数是可选的,如果使用的参数话,参数通常也是表达式的一部分。

#携带参数的匿名函数
avg = lambda total,count:total/count
print(avg(12,3))
#携带默认参数的匿名函数
ret1=(lambda a,b,c=100:a+b+c)(1,2,0)
print(ret1)
#不定长参数
f = lambda *args:args
f1 = lambda **kwargs:kwargs
print(f(1,2,3,4,5,6))
print(f1(name='tony'))
#真正的匿名函数
ret=(lambda a,b:a+b)(1,2)
print(ret)
#匿名函数寻找三个数中的最大值最小值
print((lambda a,b,c:c if c >(a if a>b else b) else (a if a>b else b))(1,22,3))

递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。举个例子,我们来计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示,可以看出:
fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x n。所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。于是,fact(n)用递归的方式写出来就是:

def func_fact(n):
    if n==1:
        return 1
    else:
    	out=n*func_fact(n-1)
    return out
 print(func_fact(4))
'''实现兔子生兔子'''
def rab(month):
    '''
    该函数实现的是递归函数的写法,返回兔子的个数,古典问题
    :param month: 这是第几个月
    :return: 兔子的总个数
    '''
    if month == 1:
        return 1
    if month == 2:
        return 1
    else:
        count = rab(month-1)+rab(month-2)
        return count

print(rab(1))
print(rab(2))
print(rab(3))
print(rab(4))
print(rab(5))
print(rab(6))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值