四、python的函数基础

  • 4.1 函数概述
  • 4.2 函数的定义
  • 4.3 函数的要素
    • 4.3.1 函数名
    • 4.3.2 库
    • 4.3.3 形式参数
    • 4.3.4 返回值
  • 4.4 函数的调用
  • 4.5 函数执行流程
    • 4.5.1 函数执行流程
    • 4.5.2 函数的形参和实参
  • 4.6 函数的说明文档
  • 4.7 函数的嵌套调用
  • 4.8 函数变量的作用域
    • 4.8.1 局部变量
    • 4.8.2 全局变量
  • 4.9 综合案例

4.1 函数概述

定义:是组织好、可重复使用的、用来实现特定功能的代码段。
分类:python的内置函数和用户自定函数。①内置函数,即系统函数:这是由python提供的,用户不必自己定义这些函数,可以直接使用,如常用的统计长度的函数len();②用户定义函数:用以解决用户的专门需要。
举例:len()函数是Python内置的函数,是提前写好的,可以重复使用,实现统计长度这一特定功能的代码段。如果不用函数,也可以通过for循环+计数累加的方式来统计长度,但是会导致代码重复。
作用:提高程序的复用性,减少重复性代码,提高开发效率。

# 使用python的内置函数
str1 = "是组织好"
str2 = "可重复使用的"
str3 = "用来实现特定功能的代码段"
print("str1的长度=",len(str1))
print("str2的长度=",len(str2))
print("str3的长度=",len(str3))
# 不使用函数
str1 = "是组织好"
str2 = "可重复使用的"
str3 = "用来实现特定功能的代码段"count = 0
for i in str1:count += 1
print("str1的长度=",count)count = 0
for i in str2:count += 1
print("str2的长度=",count)count = 0
for i in str3:count += 1
print("str3的长度=",count)
# 用户自定函数
def my_len(string):count = 0for i in str1:count += 1print(count)str1 = "是组织好"
str2 = "可重复使用的"
str3 = "用来实现特定功能的代码段"
print(my_len(str1))
print(my_len(str2))
print(my_len(str3))

4.2 函数的定义

# 语法:
def 函数名(形参1,形参2......):     # def是定义一个函数体的关键字,()区分变量和函数标志,即使没有形式参数,也不能省略。形参之间用英文逗号分开函数体return 返回值

4.3 函数的要素

函数要素 说明
①函数名字 函数名字必须和头文件声明的名字一样
②库 包含指定的函数的包
③形式参数 参数类型要匹配
④功能 需要知道此函数能干嘛后才调用
⑤返回值 根据需要接收返回值

4.3.1 函数名

是用户定义标识符,命名规则同变量一致。注意,函数名的后面有个圆换号(),代表这个为函数,不是普通的变量名。()区分变量和函数标志,即使没有形式参数,也不能省略。

4.3.2 库

使用一些python的内置函数时,这些函数存在于一些库(包)里面,要先import导入包才能使用这些内置函数。比如随机库random里面的生成随机数randint函数。

4.3.3 形式参数

在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以形参里的变量不能赋值。

4.3.4 返回值

定义:通过return关键字,把函数计算的结果返回给函数调用者。
语法:return 结果/表达式
注意:①return是结束函数的执行,因此return后面的语句不会被执行。
②如果函数没有使用return语句返回数据,函数也有返回值None,其类型是无返回值的函数<class ‘NoneType’>。None表示空的、无实际意义的意思。函数返回的None表示这个函数没有返回什么有意义的内容,也就是返回了空的意思。
③None的应用场景:A、用在函数无返回值上;B、用在if判断上,在if判断中,None等同于False。一般用于在函数中主动返回None,配合if判断做相关处理;C、用于声明无内容的变量上,定义变量,但暂时不需要变量有具体值,可以用None来代替。

def say_hi():            # 无return语句的函数返回值print("你好呀")result = say_hi()                                           # 变量result接收say_hi函数的返回值
print(f"无返回值函数,返回的内容是:{result}")                # None
print(f"无返回值函数,返回的内容类型是:{type(result)}")        # <class 'NoneType'># None可以主动使用return返回,效果等同于不写return语句:
def say_hi2():print("你好呀")return None         # 主动返回None的函数result = say_hi2()
print(f"无返回值函数,返回的内容是:{result}")                # None
print(f"无返回值函数,返回的内容类型是:{type(result)}")        # <class 'NoneType'># None用于if判断
def check_age(age):if age > 18:return "SUCCESS"else:return Noneresult = check_age(16)
if not result:# 进入if表示result是None值 也就是Falseprint("未成年,不可以进入")# None用于声明无初始内容的变量
name = None

