【Python基础篇】【15.函数】(附案例,源码)超详细的保姆级攻略


函数

就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用

函数定义

在这里插入图片描述

''' 定义函数 '''
# def  定义函数的关键字
# func 函数名字:要满不足标识符的命名规则
def func():
    # 函数体
    # 函数块下方用来书写我们的代码逻辑
    print('人生苦短,我用python')
    return 'python'

# 函数必须先声明在调用
# 函数名() 只有调用之后函数体里面的代码逻辑才会被执行
func()

''' 示例 - 计算1-100之间值的函数 '''
# 声明函数
def get_sum():
    total = 0
    for i in range(100):
        total += i
    print(total)
# 调用函数
get_sum()

函数返回值

程序运行到所遇到的第一个return即返回(退出def块),实现函数值的返回,不会再运行第二个return。返回时可附带一个返回值,由return后面的参数指定。

return 之后函数就结束了,不会再执行后续代码

''' 函数 return 的返回值'''
# 1. 将 `y = kx + b` 封装成一个函数,其中 `k=5` , `b=6`  , 假设 `x=5`
# 2. 在函数下方调用线性方程函数,打印结果
def f(x):
    y = 5 * x + 6
    print('我还没有遇到return')
    return y
    print('我已经遇到过return')
    # 是用于返回数据
    # 函数和外界是数据不互通的 假设函数外部需要获取到函数内部的值,只能通过 'return' 返回这个值才可以得到
    # 当函数没有return返回值结果, 在调用函数的时候打印结果就会是None
    # 函数一旦遇到return, 就会立马结束整个函数的执行
print(f(7))

''' 示例 '''
# 利用函数, 求两个数的最大值
def max_num(num1,num2):
    if num1 > num2:
        return num1    # 函数一旦执行到了return返回值会立马结束整个函数
    else:
        return num2
print(max_num(8,7))

''' 示例 '''
def sum_test(n):
    sum = 0
    for x in range(1, n + 1):
        sum += x
    return sum

print(sum_test(10))  # 55


''' 返回值形式 '''
# 1.无参数,无返回值  他是没有任何作用的
def f():
    y = 5 * 6 + 7

# 2. 无参数,有返回值
def f():     # 被定死了 没有任何复用性可言
    y = 5 * 6 + 7
    return y

#  3.有参数,无返回值
def f(x):
    y = 5 * x + 7   # 函数内部的无法传递给函数外部 他也是没有任何作用

# 4.有参数,有返回值    最常用的
def f(x):
    y = 5 * x + 6
    return y

函数参数

位置参数

Python 处理参数的方式要比其他语言更加灵活。其中,最熟悉的参数类型是位置参数,传入参数的值是按照顺序依次复制过去的。

# 根据形式参数的位置传递的参数, 叫做位置参数, 一一对应的关系
def f(x, k, b):
    y = k * x + b
    print(x)
    print(k)
    print(b)
    return y
# print(f(1,4,5))
print(f(7,6,9))

''' 
需求 : y = k * x +b 中 `k` 与 `b` 也不固定
'''
def f(x, k, b):
    y = k * x + b
    print(y) # 31

f(5, 5, 6)  
'''
尽管这种方式很常见,但是位置参数的一个弊端是必须熟记每个位置的参数的含义。在调用函数 `f()` 时误把最后一个参数当作第一个参数,会得到完全不同的结果
'''

''' 示例 '''
# 利用函数,求两个数的最大值
def max_num(num1, num2):  # 在定义函数的时候传递的参数叫做形式参数,没有偶实际意义的,只是用于占位
    if num1 > num2:
        max_nums = num1  # 最大值
    else:
        max_nums = num2
    return max_nums

# 调用函数
print(max_num(1, 3))  # 实际参数,如果函数定义的时候设置了参数,那么函数调用时候一定要进行传参,数量要一致

关键字参数

# 为了避免位置参数带来的混乱,调用参数时可以指定对应参数的名字,
# 甚至可以采用与函数定义不同的顺序调用
def f(x, k, b):
    y = k * x + b
    print(x)
    print(k)
    print(b)
    return y
# print(f(x=1,k=4,b=5))
print(f(k=5,x=5,b=6))

# 也可以把位置参数和关键字参数混合起来。首先,实例化参数 ,然后对参数使用关键字参数的方式
def f(x, k, b):
    print("x:{} k:{} b:{}".format(x, k, b))  # x:5 k:5 b:6
    y = k * x + b
    return y

f(5, k=5, b=6)
# 如果同时出现两种参数形式,首先应该考虑的是位置参数

''' 位置参数和关键字参数进行混用 '''
def f(x, k, b):
    y = k * x + b
    print(x)
    print(k)
    print(b)
    return y

print(f(8, k=6, b=9))
# #每个参数只能接受一个
print(f(8, x=7, k=6))
# 如果在进行位置参数和关键字参数的混用 位置参数必须写在关键字参数的前面
print(f(x=7, 4, b=5))  # 报错

默认参数

''' 默认参数 '''
# 在定义函数的时候, 设置了参数的值, 那么就叫做默认参数
def f(x=4, k=7, b=5):  # 默认参数  位置参数必须写在关键字参数的前面
    print(x)
    print(k)
    print(b)
    y = k * x + b
    return y

print(f())

""" 修改我的默认参数 """
# 通过位置参数进行修改  会优先使用位置参数
print(f(9, 8, 7))
# 别人有我就使用别人的 别人没有我就使用自己的
print(f(9))
# 通过关键字参数进行修改 优先使用关键字参数
print(f(x=7, k=9, b=6))
print(f(k=9))  # 别人有我就使用别人的 别人没有我就使用自己的 
print(f())
# 混合修改
print(f(7, k=9, b=7))

不确定长度参数

*args
# 用 * 收集位置参数
# int * 特殊符号 有特殊的作用, 在定义函数的括号里面,用于收集所有的位置参数
# 在输出 或者是运行代码的过程中 是解包 包:元组、列表、迭代器、生成器
def print_args(*args):
    # * 解包的标志
    print('位置参数的类型:', type(args))
    print('位置参数的内容:', args)
    
# *args 不定长参数 接受所有传进来的位置参数  <class 'tuple'> 元组
def get_num(*args):
    print(args)
    print(type(args))
    total = 0
    for i in args:
        total += i
    return total

print(get_num(70,80,60,40,50,50,60,40,58))
**kwargs

使用两个星号可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字典的值

# ** kwargs   接受所有传进来的关键字参数  <class 'dict'> 字典类型
def get_nums(**kwargs):
    print(kwargs)
    print(type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My.ICBM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值