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 n2:
return 1
else:
return f(n-1)+f(n-2)
print(f(4))#3
语法结构 if else