文章目录

  • 一、定义和好处
  • 二、函数的参数
  • 1.函数的参数分类
  • 2.按形参来分
  • 3.实参来分
  • 4.参数位置顺序
  • 三、可变长位置参数和可变长关键字参数
  • 1.可变长位置参数
  • 2.可变长关键字参数
  • 求和案例
  • 四、函数的return语句


一、定义和好处

函数是指实现某个功能的一段代码

使用函数的好处:

1.模块化程序设计

2.减少代码冗余

3.维护方便

二、函数的参数

1.函数的参数分类

形参:函数定义的时候,指定的参数
实参:函数调用的时候,传递的参数

2.按形参来分

必选参数
默认参数
可变长位置参数
可变长关键字参数

3.实参来分

位置参数
关键字参数

# 必选参数
def stuinfo(name,age,sex):
    print(f"my name is {name},ma age is {age},my sex is {sex}")
# 位置参数
stuinfo('sc',4,'f')
# 默认参数
def stuinfo2(name,age,sex='f'):
    print(f"my name is {name},ma age is {age},my sex is {sex}")

stuinfo2("sc",4)
stuinfo2("sc",5,'m')

# 关键字参数
stuinfo2("sc",sex='m',age=6)

4.参数位置顺序

形参的定义顺序,func01(必选参数,可变长位置参数,默认参数,可变长关键字参数)
实参的调用顺序,关键字参数放在位置参数的后面,func01(位置参数,关键字参数)

三、可变长位置参数和可变长关键字参数

1.可变长位置参数

案例

# 可变长位置参数
def myargs(name,*num):
    print(f"{name}:{num}")
    print(type(num),*num)  #-->print(type(num),1,2)
    
myargs('sc')
myargs('sc',1)
myargs('sc',1,2)  #python内部将1,2组包成元组(1,2)赋值给num,再利用*num进行解包,解包成1,2

运行结果

sc:()
<class 'tuple'>
sc:(1,)
<class 'tuple'> 1
sc:(1, 2)
<class 'tuple'> 1 2

组包和解包

packing 和 unpacking
packing 组包:python自动完成 1,2 --> 元组(1,2)
unpacking解包:*num --> unpacking (1,2) --> 1 2

2.可变长关键字参数

案例

# 可变长关键字参数
def myargs(**num):
    print(num)

myargs(a=1, b=2) 
myargs(a=1)
myargs(a=1, b=2, c=3) 

#python内部将传入的参数a=1, b=2组包成字典{'a':1,'b':2}赋值给num,**num进行解包,解包成a=1,b=2,这里不能print(**num),因为print里面的value是可变位置参数,不是关键字参数

运行结果

{'a': 1, 'b': 2} <class 'dict'>
{'a': 1} <class 'dict'>
{'a': 1, 'b': 2, 'c': 3} <class 'dict'>

packing --> a=1, b=2 --> {“a”:1,“b”:2}

unpacking --> {“a”:1,“b”:2} --> a=1,b=2

求和案例

def mysum(*args):
    # sum = 0
    # for i in args:
    #     sum += i
    # print(sum)
    print(f"元组的和为:{sum(args)}")
mysum(1,2,3,4,5)


def mysum2(**args):
    print(f"字典的和为:{sum(args.values())}")
mysum2(a=1,b=2)

四、函数的return语句

退出函数,并且返回结果
一个函数一旦执行到return就退出,不会执行后面的语句
如果函数没有return语句, 默认返回None,如果return后面不接任何表达式,也是返回 None
return可以有多个
return 一次也可以返回多个值

def maxnum(x,y):
     print("return语句。。。。")
     if x>y:
        print("return x")
        return x
     elif x<y:
        print("return y")
        return y
     return x,y
     print("return end...")


result = maxnum(5,5) 
# 先打印输出第一句话, 接着x==y,return x,y ,然后退出函数  
# 返回两个数,result为(5, 5)
i,j = maxnum(5,5)
print(f"结果为:{result},i为{i},j为{j}")

运行结果

return语句。。。。
return语句。。。。
结果为:(5, 5),i为5,j为5