python基础 9 函数①

104 阅读4分钟

一 函数的特点

 1. 避免代码冗余 
 2. 提高代码的可维护性 
 3. 提高代码的可重用性 
 4. 提高代码的灵活性 

二 函数与语法

 1. 非结构化编程 所有的逻辑,都写在一起,杂乱无章 
 2. 结构化编程 
     函数是结构化编程的代表 
     将重复的代码,或拥有独立功能的代码抽取出来 
 函数定义:函数是由一组代码组成,完成一个特定的任务 
 语法结构: 
     关键字:def def 函数名(): 
         函数体(过程) 
 函数的调用: 
     函数名() 

三 函数定义的位置

 函数的定义(函数的创建) 函数定义(函数的概念) 
 1. 没有缩进(一行的行首),参考全局变量 
 2. 任何函数的内部,参考局部变量 

四 函数的运行机制

 运行流程 
 1. 编译错误(语法) 
 2. 运行时错误 
     执行到错误行,才会报错 
 流程:(运行) 
     1. 先执行函数调用处的代码 
     2. 根据函数名找到函数定义的位置 
     3. 执行函数内部的代码 
     4. **流程返回到函数的调用出 
     函数定义在函数调用之前 

五 函数的结构

1. 函数的定义 
    函数的创建,函数的声明 
    def fun(参数): 
2. 内容: 
    函数体,过程 
3. 函数的返回值: 
    return 值 (默认填充return None) 

六 函数的参数

参数的划分: 
1. 形式参数:Parameter---简称形参 
    创建函数时,小括号内的参数 
    相当于函数内部的一个局部变量 
    传值的过程相当于赋值的过程 
    没有定义任何参数:无参 
2. 实际参数:Argument---简称实参 
    调用函数时,小括号内传递的参数 
    一定是一个确定的值 
注意: 
    1. 如果定义多个形参,要用逗号隔开 
    2. 所有的形式参数,在一次调用中只能被赋值一次 
    3. 函数的定义中,形参只能出现一次 

七 位置参数

根据参数的位置,一一对应的传递参数(相对于形参和实参)
1. 如果定义了形式参数,则必须给出实际参数 
2. 参数必须一一对应,不能多也不能少 
3. 形参和实参之间注意顺序 

def fun(a,b,c): 
    # a和b应该是个字符串, c是个列表 
    print(a,b,c) 
fun(1,2,3)

八 关键字参数

定义了关键字的参数(相对实参) 
1. 根据实参中定义的关键字,和形参中对应的参数一一对应 
2. 不能多也不能少 
3. 关键字参数不能重复的给某个形参赋值 
def fun(a,b,c): 
    print(a,b,c) 
fun(c=3,b=2,a=1)

def fun(a,b):
    pass 
fun(a=1,a=2) # 错误 

九 默认参数

定义了默认值的参数(相对形参) 
1. 默认参数会在形参的位置设置默认值 
2. 如果传递了实际参数,则使用对应的实际参数 
3. 如果没有传递实际参数,则使用默认参数 
4. 注意:默认参数后不能出现位置参数 
def fun(a=10,b=20,c=30): 
    print(a,b,c) 
fun(1,2,c=3) 
fun() 

十 可变长参数

也称为收集参数 
可以收集多个参数 
区分于序列解包 
1. *args 
    将参数获得,并打包成一个元组 
    实参以位置参数传递(只支持位置参数传值) 
2. **kwargs 
    只支持使用关键字参数传值,并将结果打包成字典,切关键字作为字典的键,关键字对应的值作为字典的值 
注意:可变长参数在定义中每种只能出现一个 

def fun(*a): 
    print(a) # 元组 
    for i in a: 
        print(i) 
fun(1,2,3,4,5) 
============================== 
def fun(**kwargs): 
    print(kwargs) 
fun(a=1,b=2,c=3) 

十一 混用形式

1. 关键字参数+位置参数: 
    位置参数只能出现在关键字参数之前 
    原因:编译器认为参数中第一次出现=号的形式,之后的所有参数都应该有=号 
    不能重复给某一个形参赋值 
2. 位置参数+可变长参数: 
    位置参数可以写在可变长参数之后,但是此时必须通过关键字参数传递实参 
3. 默认参数+可变长参数: 
    没有具体要求