函数
#函数定义
def calc(a,b):#a,b形式参数(形参),出现在函数定义处
c = a+b;
return c
#函数调用
result = calc(10,20)#10,20为实际参数,实参出现在函数调用处
print(result)
def fun (a,b):
print("a = " , a)
print("b = " , b)
a = 100
b.append(10)
print("a = ", a)
print("b = ", b)
w = 12
u = [12 , 23 , 34]
print('w = ' , w)
print('u = ', u)
fun(w , u) #将位置传参,a,b是函数定义处的形参,w,u是函数调用处的实参,实参和形参名称可以不一致
print('w = ' , w)
print('u = ', u)
"""
在函数调用的过程中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值→a=100,不会影响w的值
如果是可变对象,在函数体的修改会影响实参的值→b.append(10),会影响u的值
"""
def fun(num):
odd = []#存奇数
even = []#存偶数
for i in num:
if i%2: #每一个对象都有一个布尔值,非零为True,零为False
odd.append(i)
else:
even.append(i)
return odd , even
print(fun([1,2,3,4,5,6,7,8,9]))
#output:([1, 3, 5, 7, 9], [2, 4, 6, 8])
"""
函数的返回值:
①如果函数没有返回值【不需要给调用处提供数据】,return可以省略
②函数返回值,如果是1个,直接返回原类型
③函数返回值,如果是多个,返回的结果为元组
"""
def fun1():
print("dhajsdh")
fun1()
def fun2():
return 'hello'
print(fun2())
def fun3():
return 'hello','world'
print(fun3())
"""
output:
dhajsdh
hello
('hello', 'world')
"""
"""
函数是否需要返回值,视情况而定
"""
def fun(*a):
print(a)
fun(*[1,2,3,4,5,6,7,8,9])
print('-----------------------------')
def fun2(**a):
print(a)
fun2(**{'a':78,'b':156,'c':333})
print('-----------------------------')
def fun1(a,b,c):
print(a)
print(b)
print(c)
fun1(10,20,30)
print('-----------------------------')
fun1(*[1,2,3])#在函数调用时,将列表中的每个元素都转换为位置实参传入
print('-----------------------------')
fun1(a=14,b=15,c=16)#关键字实参
print('-----------------------------')
fun1(**{'a':78,'b':156,'c':333})#将字典中的键值对都转换为关键字实参
def fun(a,b,c,d):
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
fun(10,20,30,40)#位置实参传递
fun(a=10,b=20,c=50,d=80)#关键字实参传递
fun(10,20,c=60,d=70)#混合传递
"""
需求,c,d只能采用关键字实参传递
"""
def fun1(a,b,*,c,d):#从*之后的参数,在函数调用时,只能采用关键字参数传递
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
fun1(10,20,30,40)#位置实参传递
fun1(a=10,b=20,c=50,d=80)#关键字实参传递
fun1(10,20,c=60,d=70)#混合传递
"""
函数定义时的形参的顺序问题
"""
def fun1(a,b=10):
pass
def fun2(*args):
pass
def fun3(**args2):
pass
def fun1(a,b,*,c,d):#从*之后的参数,在函数调用时,只能采用关键字参数传递
pass
def fun5(a,b,*,c,d,**args):
pass
def fun6(*ards,**args):
pass
def fun7(a,b=10,*ards,**args):
pass
def fun(a,b):
c = a + b #c为局部变量(c为函数体中进行定义的变量),a,b为函数形参,作用范围也是函数内部相当于局部变量
print(c)
#print(c),因为a,c超出了其作用的范围(超出作用域)
#print(a)
name = '哇撒大苏打'#name的作用范围为全局-->全局变量
def fun2():
print(name)
fun2()
def fun3():
global age#局部变量使用global声名,这个变量实际就变成了全局变量
age = 20
print(age)
fun3()
print(age)
def fun(n):
if n==1:
return 1
else:
return n*fun(n-1)
print(fun(6))
def fib(n):
if n==1:
return 1
elif n==2:
return 1
else:
return fib(n-1)+fib(n-2)
#斐波那契数列第六位上的数列
print(fib(6))
#输出前六位上的数字
for i in range(1,7):
print(fib(i))