十五.函数的定义与调用

目录

一.什么是函数

二.为什么需要函数

三.函数的创建

四.函数调用的参数传递

五.函数调用的内存分析

六.return函数返回值为多个时,结果为元组

七.函数的返回值

八.函数的参数定义


一.什么是函数

· 函数就是执行特定任务以完成特定功能的一段代码

二.为什么需要函数

· 复用代码

· 隐藏实现细节

· 提高可维护性

· 提高可读性便于调试

三.函数的创建

def 函数名(输入参数):

函数体

        return xxx   

函数的创建:
def sum(a,b):
    c =a+b
    return print(c)

函数的调用:
sum(10,20)


打印:
30



-----------------------------------------------

def sum(a,b):
    c =a+b
    return c

print(sum(10,20))

四.函数调用的参数传递

  • 位置实参
    • 根据形参对应的位置进行实参传递
def calc(a,b):
calc(10,20)  #10对应a,20对应b
  • 关键字实参
    • 根据形参名称进行实参传递
def calc(a,b):
calc(b=10,a=20)

五.函数调用的内存分析

'''在函数调用过程中,进行参数传递
如果是不可变对象,在函数体的修改不会影响实参的值
如果是可变对象,在函数体的修改会影响到实参的值
'''
n1=11
n2=[22,33,44]
print('n1:',n1)
print('n2:',n2)
print('------------------------------------------------')
def fun(arg1,arg2):
    print('arg1:',arg1)
    print('arg2:',arg2)
    arg1=100
    arg2.append(10)
    print('arg1:',arg1)
    print('arg2:',arg2)
fun(n1,n2)

'''在函数调用过程中,进行参数传递
如果是不可变对象,在函数体的修改不会影响实参的值
如果是可变对象,在函数体的修改会影响到实参的值
'''
print('-------------------------------------------------')
print('n1',n1)
print('n2',n2)

打印:
n1: 11
n2: [22, 33, 44]
------------------------------------------------
arg1: 11
arg2: [22, 33, 44]
arg1: 100
arg2: [22, 33, 44, 10]
-------------------------------------------------
n1 11
n2 [22, 33, 44, 10]

六.return函数返回值为多个时,结果为元组

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

lis=[1,2,3,4,5]
print(fun2(lis))


打印:
([1, 3, 5], [2, 4])


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

lis=[1,2,3,4,5]
print(fun2(lis))


打印:
[1, 3, 5]

七.函数的返回值

  • 如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】return可以省略不写
  • 函数的返回值,如果是1个,直接返回类型
  • 函数的返回值,如果是多个,返回的结果为元组
  • 函数在定义时,是否需要返回值,视情况而定
def fun1():
    print("hello")
fun1()

def fun2():
    return 'hello,word'
print(fun2())

def fun3():
    return 'hell','word'
print(fun3())


打印:
hello
hello,word
('hell', 'word')

八.函数的参数定义

1.函数定义默认值参数

  • 函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun1(a,b=10):
    print(a,b)

fun1(30)
fun1(30,20)


打印:
30 10
30 20

2.个数可变的位置参数 *

  • 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
  • 使用 * 定义个数可变的位置形参
  • 结果为一个元组
  • 有多个参数时,只能给最后一个参数定义 *
  • * 和 ** 同时使用时,需 * 在前 ** 在后
  • 每个函数中只能有1个
def fun1(*a):
    print(a)

fun1(10,220,30)

打印:
(10, 220, 30)


----------------------------
def fun1(a,*b):
    print(a,b)

fun1(10,220,30)

打印:
10 (220, 30)
  • 可反向调用,把列表中的元素转为实参传入 *list
  • 列表中的元素需要与函数中的参数个数对应
def fun1(a,b,c):
    print(a,b,c)

lis=[10,20,30]
fun1(*lis)

打印:
10 20 30

3.个数可变的关键字形参 **

  • 定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
  • 使用 ** 定义个数可变的关键字形参
  • 结果为一个字典
  • 有多个参数时,只能给最后一个参数定义 **
  • * 和 ** 同时使用时,需 * 在前 ** 在后
  • 每个函数中只能有1个
def fun1(**a):
    print(a)
fun1(小明=10,小李=20)

打印:
{'小明': 10, '小李': 20}


-----------------------------------

def fun1(a,**b):
    print(a,b)
fun1(10,小明=10,小李=20)

打印:
10 {'小明': 10, '小李': 20}

------------------------------------

def fun1(*a,**b):  #* 和 ** 同时使用时,需*在前 ** 在后
    pass


def fun1(**a,*b):  # 报错
    pass
  • 可反向调用,把列表中的元素转为实参传入 **dict
  • 列表中的元素需要与函数中的参数个数对应
  • key值需要与函数中的参数名一致
def fun1(a,b,c):
    print(a,b,c)
dic={"a":50,"b":20,"c":60}

fun1(**dic)


打印:
50 20 60

4.def fun1(a,b,*,c,d):#在参数的前面加 * 号,代表*号后面的参数只能采用关键字传递

def fun1(a,b,*,c,d):
    print(a)
    print(b)
    print(c)
    print(d)
fun1(10,20,c=30,d=40)


打印:
10
20
30
40

---------------------------
def fun1(a,b,*,c,**d):  #可以
    pass

def fun1(a,b,*,c,*d):  #不可以
    pass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值