因此,也可以根据函数的参数和返回值的有无对函数进行分类:①无参无返回值函数;②有参数无返回值函数;③无参有返回值函数;④有参有返回值函数;

4.4 函数的调用

定义:定义函数后,需要调用此函数才能执行到这个函数里的代码段。
语法:函数名(实际参数)
注意:函数必须是先定义,后使用。

4.5 函数执行流程

4.5.1 函数执行流程


①首先进入没有def开头的代码块r = add(1, 2),由于python内部没有内置add函数,则会去查询有没有用户自定函数,如果没有,就会报错- -函数名add不存在;
②如果有,调用add(x, y)函数,函数在add(1, 2)处中断,等待被调用函数运行完成并产生返回值时,才会执行r = add(1, 2)。
③接着检查函数的参数有没有传参,如果有,按照顺序将实参的值传递给形参,执行add(x, y)函数;
④再检查函数的参数有没有返回值,如果有,按返回值的结果给函数调用者 add(1,2),并用变量r接收;
⑤打印r的值,代码全部执行,程序结束。

4.5.2 函数的形参和实参

①形参出现在函数定义中,实参出现在函数调用中;
②调用时实参的值按照形参的顺序逐个对应传给形参,而不能由形参传回来给实参,即单向传递;
③调用函数时,编译系统临时给形参分配存储单元(实参与形参是不同单元存储)。调用结束后,形参单元被销毁,实参单元仍保留并维持原值;

4.6 函数的说明文档

问题:函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。可以给函数添加说明文档,辅助理解函数的作用。
解决:通过多行注释的形式,对函数进行说明解释,内容应写在函数体之前。规范说明如下图,在pycharm工具下写个多行注释后回车,会自动提供格式给开发者。

在PyCharm编写代码时,可以通过鼠标悬停,查看调用函数的说明文档。

4.7 函数的嵌套调用

定义:一个函数里面又调用了另外一个函数。

结果如下:

4.8 函数变量的作用域

定义:即变量的作用范围,说明变量在哪里可用,在哪里不可用。
分类:局部变量和全局变量。

4.8.1 局部变量

定义:定义在函数体内部的变量,即只在函数体内部生效。
举例:变量num是定义在testA函数内部的变量,在函数外部访问则立即报错。

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

4.8.2 全局变量

定义:定义在函数体外部的变量,在函数体内、外都能生效。
举例:变量num是定义在testA和testB函数外部的变量,在函数A、B都能使用

问题:testB函数内部修改全局变量num的值为200,如何修改程序?
结果:如果是直接在testB函数内部修改num = 200,只是定义了一个局部变量num,并不影响全局变量num的值。

解决:使用 global 变量可以在函数内部声明变量为全局变量,如下所示:

4.9 综合案例

定义一个全局变量:money,用来记录银行卡余额(默认5000000);
定义一个全局变量:name,用来记录客户姓名(启动程序时输入);
定义如下的函数:
①查询余额函数
②存款函数
③取款函数
④主菜单函数
要求:
①程序启动后要求输入客户姓名
②查询余额、存款、取款后都会返回主菜单
③存款、取款后,都应显示一下当前余额
④客户选择退出或输入错误,程序会退出,否则一直运行
主菜单效果:

查询余额效果:

存、取款效果:

money = 5000000                  # 定义一个全局变量:money,用来记录银行卡余额(默认5000000)
name = input("请输入您的姓名:")    # 定义一个全局变量:name,用来记录客户姓名(启动程序时输入)def query(show_header):          # 定义查询余额函数if show_header:              # 取款、存款后应显示一下当前余额,调用query函数查询余额,要想不显示表头,调用函数传入False参数即可print("-------------查询余额------------")print(f"{name},您好,您的余额剩余:{money}元")def saving(num):                # 定义存款函数global money                # money在函数内部定义为全局变量money += numprint("-------------存款------------")print(f"{name},您好,您存款{num}元成功。")query(False)def get_money(num):             # 定义取款函数global money                # 定义global,使得money在函数内部定义为全局变量money -= numprint("-------------取款------------")print(f"{name},您好,您取款{num}元成功。")query(False)                # 取款后应显示一下当前余额,调用query函数查询余额def main_menu():               # 定义主菜单函数print("-------------主菜单------------")print(f"{name},您好,欢迎来到黑马银行ATM。请选择操作:")print("查询余额\t[输入1]")print("存款\t\t[输入2]")print("取款\t\t[输入3]")    # 通过\t制表符对齐输出print("退出\t\t[输入4]")return input("请输入您的选择:")# 只要ATM不退出程序,可以随便查询
while True:                         # 设置无限循环,确保程序不退出keyboard_input = main_menu()    # 先显示主菜单if keyboard_input == "1":query(True)                 # 查询界面需要显示表头continue                    # 除了退出程序,其他步骤都是要返回到主界面,通过continue继续下一次循环,返回到主菜单elif keyboard_input == "2":num = int(input("您想要存多少钱?请输入:"))saving(num)continue    # 查询余额、存款、取款后都会返回主菜单elif keyboard_input == "3":num = int(input("您想要取多少钱?请输入:"))get_money(num)continue    # 查询余额、存款、取款后都会返回主菜单else:           # 客户选择退出或输入错误,程序会退出,否则一直运行print("程序退出啦")break       # 通过break退出循环

