- 📢博客主页:盾山狂热粉的博客_CSDN博客-C、C++语言,机器视觉领域博主
- 📢努力努力再努力嗷~~~✨
💡大纲
⭕在解决一个复杂问题的时候,顺序式编程在可读性和代码复用性方面的体验感很差,可以采用面向过程的编程。
👉掌握函数的定义和调用
👉掌握位置参数、关键字参数和参数默认值的使用
👉掌握参数返回值的定义和使用
一、函数的定义及调用
(一)为什么要用函数
提高代码复用性,简化代码框架,把需要重复利用的代码抽象出来,封装为函数
采用模块化设计的思想,将复杂的大问题分解成一系列小问题来解决
利于代码的维护和管理,对于某个函数的修改相对于顺序式程序的修改更简单方便
(二)创建和调用函数
💡整体结构:输入---处理---输出
1、函数的定义
def 函数名(参数):
函数体
return 返回值
2、三要素:参数、函数体、返回值
3、函数的调用
# 求正方形的面积
def fun(side):
area = pow(side, 2)
return area
area = fun(5)
area # 25
(三)参数
1、形参与实参
👉形参(缺省参数、不定长参数):函数定义时的参数---变量名
👉实参(位置参数、关键字参数):函数调用时的参数---变量的值
2、位置参数
👉严格按照位置顺序,用实参对形参进行赋值(关联)
👉实参与形参个数必须一一对应,一个不能多,一个不能少
👉一般用在参数比较少的时候
def fun(x, y, z):
print(x, y, z)
fun(1, 2, 3) # x = 1; y = 2; z = 3
⭕在/左边必须是位置参数
3、关键字参数
👉打破位置限制,以形参 = 实参的形式进行值的传递
👉实参与形参数量上一一对应
👉多用在参数比较多的场合
def fun(x, y, z):
print(x, y, z)
fun(y=1, z=2, x=3) # x = 3; y = 1; z = 2
👉位置参数可以与关键字参数混合使用,位置参数必须放在关键字参数前面
👉不能为同一个形参重复传值
fun(1, z=2, y=3) # 1 3 2
fun(1, z=2, x=3) # 报错,重复给x赋值
⭕*左边可以是任意类型的参数,右边必须是关键字参数(不然会被打包)
4、默认参数
👉在定义阶段就给形参赋值
👉默认参数必须放在非默认参数后面
👉调用函数时,可以不对该形参传值;也可以按正常的形参进行传值,会覆盖默认值
👉默认参数赋值等号两侧不需加空格
def stu(name, age, sex="male"):
print(name, age, sex)
stu("努力君", 24) # 努力君 24 male
stu("幽默君", 25, "female") # 幽默君 25 female
⚠️默认参数应该设置为不可变类型(数字、字符串、元组)
💡让参数变成可选的
def name(first, last, middle=None):
if middle:
return first+middle+last
else:
return first+last
print(name("马", "梅")) # 马梅
print(name("马", "梅", "冬")) # 马冬梅
5、元组型不定长参数 *args(元组的打包与解包)
💡不知道会传过来多少参数,已知数量的形参正常赋值,多余的传给*args
💡不知道会传过来多少参数,*args在前,后面的参数得用关键字参数,这里可以解释为什么*左边可以是任意类型的参数,右边必须是关键字参数
def fun(x, y, z, *args):
print(x, y ,z)
print(args)
fun(1, 2, 3, 4, 5, 6) # 多余的参数,打包传递给args
'''
1 2 3
(4, 5, 6)
'''
💡也可以将实参打散,使用*对其进行解包
args = (1, 2,