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

Python语法(二)——函数

文章目录

  • 函数
    • 语法格式
    • 函数参数
    • 链式调用
    • 嵌套调用
    • 函数递归
    • 变量作用域

函数

一段可以被重复使用的代码片段

求数列的和, 不使用函数

# 1.求1-100的和
sum = 0
for i in range(1, 101):sum += i
print(f'sum = {sum}')# 2.求300-400的和
sum = 0
for i in range(300, 401):sum += i
print(f'sum = {sum}')# 3.求1-1000的和
sum = 0
for i in range(1, 1001):sum += i
print(f'sum = {sum}')

这几组代码基本是相似的, 只有一点点差异. 可以把重复代码提取出来, 做成一个函数

def calcSum(begin, end):sum = 0for i in range(begin, end + 1):sum += ireturn sum print(calcSum(1, 100))    # 5050
print(calcSum(300, 400))  # 35350
print(calcSum(1, 1000))   # 500500

语法格式

# 创建函数/定义函数
def 函数名(形参列表):函数体return 返回值# 调用函数/使用函数
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值

函数必须先定义, 再使用

test3() # 还没有执行到定义, 就先执行调用了, 此时就会报错.def test3():print('hello')

函数参数

在函数定义的时候, 可以在 ( ) 中指定形参,然后在调用的时候, 由调用者把实参传递进去.
这样就可以做到一份函数, 针对不同的数据进行计算处理

  • 一个函数可以有一个形参, 也可以有多个形参, 也可以没有形参
  • 一个函数的形参有几个, 那么传递实参的时候也得传几个. 保证个数要匹配

链式调用

把一个函数的返回值, 作为另一个函数的参数, 这种操作称为 链式调用

# 判定是否是奇数
def isOdd(num):if num % 2 == 0:return Falseelse:return Trueresult = isOdd(10)
print(result)# 也可以简化写作
print(isOdd(10))

嵌套调用

一个函数里面可以嵌套调用任意多个函数

def a():print("函数 a")def b():print("函数 b")a()def c():print("函数 c")b()def d():print("函数 d")c()d()

在这里插入图片描述

def a():print("函数 a")def b():a()print("函数 b")def c():b()print("函数 c")def d():c()print("函数 d")d()

在这里插入图片描述

函数递归

递归是 嵌套调用 中的一种特殊情况, 即一个函数嵌套调用自己

# 递归计算 5!
def factor(n):if n == 1:return 1return n * factor(n - 1)result = factor(5)
print(result)

**注意: **

  • 存在递归结束条件. 比如 if n == 1就是结束条件. 当 n 为 1 的时候, 递归就结束了
  • 每次递归的时候, 要保证函数的实参是逐渐逼近结束条件的

变量作用域

def getPoint():x = 10y = 20return x, yx, y = getPoint()

在这个代码中, 函数内部存在 x, y, 函数外部也有 x, y.
但是这两组 x, y 不是相同的变量, 而只是恰好有一样的名字.


变量只能在所在的函数内部生效

def getPoint():x = 10y = 20return x, ygetPoint()
print(x, y)

在这里插入图片描述

在不同的作用域中, 允许存在同名的变量

x = 20def test():x = 10print(f'函数内部 x = {x}')test()
print(f'函数外部 x = {x}')

在这里插入图片描述

如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找

x = 20def test():print(f'x = {x}')test()

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue3 组合式API defineEmits() 与 emits 组件选项
  • STM32 单片机最小系统全解析
  • Linux自主学习篇
  • Qt Creator项目模板介绍
  • 视频相关处理
  • MQ入门(4)
  • 【Python】Maya:为人类打造的 Python 日期时间库
  • 抓机遇,促发展——2025第十二届广州国际汽车零部件加工技术及汽车模具展览会
  • Java内存泄漏排查
  • Ansible部署与应用基础
  • Git清除某文件所有历史提交记录
  • 【Redis】之Geo
  • 【机器学习】——线性回归(自我监督学习)
  • 秒变 Vim 高手:必学的编辑技巧与隐藏功能大揭秘
  • 【设计模式】UML类图
  • python3.6+scrapy+mysql 爬虫实战
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • java中的hashCode
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • k8s 面向应用开发者的基础命令
  • LintCode 31. partitionArray 数组划分
  • linux学习笔记
  • passportjs 源码分析
  • python学习笔记 - ThreadLocal
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 阿里云应用高可用服务公测发布
  • 分布式熔断降级平台aegis
  • 解决iview多表头动态更改列元素发生的错误
  • 什么软件可以剪辑音乐?
  • 微信开放平台全网发布【失败】的几点排查方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #if 1...#endif
  • #php的pecl工具#
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (a /b)*c的值
  • (arch)linux 转换文件编码格式
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (区间dp) (经典例题) 石子合并
  • (十三)Flink SQL
  • (四)JPA - JQPL 实现增删改查
  • (四)js前端开发中设计模式之工厂方法模式
  • (新)网络工程师考点串讲与真题详解
  • (转)Sublime Text3配置Lua运行环境
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (自适应手机端)行业协会机构网站模板