0
点赞
收藏
分享

微信扫一扫

Python快速编程入门#学习笔记06# |第6章 :函数(学生管理系统)

未定义变量 2022-02-16 阅读 53

目录


1.1 函数概述

函数组织好的、实现单一功能相关联功能代码段。我们可以将函数视为一段有名字的代码,这类代码可以在需要的地方以“函数名()”的形式调用。

函数的优势

  • 使用函数来编程可使程序模块化,减少了冗余的代码
  • 让程序结构更为清晰
  • 能提高开发人员的编程效率
  • 方便后期的维护扩展

可以更高效地实现代码重用,复制粘贴也可以实现代码重复使用,但是效率低。

在这里插入图片描述

# # 方式1:print()打印
# # 打印边长为2个星号的正方形
# for i in range(2):
#     for j in range(2):
#         print('*', end='')
#     print()
#
# # 打印边长为3个星号的正方形
# for i in range(3):
#     for j in range(3):
#         print('*', end='')
#     print()
#
# # 打印边长为4个星号的正方形
# for i in range(4):
#     for j in range(4):
#         print('*', end='')
#     print()


# 方式2:函数调用
def print_t(lenth):
    for i in range(lenth):          # i 代表 行
        for j in range(lenth):      # j 代表 列(x轴)
            print('*', end='')
        print('')

print_t(2)							# 函数调用
print_t(3)
print_t(4)

# print(print_t(2))
# print(print_t(3))
# print(print_t(4))

在这里插入图片描述

1.2 定义函数和调用

原则: 先定义函数,再调用函数

函数的定义

前面使用的 print() 函数和 input() 都是 Python 的内置函数,这些函数由 Python 定义。

开发人员也可以根据自己的需求定义函数,Python中使用关键字def来定义函数,其语法格式如下:
在这里插入图片描述
在这里插入图片描述

示例:定义一个计算两数之和的函数


# 无参数函数的定义
def add():
    result = 11 + 22
    print(result)

def add2(a,b):
    result2 = a + b
    print(result2)

add()           # 函数的调用
add2(100,233)   # 调用

函数的调用

函数在定义完成后不会立刻执行,直到被程序调用时才会执行。

函数调用的语法格式如下:

函数名 ([参数列表])

def add2(a,b):
    result2 = a + b
    print(result2)

add2(100,233)   # 调用

调用函数,计算机程序经历了以下4个步骤:

  • 程序在调用函数的位置暂停执行。
  • 将数据传递给函数参数
  • 执行函数体中的语句
  • 程序回到暂停处继续执行。

函数内部也可以调用其他函数,这被称之为函数的嵌套调用。

示例如下:

# 无参数函数的定义
def add():
    result = 11 + 22
    print(result)

def add2(a,b):
    result2 = a + b
    print(result2)
    add()                   # 函数嵌套调用

    # 函数的调用
add2(100,233)   # 调用

扩展

函数的嵌套定义

函数在定义时可以在其内部嵌套定义另外一个函数,此时嵌套的函数被称为外层函数,被嵌套的函数称为内层函数

示例如下:

# 函数的嵌套定义
# 注意:外层函数无法直接调用内层函数,只能在外层函数中调用内层函数
def add2(a,b):
    result2 = a + b
    print(result2)
    def add():                                  # 定义add()内层函数
        print('test:函数嵌套定义的测试!')
    add()                                       # 调用add()内层函数

add2(100,233)   # 调用

注意:外层函数无法直接调用内层函数,只能在外层函数中调用内层函数

1.3 参数的传递

我们通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。函数的参数传递是指将实际参数传递给形式参数的过程。

函数参数的传递可以分为:

  • 位置参数的传递
  • 关键字参数的传递
  • 默认参数参数的传递
  • 参数的打包解包
  • 混合传递

位置参数的传递

位置参数的传递

位置参数:调用函数时根据函数定义的实际参数位置来依次传递给形式参数,即将第1个实际参数传递个第1个形式参数,将第2个实际参数传递给第2个形式参数。

# 位置参数的传递
# 位置参数:调用函数时根据函数定义的参数位置来传递参数
def user_info(name, age, gender):
    print(f'名字是:{name}, 年龄是:{age}, 性别是:{gender}')

user_info('小明', 42, '男')

注意:传递和定义的参数的 顺序个数必须一致

user_info('小明', '男', 42, 12)   # 参数的个数不一致会报错
user_info('小明', '男', 42)       # 参数顺序不一致不会报错,但数据无意义

关键字参数的传递

背景:若函数的参数数量较多,开发者很难记住每个参数的作用,再按照位置参数是不可取的。

此时可以使用关键字参数的方式传递参数。

关键字参数:" = " or "形参=实参"形式指定,让函数更加清晰,同时清除了参数的顺序需求。

注意:如果有位置参数和关键字参数同时存在时,应该将位置参数放在前面,关键字参数仍然不考虑顺序

# 关键字参数的传递
# 关键字参数:"键 = 值"形式指定,让函数更加清晰,同时清除了参数的顺序需求。
# 注意:如果有位置参数和关键字参数同时存在时,应该将位置参数放在前面,关键字参数仍然不考虑顺序


def user_info(name, age, gender):
    print(f'名字是:{name}, 年龄是:{age}, 性别是:{gender}')

user_info(name='小明', gender='男',age=13)
user_info('王芳',gender='女', age=20)



仅限制位置形参 使用斜杠符号"/ " ,说明指定位置的形参只能采用位置参数方式传递实参。

示例如下:

# 仅限位置形参
def user_info(name, age, /, gender):
    print(f'名字是:{name}, 年龄是:{age}, 性别是:{gender}')

user_info('王芳',12, gender='男')

默认(缺省)参数的传递

默认参数简介:在函数定义的时候,给形式参数赋个默认值;在函数调用的时候可以根据需要选择是否使用默认值,若不需要,实参可重新给形参指定一个参数

注意:默认参数的位置必须在位置参数的后面(末尾)

# 默认(缺省)参数 传递
# 介绍:在函数定义的时候,给形式参数赋个默认值;在函数调用的时候可以根据需要选择是否使用默认值,若不需要,实参可重新给形参指定一个参数
# 注意:默认参数的位置必须在位置参数的后面(末尾)

def user_info(name, age, gender='女'):
    print(f'名字是:{name}, 年龄是:{age}, 性别是:{gender}')

user_info('王芳', 12)                       # 使用默认参数
user_info('王芳', 12, gender='男')          # 修改默认参数值

运行程序,输出结果如下:
在这里插入图片描述

参数的打包与解包

混合传递

1.4 函数的返回值

1.5 变量的作用域

局部变量和全局变量

global和nonlocal关键字

1.6 特殊形式的函数

递归函数

匿名函数

实训案例

实训案例1- 峡谷猜想

实训案例2-饮品自动售货机

实训案例3-兔子数列

实训案例4-归并排序

阶段案例-学生管理系统

举报

相关推荐

0 条评论