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

【python基础知识】Day26 函数

一、函数的定义

        函数是一段具有特定功能的、可重用的语句组,用函数名来表示。在需要使用函数时,通过函数名进行调用。函数也可以看作一段具有名字的子程序,可以在需要使用它的地方进行调用执行,不需要在每个执行的地方重复编写这些语句。

        每次使用函数时,可以提供不同的参数作为输入,以实现对不同的数据处理;函数执行后,可以反馈相应的处理结果。

        函数能够完成特定的功能,与黑盒类似,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。严格地说,函数是一种功能的抽象。

        有些函数是python自带的,如print()

        有些函数是库中含有的,如pandas库中pd.read()函数,scikit-learn库中各种机器学习模型

        使用函数的目的:

        1.降低编程难度:使用函数只用关注函数输入输出,能够解决的问题。在项目中遇到大问题,可以将大问题分解成小问题后,使用函数解决小问题

        2.代码复用:函数可以在一个程序中多个位置使用

        python使用def 保留字定义一个函数,语法形式如下:

def 函数名(参数列表):函数体return 返回值列表

        函数调用的形式如下:

函数名(参数列表)

二、函数的参数传递

1.可选参数与可变参数

(1)可选参数:在调用函数时,部分参数可以不用输入。

        原因:在定义函数时,为这些参数指定了默认值

        位置:可选参数必须定义在必选参数后面(这是因为函数调用时,需要按顺序输入参数)

(2)可变数量参数(可变参数):在参数前增加*号实现

        位置:可变参数必须在参数列表最后

2.参数的位置和名称传递

      (1)函数调用时,默认是按位置顺序传递给函数,dup("knock",4)中第一个实参赋值给形参str,第二个实参赋值给times。这种按照位置传递参数的方法固然好,但当参数多时,这种调用参数的方式可读性差

# 定义函数
def dup(str,times = 2):print(str*times)
# 调用函数
dup("knock",4)

        为了解决上述问题,python可以在调用时指定形参名,参数间的顺序可以任意调整

3.函数返回值

        return用来退出函数,并将程序返回到函数被调用的位置继续执行。return语句可以同时将0个、1个或多个值返回

        函数可以没有return,此时函数不返回值

4.全局变量和局部变量

        一个程序中变量有两类:全局变量和局部变量

        全局变量:函数之外定义的变量,在程序执行全过程中有效

        局部变量:函数内部使用的变量,仅在函数内部有效,函数退出后,变量将不存在

        python对变量的作用遵守以下规则:

        (1)简单数据类型变量,无论是否与全局变量重名,仅在函数内部创建和使用。函数退出后,变量被释放,

n = 1    # n是全局变量
def func(a, b):c = a*b     # c是局部变量,a、b作为函数参数也是局部变量return c
s = func("knock",2)
print(s)

如有全局同名变量,其值不变

n = 1    # n是全局变量
def func(a, b):n = b       # n是在函数内存中新生成的局部变量,不是全局变量return a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

 上述代码输出结果

knockknock   1

        (2)简单数据类型变量,在用global保留字声明后,作为全局变量使用。函数退出后,该变量保留且值被函数改变

n = 1    # n是全局变量
def func(a, b):global nn = b      # 将局部变量b 赋值给 全局变量nreturn a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

  上述代码输出结果

knockknock   2

        (3)组合数据类型变量的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值

ls = []             #创建一个列表
def func(a, b):ls.append(b)return a*b
s = func("knock",2)
print(s,ls)  #测试ls列表是否改变

  上述代码输出结果

knockknock   [2]

        (4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量操作,函数退出后局部变量被释放,全局变量值不变

ls = []             #ls是全局列表变量
def func(a, b):ls = []         #创建了名称为ls的局部列表变量ls.append(b)    # 将局部变量b增加到局部列表变量ls中return a*b
s = func("knock",2)
print(s,ls)         #测试ls列表是否改变

  上述代码输出结果

knockknock   [ ]

参考目录

[1] python语言程序设计基础(第2版) 嵩天 礼欣 黄天羽

http://www.xdnf.cn/news/6273.html

相关文章:

  • Digi XBee XR 系列介绍
  • 如何在Firefox火狐浏览器里-安装梦精灵AI提示词管理工具
  • Spring MVC 接口的访问方法如何设置
  • Nginx与Tomcat负载均衡集群配置指南
  • IntelliJ IDEA 集成AI编程助手全解析:从Copilot到GPT-4o Mini的实践
  • 力扣.1471数组的k个最强值,力扣.1471数组的k个最强值力扣1576.替换所有的问号力扣1419.数青蛙​编辑力扣300.最长递增子序列
  • Spring框架核心技术深度解析:JDBC模板、模拟转账与事务管理
  • 【Vue】CSS3实现关键帧动画
  • 快速通关单链表秘籍
  • GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
  • Java实现MinIO上传PDF文件并配置浏览器在线打开及vue2上传页面
  • PCIe数据采集系统
  • 解决:npm install报错,reason: certificate has expired
  • 【python实用小脚本-63】每天花费2小时修复黑白照片,Python一键转换,节省90%时间(建议收藏)
  • 【hadoop】Flume的相关介绍
  • Trae - 国人Cursor的免费平替产品
  • idea经常卡顿解决办法
  • ctfshow权限维持
  • 城市扫街人文街头纪实胶片电影感Lr调色预设,DNG/手机适配滤镜!
  • 2025 Java 微信小程序根据code获取openid,二次code获取手机号【工具类】拿来就用
  • 力扣-46.全排列
  • 嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比
  • RPC协议及库介绍
  • 中国近代史1
  • promise的说明
  • STM32入门笔记(05):内部高速8Mhz时钟最大时钟可以设置 64 Mhz?如何修改system_stm32f10x.c里面的代码?
  • STM32F103_LL库+寄存器学习笔记23 - PWM波形输出及软件方式调整周期与占空比
  • PyQt5教程:QComboBox下拉列表框的全面解析与实战应用
  • 保持视频二维码不变,更新视频的内容
  • 300. 最长递增子序列