Python进阶6函数

1,函数的创建和调用

#函数的创建
def a(b,c):
    d=c+b
    return d
re=a(10,20)
print(re)#30

2,函数的参数传递

形参出现在函数的定义处

在函数调用用过程中,进行实参的传递,

如果是不可变对象,在函数体的修改不影响实参的值,

如果是可变对象,在函数体的1修改会影响到实参的值

def a(b,c):
    d=c+b
    return d
re=a(10,20)
print(re)#30
rp=a(b=10,c=30)
print(rp)#40

1,位置传输 ,按照顺序进行对象值的传递

re=a(10,20)
print(re)#30

2,指定参数进行传参

rp=a(b=10,c=30)
print(rp)#40

3,函数的返回值

#函数参数的返回值
#(1)如果函数没有返回值,{函数执行完毕后不需要给函数调用处提供数据,}return 可以省略不写
#(2)函数的返回值是一个,则直接返回类型
#(3)如果函数的返回值是多个,,返回的结果为元组
def de(num):
    a=[]#存奇数
    b=[]#存偶数
    for i in num :
        if i%2 :
            b.append(i)
        else:
            a.append(i)
    return  a, b
s=[5,6,7,8,9]
print(de(s))#([6, 8], [5, 7, 9])

4,函数的参数定义

def fun(a,b=10):
    print(a,b)
fun(20)
fun(10,10)
fun(10,20)

5,变量的作用域

Python 中变量的访问权限取决于其赋值的位置,这个位置被称为变量的作用域。Python 的作用域共有四种,分别是:局部作用域(Local,简写为 L)、作用于闭包函数外的函数中的作用域(Enclosing,简写为 E)、全局作用域(Global,简写为 G)和内置作用域(即内置函数所在模块的范围,Built-in,简写为 B)。

变量在作用域中查找的顺序是 L→E→G→B,即当在局部找不到时会去局部外的局部找(例如闭包),再找不到会在全局范围内找,最后去内置函数所在模块的范围中找。

分别在 L、E、G 范围内定义的变量的例子如下:
global_var = 0 #全局作用域
def outer():
enclosing_var = 1 #闭包函数外的函数中
def inner():
local_var = 2 #局部作用域

6,递归函数

1、递归的概念
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。
所以递归要有两个要素,结束条件与递推关系

2、借助动图理解递归
在这里插入图片描述

类似于这张图,一直在循环往复的重复着同一件事

3、计算n的阶乘
以十的阶乘为例 10!=10×9×8×7×6×5×4×3×2×1
根据公式,很容易发现规律即n=n×n-1
当n=1的时候要结束循环并输出结果。

1.用循环来计算阶乘
国际惯例,先用我们熟知的循环来计算10!

#!/usr/bin/python3
s=1
for i in range(1,11):
s *=i
print(s)
1
2
3
4
5
2.递归函数如何计算n的阶乘
同理,利用递归函来计算阶乘数同样需要一个结束条件,当n=1时返回结果。
代码实现如下:

def factor(n):
if n == 1:
return 1
return n*factor(n-1)
num = factor
print(num)

显示的是缩进错误

IndentationError: unexpected indent:缩进错误

def fun(n):
     if n==1:
         return 1
     else:
         return n*fun(n-1)
print(fun(3))#6

递归函数是先递归到最后一个,然后再从最后一个往前面进行带入函数里面。

#1,1,2,3,5,8,...每一位都等于前两位的和
def f(n):
    sum=0
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return f(n-1)+f(n-2)

print(f(4))#3

sum=0
if n1:
return 1
elif n
2:
return 1
else:
return f(n-1)+f(n-2)

print(f(4))#3


语法结构   if  else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值