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

Python函数

python函数


  • python函数
    • 函数定义
    • 函数返回值
    • 函数参数

函数定义

使用 def 关键字进行函数定义,参数列表类似C++,按顺序进行传递,注意Python的参数是不需要进行类型申明的,使用函数一定注意参数顺序

def Hello(name , greet): print(f'Hello {name}, {greet}')Hello('Xiaoxiao','You are cute')

运行结果如下:

Hello Xiaoxiao, You are cute

Python在传递实参时可以指定形参,这样就可以无视参数顺序了

def Hello(name , greet): print(f'Hello {name}, {greet}')Hello(greet='You are cute',name='Xiaoxiao')

运行结果如下:

Hello Xiaoxiao, You are cute

函数返回值

Python函数定义不需要指定返回类型,可以有返回值也可以没有,而且可以在一个函数内返回多个数据类型的返回值

def Hello(name , greet):if(name=='Xiaoxiao'): print(f'Hello {name}, {greet}')return 'yeahyeah Xiaoxiao!'else:print(f'{name}? Who are you?')return False;print(Hello(greet='You are cute',name='Xiaoxiao'))
print(Hello(greet='NULL',name='Haohao'))

运行结果如下:

Hello Xiaoxiao, You are cute

yeahyeah Xiaoxiao!

Haohao? Who are you?

False


函数参数

与C++不同,Python中的参数传递时传递的全部都是引用。但请注意Python的重要特性,在对变量进行赋值操作时,一定会建立一个新副本。即虽然函数参数传递的全部都是引用,但在函数内部进行初始化操作时,依然执行的是新建副本操作,不会影响本体。你可以在接下来的代码展现的地址中直观的看出来

#基础数据类型是这个逻辑
def Hello(name):print(f'函数接收到了参数的引用,因此地址与原变量相同:{id(name)}')name='Xiaoxiao'print(f'初始化操作新建了副本,因此地址改变:{id(name)}')name='Haohao'
print(f'原变量地址{id(name)}')
Hello(name)
print(f'原变量没有受影响{name}')#容器也是一样的逻辑
def changeList(list):list.clear()print(f'函数接收到了参数的引用,因此地址与原变量相同:{id(list)},并且本体受到影响:{list}')list=[3,2,1]#在函数内部进行赋值操作却不会影响本体print(f'函数内部进行赋值操作后的列表{list},地址已发生改变:{id(list)}')list=[1,2,3]
print(f'原变量地址{id(list)}')
changeList(list)
print(f'函数外部的列表受了clear方法影响,但未受赋值操作影响:{list},地址与原变量相同:{id(list)}')

运行结果如下:

原变量地址1598346997616

函数接收到了参数的引用,因此地址与原变量相同:1598346997616

初始化操作新建了副本,因此地址改变:1598347133680

原变量没有受影响Haohao

原变量地址1598346323392

函数接收到了参数的引用,因此地址与原变量相同:1598346323392,并且本体受到影响:[]

函数内部进行赋值操作后的列表[3, 2, 1],地址已发生改变:1598346471104

函数外部的列表受了clear方法影响,但未受赋值操作影响:[],地址与原变量相同:1598346323392

Python允许传递任意数量的参数,此时需要以 *形参名 的格式定义参数,该方式使得函数定义一个元组用以收纳即将传入的任意数量参数

在使用这种语法时,记得将该参数放在其余正常参数之后

def make_pizza(size,*toppings):print(f"Making a {size}-inch pizza with the following toppings:")for topping in toppings: print(f"- {topping}")make_pizza(16,'mushroom','green peppers','extra cheese')

运行结果如下:

Making a 16-inch pizza with the following toppings:

- mushroom

- green peppers

- extra cheese

关键字实参也可以通过该方法进行传递任意数量,使用 *形参名* 使得函数定义一个字典用以接收任意数量的关键字实参

http://www.jsqmd.com/news/299468/

相关文章:

  • Spring事务的传播机制
  • 【柔性作业车间调度FJSP】基于蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP)研究附Matlab代码
  • 【柔性作业车间调度问题】基于四种多目标优化算法(NSPSO、NSOOA、NSDBO、NSCOA)求解柔性作业车间调度问题(FJSP)对比研究附Matlab代码
  • 【柔性作业车间调度问题FJSP】基于部落竞争与成员合作算法CTCM求解柔性作业车间调度问题(FJSP)研究附Matlab代码
  • ppo导航依赖第一步,那是rnn好还是transformer
  • 【柔性作业车间调度FJSP】基于河马优化算法HO求解柔性作业车间调度问题(FJSP)研究附Matlab代码
  • Java毕设项目:基于springboot的生日商城的设计与实现(源码+文档,讲解、调试运行,定制等)
  • SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储至nacos完整配置步骤
  • Java计算机毕设之基于springboot的社区志愿者服务系统SpringBoot驱动的居民志愿服务智慧系统(完整前后端代码+说明文档+LW,调试定制等)
  • 大模型开发面试全攻略:从基础到进阶的通关秘籍_AI大模型面试指南(含答案)!
  • 本地运行!开源AI音乐生成器HeartMuLa完整安装与使用指南
  • 大模型学习不迷茫!6大模块助你快速入门,实现职业跃迁!学习大模型的顺序,千万别弄反了
  • 程序员必看!企业级私有化部署开源大模型选型与实战指南(建议收藏)
  • 【保姆级教程】从0到1掌握大模型(LLM)学习路线图,建议收藏!_我愿称之为26年最详细的大模型学习路线!
  • AI Agent完全指南:从零开始掌握大模型新方向
  • 基于Spring AI的电商客服RAG系统实战教程,小白也能轻松上手
  • 2025.12.14日周报——文献阅读
  • 百炼-工作流-sb
  • 深入解析:Categraf | 国产化采集器实现:SQL Server 数据库指标采集、可视化、异常告警全流程
  • 1.25假期记录
  • 全网最全MBA必看TOP9 AI论文工具测评
  • 基于51单片机超声波智能垃圾桶控制系统红外感应舵机控制 DIY
  • 结构体struct类型定义的意义和一个vscode实用插件
  • 基于51单片机超声波智能垃圾桶控制系统
  • SpringBoot - yml配置文件
  • 【毕业设计】基于springboot的社会养老平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • Hadoop数据过滤:高效查询的预处理
  • 【毕业设计】基于springboot的社区志愿者服务系统(源码+文档+远程调试,全bao定制等)
  • 【课程设计/毕业设计】 基于Spring Boot的智能养老服务平台基于springboot的社会养老平台的设计与实现【附源码、数据库、万字文档】
  • Java毕设项目推荐-基于springboot的社会养老平台的设计与实现 基于Spring Boot的智能养老服务平台【附源码+文档,调试定制服务】