目录
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='男') # 修改默认参数值
运行程序,输出结果如下: