函数基础简介及函数参数

一:函数是什么

(1)函数类似于工具的集合 通过编造不同的工具(函数) 在不同的地方使用:

 

二:为什么用到函数

(1)减少代码的冗余

(2)提升代码的架构

(3)功能易扩展 当功能需要扩展的时候 在原有函数上进行修改即可

 

 

三:函数基础知识
【1

函数的定义方式:

(1)def 函数名():

  (1)def是定义函数的关键字

  (2)函数名定义方式与变量名一样

  (3)函数名尽量做到见名知意、

PS:

(1)函数在定义阶段 只检测语法 不检测函数子代码块

(2)只有当调用函数的时候 才会调用函数里的子代码块

 

(2)函数的调用方式

  (1)函数名+()

  (2)函数名遇到括号即会立马调用函数

  (3)函数先被调用 在执行调用之后的代码块

  (4)在python中如果函数名后面跟上括号表示调用的是函数执行结果

  (5)在Python中如果函数名后面不加括号表示调用的是函数本身

PS:函数必须本身先被定义 定义成功之后 可以在任意位置调用(函数类比成一个工具 假如工具都不存在 怎么调用呢)

例如

def func(x):
    return x
print(func)       # <function func at 0x0000000002042E18> 表示的一串值 通过该值可以找到对应的代码块
print(func('SR'))  # SR 函数的调用结果

 

【2】

函数的分类:

(1)内置函数:

  (1)其是python本身帮我们定义的函数 我们可以直接调用 (len range等)

(2)自定义函数

  (1)程序员根据自己的需求 手工编写的函数

 

【3】函数的返回值:

return

作用:

(1)通常执行函数里的子代码块 将执行的结果返回给调用者

(2)需要关闭函数的时候

 

返回值的情况:

(1)不写return 默认返回None

(2)只写return

(3)写return 反正None

(3)写return返回一个值

(4)写return返回多个值

例如:

 

# 不写return
def func():
    print('SR')  # SR
res = func()
print(res)       # None

# 只写return
def func1():
    number = [1,2,3,4,]
    while True:
        for i in number:
            if i == 2:
                return
                print('这一行永远不会被执行')  # 其被上层的return给中止了
            print(i)  # 1
res = func1()
print(res)           # None

#写return 返回None
def func2():
    return None
res = func2()
print(res)  # None

#写return返回一个值
def span():
    return 123
def span1():
    return 'SR'
def span2():
    return [1,2,3,4]
def span3():
    return {'name':'SR','age':18}
def span4():
    return (1,2,3,4,)
print(span(),span1(),span2(),span3(),span4())  # 123 SR [1, 2, 3, 4] {'name': 'SR', 'age': 18} (1, 2, 3, 4)


#写return返回多个值
def func():
    return 1,2,3,4
res = func()
print(res)  # (1, 2, 3, 4) 返回结果为元组 不希望返回结果被修改
Python返回值演示

 

 

 

PS:

(1)无论写不写return 都会有返回值

(2)如果不写返回值 则返回值为None

(3)返回多个值的时候 如果不希望返回值为元组 可以在返回值手工定义返回类型

例如:

def func():
    return [1,2,3,4]
res = func()
print(res)  # [1, 2, 3, 4]

 

【4】函数的参数

(1)参数的分类

  (1)形参:函数定义阶段 括号内定义的名称 有点类似于变量名

  (2)实参:函数调用阶段 括号内传输的值 有点类似于变量值

PS:函数在调用的时候 将实参绑定到形参上 调用结束绑定解除

 

(2)函数的简易结构

例如: 

def func(x,y):
    """
    该函数的作用
    :param x: 对形参x的解释
    :param y: 对形参y的解释
    :return: 对函数返回值的解释
    """
    代码模块:
    return 

 

【5】参数的类型:

(1)位置参数:

基本概念:

(1)在函数定义阶段 在括号内赋予的参数名

(2)在函数调用阶段 在括号内输入的参数值

 

函数传参的方法:

(1)实参与形参一一对应:

例如:

def func(x,y):
    if x > y:
        return x
    return y
print(func(10,20))  # 20

PS:在该方法下 形参与实参的个数必须相等

 

(2)关键字传参:

基本概念

(1)在函数定义阶段 在括号内赋予的参数名

(2)在函数调用阶段 在括号内输入的参数值前面绑定参数值

例如:

def func(x,y):
    if x > y:
        return x
    return y
print(func(x=20,y=10))  # 20

 

(3)混合传参:

(1)在函数定义阶段 在括号内赋予的参数名

(2)在函数调用阶段 在括号内输入的参数值以及参数值前面绑定参数名

(3)但是必须保证位置参数必须在关键字参数前面

例如:

def func(x,y):
    if x > y:
        return x
    return y
print(func(20,y=10))  # 20
print(func(x=20,10))  # 报错 关键字参数在位置参数之前

 

(2)默认值参数:

基本概念:在函数定义阶段 形参就已经被赋值了

特点:

(1)在调用的时候 实参可以不必赋值 如果不赋值默认使用形参自己定义的值

(2)在调用的时候 实参可以赋值 如果实参赋值则会使用实参赋值作为自己的值

(3)在定义阶段 默认值必须在位置参数后面

(4)在函数中的某参数经常使用的时候且使用值基本保持不变 可以考虑将该参数变成默认值

例如:

位置参数演示 

 

 默认值参数的使用注意事项:

默认值参数套用可变类型

 

 

可变长参数:

作用:

(1)在定义阶段 可以用*和**匹配溢出的实参

(2)在调用阶段 实参的个数可以任意

 

特点:

*

在定义阶段 

(1)其可以将多余的位置实参 统一用元组表示

(2)其只能接受位置实参 不能接受关键字实参

例如:

def func(x,y,*z):
    print(x,y,z)
print(func(1,2,3,4,5,6,7))  # 1 2 (3, 4, 5, 6, 7)

 

(2)在调用阶段 

(1)实参会将多余的值打散 赋值给形参

(2)在形参中只能接受位置实参 不能接受关键字实参

(3)实参内部只能是列表 集合 元组 字符串等类型(本质就是for循环)

例如:

def func (x,y):
    print(x,y)
func(*[1,2,])  # 1 2

 

**

在形参中:

(1)将溢出的关键字实参 以字典的形式传给后面的变量名

(2)其中关键字即为字典的key 关键字对应的值为字典的value

例如:

def func(x,y,**z):
    print(x,y,z)
func(1,2,name='SR',age=18)  # 1 2 {'name': 'SR', 'age': 18}

在实参中:

(1)会将字典拆分成 以关键字的实参赋值给函数的变量名

例如:

def func(name,age):
    print(name,age)
user_info = {'name':'SR','age':18}  # key必须与上述形参名保持一致
func(**user_info)                   # SR 18

总结:

*

(1)在形参中其会将多余的位置实参以元组的形式赋值给*后面的函数名

(2)在实参中岂会将字符串 列表 元组 集合 打散成位置实参 传给形参

**

(1)在形参中岂会将多余的关键字实参组成字典 赋值给后面的函数名

(2)在实参中其会将字典拆分成关键字实参 赋值给形参

 

posted @ 2019-07-09 16:34  SR丶  阅读(657)  评论(0编辑  收藏  举报