Python学习笔记_9_函数

1、函数的创建

def calc(a,b):							#定义的函数名叫calc  
  c = a+b
  return c

#位置实参
result = calc(10,20)					#实参和形参名字可以不同
print (result)							#输出:30

#关键字实参
res = calc(b = 20,a = 10)
print (res)								#输出:30
#混合实参
def fun(a,b,c,d):
  print('a=',a)
  print('b=',b)
  print('c=',c)
  print('d=',d)

fun(10,20,30,40)						#不报错
fun(10,20,c=30,d=40)					#前两个参数采用的是位置参数传递,而后两个参数采用的是关键字参数传递。

def fun2(a,b,*,c,d):					#c,d只能采用关键字参数传递。
	print('a=',a)
  print('b=',b)
  print('c=',c)
  print('d=',d)
  
fun2(10,20,30,40)						#报错

2、函数运算后实参的变化

def fun(arg1,arg2):
  print("arg1=",arg1)
  print("arg2=",arg2)
  arg1+=1
  arg2.append(10)
  print("arg1=",arg1)
  print("arg2=",arg2)
  
n1=11
n2=[22,33,44]
print("n1=",n1)							#输出:n1= 11
print("n2=",n2)							#输出:n2= [22,33,44]
fun(n1,n2)								#输出:arg1= 11
										#输出:arg2= [22,33,44]
										#输出:arg1= 12
										#输出:arg2= [22,33,44,10]
print("n1=",n1)							#输出:n1= 11,不可变对象在函数体内部的修改不会影响函数体外的值
print("n2=",n2)							#输出:n2= [22,33,44,10],可变对象在函数体内部的修改会影响函数体外的值

3、函数的返回值

def fun(num):
  odd = []
  even = []
  for i in num:
    if i % 2:
      odd.append(i)
    else:
      even.append(i)
  return odd,even

lst = [11,22,33,44,55,66,77,88]
print(fun(lst))							#输出:([11,33,55,77],[22,44,66,88]),返回的类型为元组。

'''
函数的返回值:
1.如果函数不需要返回值,不用写return。
2.函数有一个返回值,按原类型返回返回值。
3.函数有多个返回值,返回值的类型为元组。
'''

4、函数的形参定义方式

def fun(a,b=10):
  print(a,b)
  
fun(100)								#输出:100,10,只传一个则b采用默认值。
fun(20,30)								#输出:20,30,30将10替换掉。

5、函数可变的的参数定义

#个数可变的位置参数,结果是元素。
def fun(*args):
	print(args)

fun(10)									#输出:(10,)
fun(10,20,30)							#输出:(10,20,30)
#个数可变的关键字参数,结果是字典。
def fun(**args):                        #两个星号让python创建一个名为args的空字典,并将函数接受的所有信息都放入这个字典中。
  print(args)
  
fun(a==10)								#输出:{'a':10}
fun(a==10,b==20,c==30)					#输出:{'a':10,'b':20,'c':30}
def fun1(*a,*b):
  pass									#报错,可变的位置参数只能定义一个。
def fun2(**a,**b):
  pass									#报错,可变的关键字参数只能定义一个。

def fun3(*a,**b):
  pass									#不报错,个数可变的位置形参要放在个数可变的关键字形参的前面。
def fun4(**a,*b):
  pass									#报错

def fun5(a,b=10,*,c,d,*e,**f):
	pass								#报错,因为*后面的只能用关键字参数传递,而*e是个数可变的位置参数。

def fun6(a,b=10,*,c,d,e,**f):
  pass									#不报错

def fun7(a,b=10,*c,**d):
  pass									#不报错

6、将列表和字典中的元素作为参数传入函数

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':111,'b':222,'c':333}
fun(dic)								#报错,因为只传入了一个元素。
fun(**dic)								#不报错,传字典要加两颗星。

7、变量的作用域

#局部变量
def fun(a,b):
  c = a+b
  print(c)
  
print(c)								#报错
#全局变量
name = '张三'
def fun( ):
  print(name)											
  
print(name)								#输出:张三
fun( )									#输出:张三
#在函数外部使用函数内部定义的函数
def fun( ):
  global age							#将局部变量变成全局变量
  age = 21
  print(age)

fun( )									#输出:21,执行函数后,age才被赋上值,下一句才不会报错。
print(age)  							#输出:21

8、递归函数

函数在内部调用了自己。

但是得有出口。

#利用递归函数计算阶乘
def fac(n):
  if n==1:
    return 1							#出口
  else:
    return n*fac(n-1)					#递归
  
print(fac(7))							#输出:5040
#利用递归函数计算斐波那契数列
def fib(n):
  if n==1:
    return 1							#出口
  elif n==2:
    return 1							#出口
  else:
    return fib(n-1)+fib(n-2)			#递归
  
print(fib(7))							#输出:13

for i in range(1,8):
  print(fib(i))							#输出斐波那契数列的前7位数字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值