码字不易,如果大家觉得有用,请高抬贵手给一个赞让文章上推荐让更多的人看到吧,也可以评论提出意见让后面的文章内容越来越生动丰富。

四、python的函数基础--附代码案例相关推荐

  1. python常用代码入门-入门十大Python机器学习算法(附代码)

    入门十大Python机器学习算法(附代码) 今天,给大家推荐最常用的10种机器学习算法,它们几乎可以用在所有的数据问题上: 1.线性回归 线性回归通常用于根据连续变量估计实际数值(房价.呼叫次数.总销 ...

  2. 混合整数规划MIP/线性规划LP+python(cplex库)实现 附代码

    文章目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(docplex库) MIP的Python实现(ortool库) 喜欢的话请关注我们的微信公众号~<你好世界炼 ...

  3. 混合整数规划MIP/线性规划LP+python(ortool库)实现 附代码

    文章目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 喜欢的话请关注我们的微信公众号~&l ...

  4. Python科学绘图实例附代码

    Python绘图精简实例附代码 作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 Python绘图精简实例附代 ...

  5. python代码在线回归中怎么运行_手把手教你用Python进行回归(附代码、学习资料)...

    原标题:手把手教你用Python进行回归(附代码.学习资料) 作者: GURCHETAN SINGH翻译:张逸校对:丁楠雅 本文共5800字,建议阅读8分钟. 本文从线性回归.多项式回归出发,带你用P ...

  6. 初识python之函数基础

    课堂笔记: 1.什么是函数?函数相当于工具,需要事先准备好,在需要用时再使用. 2.如何使用函数?函数必须先定义.后调用. 3.函数的语法: # def 函数名(参数1,参数2...):# " ...

  7. 推荐系统入门(四):WideDeep(附代码)

    推荐系统入门(四):Wide&Deep(附代码) 目录 推荐系统入门(四):Wide&Deep(附代码) 引言 点击率预估简介 FM它不香吗 1.Wide&Deep模型 2. ...

  8. Python 之 函数基础

    函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...

  9. python pow函数用法_Python代码中pow()函数具有哪些功能呢?

    摘要: 下文讲述Python代码中pow()函数的功能说明,如下所示: pow函数功能说明 pow() 函数用于 计算 xy(x 的 y 次方) 的值 pow函数语法: import math mat ...

最新文章

  1. 快速排序(抽象理解,最快了解)
  2. breakdancer检测结构变异
  3. linux--vi 和vim 的区别
  4. phpmyadmin 查看sql历史记录
  5. 使用p3p跨域设置Cookie
  6. 数据库更改到Java环境中实现可持续和平
  7. linux tar进行归档压缩和解压
  8. 名不正则言不顺,言不顺则事不成
  9. AD PCB导出Gerber文件(非常详细的步骤)
  10. 浏览器扫码打开Android/iOS App
  11. linux patch 给文件打补丁,Linux补丁工具patch生成使用补丁用法示例
  12. Unity手机移动设备重力感应
  13. android inflate,Android inflate view的两种方式
  14. 五级自动驾驶分级_关于确保自动驾驶汽车安全的五件事
  15. 傻妞sillyGirl对接VLW微信机器人
  16. Java游戏脚本实现
  17. 编写函数比较字符串的大小
  18. 搭建spring-boot+vue前后端分离框架并实现登录功能
  19. 关于c++中vector的push_back、拷贝构造copy constructor和移动构造move constructor
  20. 量化投资学习——最优成交剩撤卖

热门文章

  1. B端体验度量衡-体验度量衡指标以及实施篇
  2. SNS:美图秀秀的社交化变革
  3. ERP管理软件中“集成”的七个管理思想[转]
  4. IC datasheet 查询网站
  5. c语言程序设计答案第6章,C语言程序设计答案(黄保和编)第6章
  6. linux视频采集软件,基于Video4Linux的视频图像采集实现 - 看看网
  7. C++ Primer读书摘要(二)
  8. 零基础入门学Python(十二)—— 魔法方法(上)
  9. 网络安全竞赛试题(1)A模块
  10. Greenplum【异常 02】使用Navicat的服务器监控工具解决Greenplum数据库锁表问题