本文目录
  1. 1.函数入门
  2. 2.函数的参数说明
  3. 3.函数的返回值
  4. 4. 函数的说明文档
  5. 5.函数的嵌套
  6. 6.变量的作用域
  7. 7.多返回值
  8. 8.多种参数传递
  9. 9.匿名函数
  10. 10.递归

Python 函数与参数

掌握函数定义、参数传递、返回值、作用域、匿名函数与递归。

1.函数入门

#1.定义函数
# 语法
# def 函数名():
#     函数体
#如果只定义不调用,只是保存了一个函数,不会执行这个函数

#2.调用函数:调用函数就是执行函数里面的代码
#语法
#函数名()

#练习:
# 1.定义一个函数实现xxxx效果
#定义函数
def avg_xy ():
    x=int(input("请输入一个较小的数字"))
    y=int(input("请输入一个较大的数字"))
    count=y-x+1
    sum=0
    while x<=y:
        sum+=x
        x+=1
    print(f"平均值为{sum/count}")
#调用函数
avg_xy()

2.函数的参数说明

#先写死,再写活
#先写定一个数字,再把数字改成形参

#先定义一个求1-100的和的函数

#再把1和100改成x,y,
# 函数就变成了:求两个任意值的函数
#这两个值在调用函数时输入

#练习 求x~y平均值函数
#定义函数
def avg_xy (x,y):
    count=y-x+1
    sum=0
    while x<=y:
        sum+=x
        x+=1
    print(f"平均值为{sum/count}")
#调用函数
avg_xy(1,100)
avg_xy(1,50)
avg_xy(50,100)

3.函数的返回值

# 总结:
# 1.想让函数运行的结果被外部获取到,return  结果
# 2.函数return后面的代码不会执行
# 3.return【内容】,return也可以单独使用
# 4.如果不写return或者return后面没有内容。函数的结果是none


def avg_xy(x, y):
    total = 0
    while x <= y:
        total += x
        x += 1
    return total


print(avg_xy(1, 100))

# return后面的代码是不会执行的(可以用于中断函数)
# 函数都是有返回值的,每个函数都会在最后一行默认加上return none

4. 函数的说明文档

def get_sum(x,y):
    """
    这是一个非常简单的函数
    :param x: 一个数
    :param y: 另一个数
    :return: 两数相加的结果
    """
    return x+y
#函数说明文档就是高级注释

print(get_sum(1,3))

5.函数的嵌套

import random

# 1 生成一个长度为10的随时列表(1~10)列表
def get_random_list():
    """
    生成一个1-10的10位的列表
    :return: 这个列表
    """
    ran_l1=[random.randint(1,10) for i in range(10)]
    return ran_l1

#2 把一个列表里面的内容有高到低排序
def sort_list(sort_l2:list):
    """
    把一个列表从大到小排序
    :param sort_l2: 无序列表
    :return: 排序好的列表
    """
    sort_l2.sort(reverse=True)
    return sort_l2

#3.把新建一个函数,完成上面两个函数的内容
def get_random_sort():
    l1=get_random_list()
    l2=sort_list(l1)
    return l2

print(get_random_sort())

6.变量的作用域

#局部变量无法在全局进行访问
#如果想在局部修改全局
#global num  表名修改全局变量
#如果要在全局使用局部变量 只能使用return

num=1
def x():
    global num
    num = 10
    age = 20
    return age
a = x()

print(num,a)

7.多返回值

#1.直接写
# return x,y

8.多种参数传递

# 位置参数 形参和实参位置和个数一一对应

# 关键字参数 通过”键=值“传递,可以忽略位置顺序
# 键就是定义函数的形参
# 也可以位置和关键字搭配使用

# 缺省参数——默认值参数
# 如果不传递默认值参数,就以默认值为主,传递了就替换
# 默认值可以不传递
# 默认值一般写在最后

# 不定长参数——参数的个数不确定,可能有也可能没有
# 位置传递  *args——接收会合并为元组
# 关键字传递 **kwargs——会使用字典接收
# 调用x=1  输出 {"x":1}

# 练习
# 1.定义打印个人信息
def person(name, age, gender):
    print(f"{name}年龄{age}性别{gender}")


# 1.用位置参数传递
person("张三", "18", "男")

# 2.通过关键字传递参数
person(name="美美", gender="女", age=17)

# 3.通过位置或关键字传递
person("碗", gender="男", age=22)


# 4.打印个人信息,gender可选择传递
def person(name, age, gender="女"):
    print(f"{name}年龄{age}性别{gender}")


person(age=16, name="小王")


# 5.定义一个函数求任意数字的和
def total(*args):
    n = sum(args)
    return n


print(total(1, 2, 3, 4, 5))


def person(**kwargs):
    print(kwargs)

9.匿名函数

lambda 表达式

#为什么要学习:如果一个函数只有一行表达式,就直接使用lambda定义
#语法
f=lambda a,b:a+b
#自带return效果

#调用函数
print(f(1,2))

#字典的排序
students=[
    {'name':'tom','age':20},
    {'name':'tm','age':22},
    {'name':'to','age':21},
]
#表示取列表中每一个字典的age的值,params表示每一个字典,params['age']表示age的值
res=sorted(students,key=lambda params:params['age'])
print(res)

10.递归

三要素:1.将复杂的内容做成重复的相同的事

​ 2.出口

​ 3.有返回值

# 递归
# 1.求1-10所有数的和
def get_sum(n):
    if n == 1:
        return 1
    return get_sum(n - 1) + n


print(get_sum(10))


# 2.求1-10的阶乘
def get_jc(n):
    if n == 1:
        return 1
    return n * get_jc(n - 1)


print(get_jc(10))

#斐波那契数列
def f(n):
    if n==1:
        return 1
    if n==2:
        return 1
    return f(n-1)+f(n-2)

print(f(9))

#强化需求:求一个字典里有多少键
department={
    '黑马程序员':{
        '西安校区':3,
        '北京校区':11,
    },
    "博学谷":{"狂野大模型":3},
    "传智大学":1
}

#1.新建一个函数用于求字典有多少键
def get_partment(d):
    total =0
    total += len(d)
    #2.判断值是否还为字典
    for i in d:
        #3.如果值为字典继续调用函数统计字典的值
        if type(d[i]) is dict:
            total += get_partment(d[i])
   #4.返回值为键的个数
    return total


print(get_partment(department))

#2.统计字典的所有值的和
def get_dpt_num(d):
    total = 0
    for i in d:
        if type(d[i]) is int:
            total += d[i]
        else:
            total += get_dpt_num(d[i])
    return total