Python学习week5-函数

1、函数的定义与调用

1.1、什么是函数?

  • 数学定义:y=f(x),y是x的函数,x是自变量;y=f(x1,x2,x3...)
  • Python函数定义:
    • 由若干语句组成代码块,函数名称,参数列表构成;它是组织代码的最小单元;
    • 完成一定的功能

1.2、函数的作用?

  • 结构化编程对代码的最基本的封装,一般按功能组织一段代码;
  • 函数封装的目的是为了函数的复用(一次定义多次调用),减少代码重复;
  • 代码更加简洁易读;

1.3、函数的分类?

  • 内建函数
  • 库函数
  • 自定义函数

1.4、函数的定义?

# def 语句定义函数
def 函数名(参数列表):
    函数体
    [return 返回值]
############
(1)函数名就是标识符,命名要求和标识符要求一样;
(2)语句块必须缩进,约定为4个空格
(3)Python的函数,如果没有return语句,默认return None
(4)定义中的参数列表为函数的形式参数,只是一种符号表达,简称为形参;

1.5、函数的调用

# 函数的调用
函数名() 表示函数的调用;
(1)函数定义,只是声明了一个函数(只会检查语法),不会执行;
(2)调用时的参数就是实际参数,就是给函数传递的实际值; 

2、函数的参数

2.1、函数参数的分类

  • 形参:函数在定义时的参数;
    • 位置参数
    • 关键字参数
    • 默认参数
    • 可变位置参数
      • args = tuple()
    • 命名关键字参数(kword only) 
      • 例如:def fn(x,y,*,a=10),这里的‘*’就是只是一个标识符,声明后面的a为keyword-only参数,必须传值; 
    • 可变关键字参数
      • kwargs=dict()
  • 实参:函数在调用时的参数;
    • 位置参数
    • 关键字参数
def fn(x,y,z=5,*args,a=5,**kwargs,):
    print(1,"x",x)
    print(2,"y",y)
    print(3,"z",z)
    print(4,"args",args)
    print(5,"a",a)
    print(6,"kwargs",kwargs)

fn(1,2,3,4,5,a=10,b=11,c=12)
'''
运行结果:
1 x 1   位置参数x
2 y 2   位置参数y
3 z 3   默认参数z
4 args (4, 5)   可变长参数 args
5 a 10  命名关键字参数 a
6 kwargs {'b': 11, 'c': 12} 关键字参数 kwargs
'''

参数规则:参数列表的一般顺序为,普通,缺省,可变位置,keyword-only(可带缺省值),可变关键字参数;

3、函数参数的解构

# 参数解构:

  (1)给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提出所有元素作为函数的实参;

  (2)非字典类型使用 ‘*’ 解构成位置参数;

  (3)字典类型使用‘**’解构成关键字参数;

  (4)解构出来的元素数目要与参数的要求一致,也要和参数类型匹配; 

##参数解构
def add(x:int,y:int)->int:
    print(x,y)
    return x + y

print(add(*(4,5)))      # x,y=(4,5)
print(add(*[1,2]))      # x,y=[1,2]
print(add(*{1,2}))      # x,y={1,2}
print(add(**{'x':4,'y':6}))  # x,y={'x':4,'y':6}
print(add(**{'x':4,'y':6}))  # x,y={'x':4,'y':6}   ==>x=4,y=6
print(add(**{'a':4,'b':6}))
'''
TypeError: add() got an unexpected keyword argument 'a'
# 运行报错, a,b={'a':4,'b':6} ==> a=4,b=6 ==>add(a=4,b=6) 而add函数的参数列表并没有参数a,所以报错
''' def add(*args,sum=0): for i in args: sum+=i return sum ret1=add(*[1,2,3,4,5]) ret2=add(*[i for i in range(100) if i%2]) print(ret1,ret2)
原文地址:https://www.cnblogs.com/soulgou123/p/9555392.html