【黑马程序员】python函数

文章目录

  • 函数
    • 什么是函数
    • 为什么学习函数
    • 函数定义
    • 函数的传入参数
    • 函数的返回值
      • 返回值基础
      • None返回值
    • 函数说明文档
    • 函数的嵌套调用
      • 定义
      • 代码示例
    • 全局变量和局部变量
      • 全局变量
      • global变量
      • 局部变量
    • 函数综合案例

函数

什么是函数

  • 组织好的,可重复使用的、用来实现特定功能的代码段

为什么学习函数

  • 为了得到一个针对特定需求,可供重复利用的代码段

  • 提高程序利用性,减少重复代码,提高开发效率

函数定义

  • 函数定义语法
def 函数名(传入参数):函数体return 返回值
  • 函数调用语法
函数名(参数列表)
  • 注意事项

    • 参数不需要可以省略

    • 返回值不需要可以省略

    • 函数必须先定义后使用

函数的传入参数

  • 功能描述:在函数进行计算时,接收外部提供的数据

  • 代码示例

def add(a, b):return a + bprint(add(1, 1))
  • 注意

    • 多个参数之前使用逗号隔开

    • 调用传入参数时,按照顺序传入,使用逗号分隔

    • 在定义函数时的参数称为形参,在调用时传入的参数称为实参

函数的返回值

返回值基础

  • 定义:函数在执行完成后返回给调用方的结果

  • 使用关键字return来返回结果

  • 函数体遇到return之后就结束,return之后的逻辑不会在执行

None返回值

  • 如果函数没有使用return语句返回数据,此时python中默认返回了None值

  • None是python中一个特殊的字面量,其类型是:

  • 代码示例

def sayHi():print('hi')result = sayHi()
print(result)
print(type(result))
  • 应用场景

    • 用在函数无返回值的场景

    • 用在if判断上

      • None等同于False

      • 一般在函数中主动返回None,配合if判断做相关处理

      def checkAge(age):if age > 18:return "ok"else:return Noneret = checkAge(16)
      if not ret:print("未满18")
      
    • 用于声明无内容的变量上

    • 定义变量,但暂时不需要变量有具体的值,可以用None来代替

    name=None
    

函数说明文档

  • 通过多行注释的方式,对函数进行解释说明,内容应写在函数体之前

  • 语法

def func(x, y):"""函数说明:param x: 形参x的说明:param y: 形参y的说明:return: 返回值说明"""函数体return 返回值

函数的嵌套调用

定义

  • 嵌套调用:一个函数里面又调用了另一个函数

代码示例

def func_b():print('-------2-------')def func_a():print('-------1-------')func_b()print('-------3-------')func_a()
  • 调用流程

    • 先执行调用func_a

    • 在func_a中在调用func_b

    • 执行完func_b的所有逻辑在返回func_a中调用func_b的位置

    • 继续执行完剩余的func_a函数逻辑

全局变量和局部变量

  • 作用域:变量的作用范围,在哪里可见,在哪里不可见

全局变量

  • 在函数体内,体外都能生效的变量

  • 代码示例

def func_b():num = 20print(f"函数体内访问:num = {num}")func_b()
print(f"函数体外访问:num = {num}")
  • 运行结果

ges%2F2024-03-12-15-38-41-image.png&pos_id=img-zMigKjuA-1710245738340)

global变量

  • 引入:可以看到上面的全局变量中,将num改为20,在函数内生效了,但是出了函数后,num的值又变成了10

  • global关键字,可以在函数体内部声明局部变量为全局变量

  • 代码示例

num1 = 10def func_c():global num1num1 = 20print(f"函数体内访问:num1 = {num1}")func_c()
print(f"函数体外访问:num1 = {num1}")
  • 运行结果

在这里插入图片描述

局部变量

  • 定义在函数体内部的变量,只在函数体内生效

  • 作用:在函数体内部,临时保存数据,当函数调用完后,则销毁局部变量

  • 代码示例

def func_a():a = 10print(f"函数体内:a={a}")func_a()
# NameError: name 'a' is not defined
# print("函数体外:{}", a)

函数综合案例

  • 需求描述

在这里插入图片描述

  • 代码示例
# *_*coding:utf-8 *_*money = 1000
name = Nonename = input("请输入姓名:")def show_menu():print("-------主菜单--------")print(f"{name}您好,欢迎登录ATM机")print("查询余额 [输入1]")print("存款 [输入2]")print("取款 [输入3]")print("退出 [输入4]")def get_balance():print("------查询余额--------")print(f"{name}您的余额还有{money}元")def save_money(num):global moneymoney += numprint("------存款--------")print(f"存款{num}元成功")print(f"{name}您的余额还有{money}元")def load_monry(num):global moneymoney -= numprint("------取款--------")print(f"取款{num}元成功")print(f"{name}您的余额还有{money}元")def main():while (True):show_menu()choice = int(input("请输入你的操作选项:"))if choice == 1:get_balance()elif choice == 2:num = int(input("请输入你要存的钱:"))save_money(num)elif choice == 3:num = int(input("请输入你要取的钱:"))load_monry(num)elif choice == 4:print("即将退出...")returnmain()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像分割损失函数

为什么要乘以2,是为了让DICE的值域在0和1之间 优化:两种LOSS相加 Focus loss:

【PLSQL】plsqldeveloper查询结果记录显示不全

