当前位置: 首页 > article >正文

使用函数制作一个简易的计算机

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:机器学习

🅰

请添加图片描述


文章目录

    • 🅰
    • 前言
    • 🎶一、函数的定义
    • 🎶二、函数的调用
    • 🎶三、函数的返回值
    • 🎶 四、函数的参数
      • 1.实参和形参
      • 2.参数类型
        • 结束语🥇


前言

  在实际开发过程中,经常会遇到很多完全相同或非常相似的操作。此时,可以将实现类似操作的代码封装为函数,然后在需要的地方调用该函数。这样不仅可以实现代码的复用,还可以使代码更有条理性,增加代码的可靠性。本项目将详细介绍Python中函数的使用方法。


🎶一、函数的定义


   简易计算器要实现的功能是对两个数进行加法、减法、乘法或除法运算,每种运算都可以通过一个函数实现。本任务将带领大家编写Python程序,制作简易计算器。

   函数是一段具有特定功能的、可重复使用的代码,它能够提高程序的模块化和代码的复用率。因此,可以将不同功能的函数看作是不同形状的积木,可进行随意拼接和重复使用。Python提供了很多内置函数,如print()、input()、int()函数等,以及标准库函数,如math库中的sqrt()函数等。除此之外,用户还可以自己定义函数,称为自定义函数。

   Python中定义函数的基本语法格式如下。在实际开发过程中,为提高代码的可读性,会经常使用以下3种命名方式:

def 函数名([形式参数列表]):
函数体

  其中,def是Python的关键字,用于定义函数;函数名可以是任何合法的Python标识符;形式参数列表(简称形参)是调用该函数时传递给函数的参数,可以是零个、一个或多个,当传递多个参数时各参数之间使用逗号隔开,[ ]表示可选内容;函数体是每次调用函数执行的代码,由一行或多行语句组成。定义函数时须注意以下几点。
  (1)当函数参数为零个时,也必须保留一对空的圆括号。
  (2)圆括号后面的冒号不能省略。
  (3)函数体相对于def关键字必须保持一定的空格缩进。
  例如,定义名为eat()的函数,该函数的功能是输出“吃饭”字符串,可以用下面代码实现。

def eat():
        print('吃饭')

🎶二、函数的调用


   函数定义后,须调用函数才能执行函数体,实现特定的功能。函数调用的基本语法格式如下 作用是同时将1赋值给变量a、b和c,相当于:

函数名([实际参数列表])

其中,实际参数列表(简称实参)表示要传递给函数的具体值。
【例】 小蓝的日常活动
【问题分析】 定义函数封装日常活动,然后按作息时间调用函数。例如,定义eat()函数,输出“吃 饭…”,定义school()函数输出“上课…”等。

def eat():				#定义eat()函数,表示吃饭
    print('吃饭......')
def school():				#定义school()函数,表示上课
    print('上课......')
def homework():				#定义homework()函数,表示做作业
    print('做作业......')
def exercise():				#定义exercise()函数,表示运动
    print('运动......')
print('小蓝的日常活动')
#按作息时间调用函数
eat()
school()
eat()
school()
exercise()
eat()
homework()

运行结果:
在这里插入图片描述
   由于函数只有在调用时才执行,因此,前面定义函数的代码不会直接执行。当调用函数时,当前执行暂停,转去执行函数体。当函数执行完毕后,重新回到调用函数位置,继续执行后面的语句。


🎶三、函数的返回值


  函数除了可以在函数体中直接输出数据,还可以返回一个或多个值,称为函数的返回值。在Python中,函数使用return语句返回值。
  return语句用于退出函数并将程序返回到函数调用的位置继续执行,同时返回零个、一个或多个值。

【例】 小蓝的日常活动。
【问题分析】 定义函数封装日常活动,然后按作息时间调用函数。例如,定义eat()函数,
输出“吃 饭…”,定义school()函数输出“上课…”等。
【运行代码】

def eat(time):					#定义eat()函数,参数为时间time
    #如果time在6点~8点,返回吃早饭
    if time >= 6 and time <= 8:
        return '{}点吃早饭......'.format(time)
    #如果time在11点~13点,返回吃午饭
    elif time >= 11 and time <= 13:
        return '{}点吃午饭......'.format(time)
    #如果time在17点~19点,返回吃晚饭
    elif time >= 17 and time <= 19:
        return '{}点吃晚饭......'.format(time)
    else:						#不满足上述条件,返回不在吃饭时间
        return '不在吃饭时间'
time = int(input('请输入时间:'))	                             #输入时间,并转换为int型赋给time
print(eat(time))				              #调用eat()函数,输出返回值

