函数参数定义
# 学习人员:贾其豪
# 开发时间:2021/1/31 14:05
#函数定义默认值参数
#函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10): #b称为默认值参数
print(a,b)
#函数的调用
fun(100)
fun(20,30)
'''
个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的未知参数
使用*定义个数可变的位置形参
结果为一个元组
个数可变的关键字形参
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
'''
#个数可变的位置参数,只能定义一个
def fun(*args):
print(args)
fun(10)
fun(12,23,34,45,)
#个数可变的关键字形参,只能定义一个
def fun1(**args):
print(args)
fun1(a=12)
fun1(b=23,c=34,d=45)
'''在一个函数的定义过程中,既有个数可变的关键字形参,又有个数可变的位置形参,
要求,个数可变的位置形参放在个数可变的关键字形参前面'''
def fun2(*args1,**args2):
pass
'''def fun3(**args1,*args2): #报错
pass'''
函数参数传递
# 学习人员:贾其豪
# 开发时间:2021/1/31 13:23
'''位置实参:根据形参对应的位置进行实参传递
关键字实参:根据形参名称进行实参传递'''
def calc(a,b): #a,b称为形式参数,简称形参,形参的位置是在函数的定义处
c=a b
return c
#位置实参
result=calc(10,20) #10,20称为实际参数,简称实参,实参的位置是在函数的调用处
print(result)
#关键字实参
result=calc(b=10,a=20) #=左侧的变量名称叫做关键字
print(result)
函数参数总结
# 学习人员:贾其豪
# 开发时间:2021/1/31 14:27
def fun(a,b,c):
print('a=',a)
print('b=',b)
print('c=',c)
#函数的调用
fun(10,20,30)
lst=[11,22,33]
#fun(lst) #报错
fun(*lst) #在函数调用时,将列表中的每个元素都转化为位置实参传入
fun(a=100,b=200,c=300)
dic={'a':100,'b':200,'c':300}
#fun(dic) #报错
fun(**dic) #在函数调用时,将字典中的键值对转换为关键字实参传入
def fun1(a,b,*,c,d):#在*之后只能用关键字传参
print('a=', a)
print('b=', b)
print('c=', c)
print('d=', d)
fun1(12,23,d=22,c=21)
#函数定义是的形参的顺序问题
def fun2(a,b,*,c,d,**args):
pass
def fun3(*args,**args2):
pass
def fun4(a,b=10,*args1,**args2):
pass
函数的创建和调用
# 学习人员:贾其豪
# 开发时间:2021/1/31 13:08
'''函数就是执行特定功能的一段代码
优点:
复用代码
隐藏实现细节
提高可维护性
提高可读性便于调试'''
'''函数的创建:def 函数名([输入参数])
函数体
[return XXX]'''
def calc(a,b):
c=a b
return c
result=calc(10,20)
print(result)
函数参数传递内存变化
# 学习人员:贾其豪
# 开发时间:2021/1/31 13:35
def fun(arg1,arg2):
print('arg1',arg1)
print('arg2',arg2)
arg1=100
arg2.append(10)
print('arg1', arg1)
print('arg2', arg2)
n1=11
n2=[22,33,44]
print('n1',n1)
print('n2',n2)
fun(n1,n2)
print('n1',n1)
print('n2',n2)
#在函数调用过程中,进行参数的传递
#如果是不可变对象,在函数体的修改不会影响实参的值
#如果是可变对象,在函数体的修改会影响到实参的值
变量的作用域
# 学习人员:贾其豪
# 开发时间:2021/1/31 14:49
'''
变量的作用域
程序代码能访问该变量的区域
根据变量的有效范围可分为:
局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会变成全局变量
全局变量:函数体外定义的变量,可作用于函数内外
'''
def fun(a,b):
c=a b #a,b,c都相当于是局部变量
print(c)
#print(c) #a,c超出了起作用的范围(作用域)
#print(a)
name='杨老师' #name的作用范围在函数内外都可以起作用,是全局变量
print(name)
def fun2():
print(name)
fun2()
def fun3():
global age #age的作用范围是全局
age=20
print(age)
fun3()
print(age)
函数的返回值
# 学习人员:贾其豪
# 开发时间:2021/1/31 13:54
def fun(num):
odd=[]
even=[]
for i in num:
if i%2:
odd.append(i)
else:
even.append(i)
return odd,even
#函数的调用
lst=[10,29,34,23,44,53,55]
print(fun(lst)) #输出多个值会以元组类型输出
'''
函数的返回值
1.如果函数没有返回值(函数执行完毕后,不需要给调用处提供数据),return可以省略不写
2.函数的返回值,如果是1个,直接返回类型
3.函数的返回值,如果是多个,返回的结果是元组
'''
递归函数
# 学习人员:贾其豪
# 开发时间:2021/1/31 15:02
'''
什么是递归函数:如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分:递归调用与递归终止条件
递归的调用过程:每递归调用一次函数,都会在栈内存分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点:缺点:占用内存多,效率低下
优点:思路和代码简单
'''
#使用递归计算阶乘
def fac(n):
if n==1:
return 1
else:
res=n*fac(n-1)
return res
print(fac(6))
#斐波那契数列
def fib(n):
if n==1 or n==2:
return 1
else:
res=fib(n-1) fib(n-2)
return res
print(fib(6))
#输出前六位上的数字
for i in range(1,7):
print(fib(i))
来源:https://www./content-4-849851.html
|