plsql版本号为12或13。 例如scott用户的emp表中共有14条数据,但select * from emp;查询结构只显示13条记录,如下: 这是由于查询结果显示条数,根据查询框高度自动计算可以显示多少条记录,如果想显示全,则需…

阿里云领盲盒活动

阿里云每次的活动都很给力,实打实地发东西。 这次是体验 通义灵码 的活动,这个是体验的推广链接 「通义灵码 体验 AI 编码,开 AI 盲盒」 我是在vscode安装的,体验还行,抽奖抽到了马克杯 这个是抽奖的具体步骤 https:…

程序猿成长之路之socket篇-socket通信原理简介

hello,各位小伙伴们大家好,上次以RSA加解密算法介绍作为密码学篇的结尾后,时光飞逝,转眼到了新一年的春季,这次将介绍一下socket通信和编程原理。 什么是socket(套接字)? socket(套…

Matlab|【分布鲁棒】数据驱动的多离散场景电热综合能源系统分布鲁棒优化算法

目录 主要内容 1.1 主要难点-分布鲁棒优化 1.2 程序求解步骤-主子问题迭代 部分结果 下载链接 主要内容 本程序主要对《基于场景聚类的主动配电网分布鲁棒综合优化》-高海淑的方法复现,应用到综合能源电热微网方向,采用拉丁超立方抽样对不同…

[计算机效率] 在当前文件夹以管理员身份运行批处理

2.7 在当前文件夹以管理员身份运行批处理 这个功能对于要经常运行批处理程序的人来说真的很方便。每次要要运行批处理,要么就是直接打开的批处理不是以管理员身份运行的,要么就是在批处理中要一步步的切换进入到目标文件夹中,非常费时间。 方…

录屏直播技巧大揭秘,轻松捕捉精彩瞬间

录屏直播作为一种流行的线上内容创作方式,备受关注。无论是游戏主播、教程讲解还是线上会议,录屏直播都能轻松应对。本文将介绍三种录屏直播方法,并对其进行分步骤详细说明,帮助读者轻松掌握录屏直播的技巧,为内容创作…

c语言 线性搜索算法

线性搜索被定义为一种顺序搜索算法,从一端开始,遍历列表中的每个元素,直到找到所需的元素,否则搜索将继续,直到数据集的末尾。 线性搜索算法 线性搜索算法如何工作? 在线性搜索算法中: …

Linux VM虚拟环境 设置静态IP

目录 查看自己的网卡配置说明重启网卡实例测试配置情况测试网络 查看自己的网卡 ip a配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens32配置说明 [rootlinux-server ~]# cd /etc/sysconfig/network-scripts/ #网卡配置文件存放路径 [rootlinux-server network-scri…

凡得首席战略官蔡聪,将出席“ISIG-流程挖掘技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(RPA中国、AIGC开放社区、LowCode低码时代)主办。大会旨在聚合每一位产业成员的力量,深入探索R…

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来,在面试的过程中,发现这个需求(导出html表格)比较常见,同时也引起我的兴趣,所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

【JavaScript 漫游】【035】同源限制

文章简介 本篇文章为【JavaScript 漫游】专栏的第 035 篇文章,记录了浏览器模型同源限制相关的知识点。 概述 浏览器安全的基石是“同源政策”(same-origin policy)。1995 年,该政策由 Netscape 公司引入浏览器。目前&#xff…

云服务器与传统服务器价格对比

在信息化时代,服务器作为企业数据存储和计算的核心设备,扮演着举足轻重的角色。传统的物理服务器与近年来兴起的云服务器在功能、性能、安全性等方面各有千秋,而价格则是企业在选择时不得不考虑的重要因素。本文将简要科普云服务器与传统服务…

[答疑]AI能做“需求分析”吗+警惕造词圈子割韭菜

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2024-3-10 21:02 潘老师,AI热度不减,现在sora出来更是火爆。有些在github上有几万star的程序员,宣称能用AI做“需求分析”,好…

TCP/IP协议栈

TCP/IP协议栈(Transmission Control Protocol/Internet Protocol Suite)是互联网上进行数据通信的一系列网络协议的集合,它是现代计算机网络通信的基础架构。 它由多个不同的协议层构成,每层负责不同层面的数据处理和传输工作&…

京津冀协同发展:北京·光子1号金融算力中心——智能科技新高地

京津冀协同发展是党中央在新的历史条件下提出的一项重大国家战略,对于全面推进“五位一体”总体布局,以中国式现代化全面推进强国建设、民族复兴伟业,具有重大现实意义和深远历史意义。随着京津冀协同发展战略的深入推进,区域一体…

模板模式-C#实现

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 主要解决:一些方法通用,却在每一个子类都重新…

javaEE13(网站第8章两个课后题)

1、对“jspservletjavabean实现分页查询”功能做如下补充: (1)记录批量删除:每个记录前添加复选框,点击批量删除,删除选中记录。 增加跳转到任意页功能。用户可改变每页记录条数。 页面&am…

[vscode]使用cmake时将命令行参数传递给调试目标

一、简介 本文介绍了在vscode中使用cmake工具时,如何传递参数给编译目标的方法。 前提:使用vscodecmake编译C/C程序。 二、方法 在.vscode/目录下新建settings.json文件,并将待传底的参数写在 cmake.debugConfig里。 下面介绍了一个示例&a…

selenium元素定位问题

一、按钮点击 具体网页信息如下: 定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。 定位方法: 方法一:通过文本定位 driver.find_element(By.XPATH, "//*[text()高分一号]").click() time.sleep(3) 如果是部分文字…