运行结果:
在这里插入图片描述
   如果函数没有return语句,将默认以return None结束,即返回空值。函数也可以使用return语句返回多个值,每个值之间使用逗号隔开。函数调用后,返回值以元组形式保存。
   【例】 计算小蓝的最低成绩、最高成绩和总成绩。
   【问题分析】 定义函数score_compute(),参数为小蓝的各科成绩,使用min()函数计算最小值,max()函数计算最大值,然后返回最小值、最大值及总成绩。
【运行代码】

#定义score_compute()函数
def score_compute(chinese, math, english):
    #使用min()函数计算最小值,并赋给score_min
    score_min = min(chinese, math, english)
    #使用max()函数计算最大值,并赋给score_max
    score_max = max(chinese, math, english)
    #计算总成绩,并赋给score_total
    score_total = chinese + math + english
    #返回score_min、score_max和score_total
    return score_min, score_max, score_total
    #输入各科成绩
chinese = float(input('请输入语文成绩:'))
math = float(input('请输入数学成绩:'))
english = float(input('请输入英语成绩:'))
#调用score_compute()函数,并将返回值赋给score
score = score_compute(chinese, math, english)
print(score, type(score))			 #输出score及其类型
print('小蓝的最低成绩为:', score[0],
      '\n小蓝的最高成绩为:', score[1],
      '\n小蓝的总成绩为:', score[2])#输出最低成绩、最高成绩和总成绩

【运行结果】 程序运行结果如图所示。
在这里插入图片描述
  本例题中return语句返回多个值,通过语句“print(score, type(score))”输出变量score及其类型,可以看出,多个值以元组形式保存。因此,可以通过下标来访问元组中的元素,从而分别得到最低成绩、最高成绩和总成绩。


🎶 四、函数的参数


1.实参和形参

   定义函数时,圆括号内的参数为形参;调用函数时,圆括号内的参数为实参,根据参数的不同数据类型,将实参的值或引用传递给形参。
   在Python中,函数参数的数据类型可分为不可变数据类型(如整数、浮点数、字符串、元组等)和可变数据类型(如列表、字典、集合等)。当参数的数据类型为不可变数据类型时,在函数内直接修改形参的值不会影响实参。

【例】 阅读下面程序,分析输出结果。

【运行代码】

def change(a):
    a = 10
    print('函数内a =', a)
a = 2
change(a)
print('函数外a =', a)

【运行结果】程序运行结果如图所示。
在这里插入图片描述
   从运行结果可以看出,在函数内修改了形参a的值,但是当函数运行结束后,实参a的值并没有改变。但当参数的数据类型为可变数据类型时,在函数内使用下标或其他方式增加、删除或修改元素时,实参也会相应地修改。

【例】 阅读下面程序,分析输出结果。

【运行代码】

def change(mylist):
    mylist.append([1, 2, 3, 4])
    print('函数内mylist = ', mylist)
mylist = [10, 20, 30]
print('调用函数前,函数外mylist = ', mylist)
change(mylist)
print('调用函数后,函数外mylist = ', mylist)

【运行结果】程序运行结果如图所示。
在这里插入图片描述
   从运行结果可以看出,在函数内修改了形参mylist的元素,当函数运行结束后,实参mylist的值也修改了。

2.参数类型

在Python中,函数有多种参数类型,包括位置参数、默认值参数、关键字参数和不定长参数。
1)位置参数
位置参数是比较常用的形式,调用函数时,实参和形参的顺序应一致,且实参和形参的数量必须相同。
【例】 定制问候语。对不同的人说不同的问候语。
【问题分析】 定义函数greet(name, say),其中,name表示人名,say表示问候语。
【运行代码】

def greet(name, say):
    print(name, say)
greet('小蓝', '你好!')
greet('hello!', '小舞')
greet('小明')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
   当第一次调用greet()函数时,将实参“小蓝”和“你好!”分别传递给形参name和say,实现输出。当第二次调用greet()函数时,将实参“hello!”和“小舞”分别传递给形参name和say,虽然也可以正常输出,但实参和形参的含义不一致,将会影响数据的理解和使用,因此,位置参数的实参和形参的顺序须一致。当第三次调用greet()函数时,实参和形参的数量不同,程序运行到该条语句时提示错误信息(缺少要求的位置参数say)。

2)默认值参数
   在定义函数时,可以为函数的参数设置默认值,此参数称为默认值参数。在调用带默认值参数的函数时,可以不用为默认值参数传值,此时函数将会直接使用函数定义时设置的默认值,也可以通过显式赋值来替换其默认值。定义带有默认值参数函数的基本语法格式如下。

def 函数名(……,形参名=默认值):
函数体

【温馨提示】
   在定义带有默认值参数的函数时,默认值参数必须出现在函数形参列表的最右端,否则会提示语法错误。例如,下面函数的定义是错误的。

def f(a = 1, b, c = 3):
print(a, b, c)

   &emsp;&emsp;  还可使用“函数名.__defaults__”查看函数所有默认值参数的当前值,其返回值为一个元组,其中的元素依次表示每个默认值参数的当前值。

【例】 使用不可变数据类型设置默认问候语。
【运行代码】

def greet(name, say='hi!'):		#设置默认问候语为“hi!”
    print(name, say)
print(greet.__defaults__)			#输出函数默认值参数
greet('小蓝', '你好!')
greet('小舞', 'hello!')
greet('小红')
greet('小明')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
   多次调用函数且不为默认值参数传递值时,默认值参数只在定义时进行一次解释和初始化,而对于列表、字典等可变数据类型的默认值参数,可能会导致逻辑错误。因此,一般来说,要避免使用列表、字典、集合或其他可变数据类型作为函数参数的默认值。

【例】 使用可变数据类型设置默认问候语。
【运行代码】

def greet(name, say=['hi!']):		#使用列表设置默认问候语
    say.append('见到你很开心')			#列表添加元素
    print(name, say)
greet('小蓝', ['你好!'])
greet('小舞', ['hello!'])
greet('小明')
greet('小红')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
  使用列表作为默认值参数,且连续多次调用该函数而不给该参数传值时,再次调用将保留上一次调用结果。因此,执行语句“greet(‘小红’)”时,输出的列表say中包含两个“见到你很开心”,即在上一次调用结果的基础上增加了同一元素。
   此外,如果在定义函数时某个参数的默认值为一个变量,那么参数的默认值只取决于函数定义时该变量的值。

【例】 使用变量设置默认问候语。
【运行代码】

s = 'hi!'
def greet(name, say=s):
    print(name, say)
s = '你好!'
greet('小蓝')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
  函数的默认值参数只会初始化一次,即在函数定义时就确定值,所以,在定义函数greet()时,s的值为“hi!”,因此输出为“小蓝 hi!”。

3)关键字参数
  关键字参数是指调用函数时按参数名传递值。使用关键字参数允许函数调用时参数的顺序与定义时不一致,Python解释器能够使用参数名匹配参数值。
【例】 使用关键字参数设置问候语。
【运行代码】

def greet(name, say):
    print(name, say)
greet('你好!', '小蓝')
greet(say='hello!', name='小舞')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
4)不定长参数
  通常在定义一个函数时,若希望函数能够处理比定义时更多的参数,此时可在函数中使用“*”或“**”符号表示不定长参数,其基本语法格式如下。

def 函数名([形参列表,] *args, **kwargs):
函数体

【例】使用不定长参数同时和多人说问候语。
【运行代码】

def greet(say, *names, **name_say):
    print('say:', say)
    print('names:', names)
    print('name_say:', name_say)
    for name in names:
        print(name, say)
    for key in name_say.keys():
        print(key, name_say[key])
greet('hi!', '小蓝', '小舞', 小红='你好!', 小明='hello!')

【运行结果】程序运行结果如图所示。
在这里插入图片描述
  在调用greet()函数时,传入多个值,这些值会自左往右依次匹配函数定义时的参数,首先将“hi!”传递给say,接着将“‘小蓝’, ‘小舞’”组成一个元组,传递给names,最后将“小红=‘你好!’, 小明=‘hello!’”转换为字典传递给name_say。

结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述


http://www.kler.cn/news/357497.html

相关文章:

  • 生成 Excel 表列名称
  • 神经网络量化基础
  • C05.L01.插入与冒泡排序.冒泡排序
  • 太无敌!时序卷积组合Transformer!TCN-Transformer多变量回归预测
  • 【Nginx系列】Nginx配置超时时间
  • Axure重要元件三——中继器添加数据
  • 【微服务】精细化微服务日志管理:构建高效的监控与故障排查体系
  • JVM(HotSpot):直接内存及其使用建议
  • RISC-V笔记——重叠地址排序
  • |信息爬取与分析|009_django基于Python的耳机信息的爬取与分析2024_2qdh1wz4
  • CentOS 上安装 MySQL(附卸载教程)
  • 券商api怎么获取,如何获取券商API接口?
  • Android便携式WLAN热点分析
  • 2025考研各省网上确认时间汇总!(别忘记)
  • Kubernetes部署练习
  • JS实现一维时间轴动画
  • Nginx超简洁知识:负载均衡-反向代理,动静分离,配置文件
  • 关于OceanBase数据库的poc测试连接经验(by liuhui)
  • ubuntu使用文本编辑器和vim,快捷键
  • 【读书笔记-《30天自制操作系统》-27】Day28