《Python入门到精通》函数详解
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》
函数
- 1、函数的调用
- 2、函数的参数
- 2.1、变量的就近原则
- 2.2、传递参数
- 2.3、形参和实参
- 2.4、位置参数
- 2.5、缺省参数
- 2.6、可变类型和不可变类型
- 2.7、关键字参数
- 3、匿名函数
- 4、函数的返回值
函数就是一段「封装」起来的「代码」,目的是提高代码的「模块性」和「复用性」。
「模块性」:把具有「独立功能」的代码封装成一个模块,同时可以增加可读性
「复用性」:把需要「使用多次」的代码封装成一个模块(函数),后续直接调用函数,提高开发效率。
语法
def 函数名():代码
- 使用 def 关键字定义函数,后面跟函数名,后面跟括号
() - 括号里用来定义参数,多个参数之间使用逗号间隔
- 函数的内容以冒号
:开始,并且缩进 - 最后可以选择用 return 结束函数,结束的同时返回一个值。
实例:创建一个函数
def function1():print('hello pyton')
1、函数的调用
创建的函数默认「不执行」,需要「调用」才会执行;使用 函数名() 调用函数。
# 1、创建函数
def function1():print('hello pyton')# 2、调用函数
function1()
输出:
hello pyton
2、函数的参数
参数可以给函数「传递变量」,函数利用收到的变量进行具体的操作。
2.1、变量的就近原则
Python中的变量遵守「就近原则」,比如函数里面和外面有两个名字相同的变量,函数就会使用「里面」的变量,而不是外面的变量。
# 函数外面的变量
money = 18def function1():# 函数里面的变量money = 20print(money)function1()
开发时,如果搞混了这些「名字相同」的变量,可能会出现意料之外的情况。为了避免出现这类问题,函数采用了参数传递的方式。
2.2、传递参数
给函数传两个参数,并在函数内调用
name = 'ZhangSan'
money = 18def function1( name, money):print('我的名字是', name, '我有', money, '块钱!')function1( name, money)
输出:
我的名字是 ZhangSan 我有 18 块钱!
2.3、形参和实参
函数创建时,括号里的参数叫「形参」(形式参数),用来接收参数。
函数调用时,括号里的参数叫「实参」(实际参数),用来实际使用。
形参和实参的「名字」可以「不同」。
比如,我把参数名字随便改成其他的名字,仍然可以正常调用。当然,实际开发时,建议根据作用来命名参数。
name = 'ZhangSan'
money = 18# 1、函数定义时,接收形参
def function1( a, b):print('我的名字是', a, '我有', b, '块钱!')# 2、函数调用时,传入实参
function1( name, money)
输出:
我的名字是 ZhangSan 我有 18 块钱!
2.4、位置参数
函数调用时,参数的「数量」和「位置」必须和函数创建时一样。
name = 'ZhangSan'
money = 18def function1( a, b):print('第一个参数:', a)print('第二个参数:', b)function1( name, money)
输出:
第一个参数: ZhangSan
第二个参数: 18
如果参数的「数量不对」,会报错 TypeError。

如果参数的「位置不对」,会不符合预期。
name = 'ZhangSan'
money = 18def function1( a, b):print('我的名字是:', a, '我有', b, '快钱!')function1( money, name)
输出:
我的名字是: 18 我有 ZhangSan 快钱!
2.5、缺省参数
缺省参数也叫「默认参数」,在函数定义时,给参数指定「默认值」。
拥有默认值的参数,在函数调用时可以「不传值」:
- 如果传值,参数就会使用传入的新值
- 如果不传值,参数就会使用默认值
name = 'ZhangSan'
money = 18# 1、参数设置默认值
def function1( a, b = 28):print('我的名字是:', a, '我有', b, '块钱!')# 2、传值
function1( name, money)
# 3、不传值
function1( name)
输出:
我的名字是: ZhangSan 我有 18 块钱!
我的名字是: ZhangSan 我有 28 块钱!
2.6、可变类型和不可变类型
Python变量的类型中,整型、字符串、元组属于「不可变类型」,列表、字典等属于「可变类型」。
- 函数接收「不可变类型」的参数,采用「值传递」,只是修改另一个复制的变量,不会改变原变量的值。
- 函数接收「可变类型」的参数,采用「引用传递」,会改变原变量的值。
str1 = 'ZhangSan'
list1 = [1, 2, 3]# 修改传入的参数
def function1( str, list):str * 2list.append(4)function1( str1, list1)print(str1)
print(list1)
输出:
ZhangSan
[1, 2, 3, 4]
2.7、关键字参数
函数调用时,可以按照「参数关键字」给参数「赋值」。使用这种方式,可以不受参数顺序的限制。
name = 'ZhangSan'
money = 18def function1( a, b):print('我的名字是', a, '我有', b, '块钱!')# 关键字参数传参
function1( b=money, a=name)
输出:
我的名字是 ZhangSan 我有 18 块钱!
3、匿名函数
匿名函数不需要 def 来声明函数,而是用 lambda 表达式来创建函数。常用于处理简单的场景。
语法
函数名 = lambda [参数] : 代码块
lambda 表达式的格式是固定的,因此只能封装有限的代码进去。
实例:创建一个匿名函数,返回两个数相加之和。
function1 = lambda num1, num2: num1 + num2result = function1(1, 2)
print(result)
输出:
3
4、函数的返回值
关键字 return 可以让函数返回一个值,比如将函数的执行结果返回,或者返回一个自定义的值。
返回多个值需要用逗号间隔;如果不指定值,就返回None。
def function1(a, b):return a + bdef function2(a, b):return '自定义的值'def function3(a, b):return '第一个值', '第二个值'def function4(a, b):returnprint(function1(1, 2))
print(function2(1, 2))
print(function3(1, 2))
print(function4(1, 2))
输出:
3
自定义的值
('第一个值', '第二个值')
None
return 还有退出函数的作用, return 后面的代码不会被执行;如果一个函数内有多个 return ,则只返回第一个 return 的返回值。
def function1(a, b):return a + bprint('return后面的代码')return '第二个返回值'print(function1(1, 2))
输出:
3
相关文章:
《Python入门到精通》函数详解
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 函数 1、函数的调用2、函数的参数2.1、变量的就近原则2.2、传递参数2.3、形参和实…...
PHP流浪动物招领网站mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP流浪动物招领网站 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 下载链接 nullhttps://download.csdn.net/download/qq_41221322/88190168视频演示 …...
android—ktor-client封装使用,请求网络
ktor-client封装使用步骤: 1.导入依赖: 设置版本号: buildscript {ext.ktor_version 2.3.1 }添加依赖: implementation "io.ktor:ktor-client-okhttp:$ktor_version"implementation "io.ktor:ktor-client-auth…...
GD32F103VE侵入事件
GD32F103VE的TAMPER引脚(PC13),当PC13输入低电平时,会产生一个侵入检测事件。它会将所有“数据备份寄存器”内容清除。 这个功能有什么用? 一是防止被人开壳,抄袭。二是自毁功能。 直奔主题,多一句就是浪费时间。测试…...
将tp5项目、fastadmin项目部署到服务器宝塔面板
目录 一、将你的fastadmin或者tp5项目文件夹上传至你的服务器域名根目录下 二、修改你的网站目录指向,指向public目录,点击保存,并取消勾选防跨站攻击。 三、配置伪静态 四、fastadmin框架上传至服务器后如果想要访问后台可以进行重定向&am…...
Jenkins+Docker+SpringCloud微服务持续集成
JenkinsDockerSpringCloud微服务持续集成 JenkinsDockerSpringCloud持续集成流程说明SpringCloud微服务源码概述本地运行微服务本地部署微服务 Docker安装和Dockerfile制作微服务镜像Harbor镜像仓库安装及使用在Harbor创建用户和项目上传镜像到Harbor从Harbor下载镜像 微服务持…...
系统架构设计师-系统可靠性分析与设计
目录 一、可靠性相关基本概念 二、可靠性指标 1、串联系统与并联系统可靠性指标计算 2、混合系统 三、可靠性设计 1、影响软件可靠性的主要因素: 2、增加可靠性的解决方案 2.1 避错技术 2.2 降低复杂度设计 2.3 检错技术 2.4 容错技术 3、双机容错 一、可靠性相关…...
Linux(CentOS7)搭建达梦数据库
参考官方文档 本文记录一下达梦数据库的安装步骤,在安装的过程中出现了一些问题,进行了处理。 文章目录 安装前准备数据库安装命令行安装图形化安装 配置实例注册服务启动、停止数据库达梦数据库卸载 安装前准备 用户在安装 DM 数据库之前需要检查或修…...
[杂谈]-国产MCU竞争力浅析
[杂谈]-国产MCU竞争力浅析 文章目录 [杂谈]-国产MCU竞争力浅析1、研发方面2、技术方面3、市场方面4、应用方面5、生态方面6、总结 微控制器(MCU)是一种集成了微处理器、存储器、输入/输出接口和其他外设的单片电路,广泛应用于各种电子产品和系…...
4.1、Flink任务怎样读取集合中的数据
1、API说明 非并行数据源: def fromElements[T: TypeInformation](data: T*): DataStream[T] def fromCollection[T: TypeInformation](data: Seq[T]): DataStream[T] def fromCollection[T: TypeInformation] (data: Iterator[T]): Data…...
JD商品详情页面+关键词搜索商品列表API接口数据,详情页面数据返回值说明
作为一个工作助手,我无法直接为您提供实时的京东商品详情。您可以通过访问京东官方网站或使用API接口来查看商品的详细信息。每个商品的详情页面通常会包括以下内容: 1. 商品标题:商品的名称和简要描述。 2. 价格信息:包括原价、…...
Electron v26.0.0-beta.11 发布,跨平台桌面应用开发工具
Electron是一款跨平台桌面应用开发工具,它基于Web技术,使用HTML、CSS和JavaScript来构建应用程序。它能够让开发者使用熟悉的Web开发技术来创建强大的桌面应用,并且可以运行在Windows、macOS和Linux等多个操作系统上。 一、Electron的特点 跨平台:Electron可以将Web技术转…...
提高办案效率:公检系统引入自动校对技术
引入自动校对技术到公检系统中可以有效提高办案效率。自动校对技术结合公检系统的特点,可以在以下方面提高办案效率: 1.节省时间:自动校对技术可以快速检测和修正法律文书中的语法、拼写和标点符号等错误。与手动校对相比,自动校对…...
iptables 清空
清空 iptables中所有策略。 -Z: 重置计数器 -F:删除所有规则(flush) -X:删除所有自定义的链 规则清理和重建如下: iptables -Z iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING A…...
网络安全(黑客)零基础入门
导语 什么是 Web 安全?我又该如何入门学习它呢?学习过程中又应注意哪些问题呢?... 或许你的心中有着这样的疑问、不过别着急,本文会为你一一解答这些问题。 正文 定义 Web 安全,顾名思义便是由保障 Web 应用能够持续…...
Al Go: 蒙特卡洛树搜索(MCTS)简介
目录 1. 前言 1.1 Minimax 1.2 剪枝 1.3 蒙特卡洛树搜索 1.4 为什么随机走子会可行呢? 2. vanilla Monte Carlo tree search 3. UCT-based trade-off between exploitation and exploration 4. MCTS基本算法流程 5. Efficiency Through Expert Policies 6…...
Client-go操作Deployment
在工作中需要对kubernetes进行自定义资源的开发,操作K8s的资源肯定是必不可少的。K8s原生语言是用Go编写的,所以在CRD中使用client-go来操作资源。本次介绍一下使用client-go来操作Deployment。 1. 创建main函数 func main() {homePath : homedir.Home…...
设计模式——单例模式(懒汉和饿汉)
单例模式 一、概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的,比如打印机程…...
详解——Vue3递归函数功能
在 Vue 3 中,递归函数是一种在组件中调用自身的技术。递归函数在解决树状数据结构、无限级分类、嵌套组件等情况下非常有用。以下是一个示例,展示如何在 Vue 3 中实现递归函数的功能、代码和原理: 1. 创建递归组件: 首先&#x…...
【VSCode】查看二进制文件
1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令...
别再让机械臂乱动了!详解ROS2中Gazebo与MoveIt2的控制器配置与通信原理
别再让机械臂乱动了!详解ROS2中Gazebo与MoveIt2的控制器配置与通信原理 当你在RViz2中精心规划的轨迹,到了Gazebo仿真中却变成机械臂抽搐乱舞的"迷惑行为"时,问题往往出在控制器配置这个关键环节。本文将带你深入ros2_control框架…...
RDM接收端避坑指南:从哑音状态处理到UID校验,我的调试血泪史
RDM接收端避坑指南:从哑音状态处理到UID校验,我的调试血泪史 灯光控制系统的开发者们,如果你正在为RDM协议接收端的稳定性头疼不已,这篇文章或许能帮你省下几周的通宵调试时间。在实际工程中,协议文档的"理想情况…...
Gemma-3-12b-it部署教程:AWQ量化部署与精度损失实测对比
Gemma-3-12b-it部署教程:AWQ量化部署与精度损失实测对比 想体验Google最新的多模态大模型Gemma-3-12b-it,却被它动辄24GB的显存需求劝退?别担心,今天我们就来手把手教你如何通过AWQ量化技术,在消费级显卡上轻松部署这…...
模型剪枝实战避坑指南:从L1、Taylor到激活统计,三大策略到底怎么选?
模型剪枝实战避坑指南:L1、Taylor与激活统计三大策略深度解析 在深度学习模型部署的实际场景中,工程师们常常面临一个关键抉择:当模型大小和推理速度成为瓶颈时,如何在保证精度的前提下有效压缩模型?模型剪枝作为模型…...
想玩转人体姿态识别?这8个开源数据集(COCO、MPII、LSP等)的下载与使用避坑指南
想玩转人体姿态识别?这8个开源数据集的下载与使用避坑指南 当你第一次打开COCO Keypoints的JSON标注文件时,是否曾被密密麻麻的坐标点和ID编号搞得一头雾水?作为计算机视觉领域最基础也最关键的环节,数据集的正确使用往往决定了整…...
uniapp中SQLite表缺失问题的排查与解决——以“no such table”错误为例
1. 初识"no such table"错误:从报错信息说起 第一次在uniapp开发中遇到SQLite的"no such table"错误时,我盯着控制台输出的-1404错误代码足足愣了三分钟。控制台清晰地显示着: { "code": -1404, "message…...
告别手动排版!用NoteExpress一键搞定Elsevier期刊投稿的参考文献格式
科研效率革命:NoteExpress全自动参考文献排版实战指南 当你熬过无数个深夜终于完成论文初稿,却在参考文献排版环节卡壳时,那种挫败感我太熟悉了。去年投稿Elsevier期刊的经历让我深刻体会到,手动调整参考文献格式不仅耗时费力&…...
RV1106驱动ST7735S踩坑实录:从设备树到LVGL显示,我遇到的3个关键问题
RV1106驱动ST7735S踩坑实录:从设备树到LVGL显示的三个关键陷阱 最近在Luckfox Pico Pro Max(RV1106平台)上折腾ST7735S SPI屏幕时,遇到了几个颇具代表性的问题。这些问题不仅让我熬了几个通宵,也让我对嵌入式Linux的显…...
用STM32和US100超声波模块做个智能小车避障:从硬件连接到代码调试全流程
STM32与US100超声波模块实战:打造高精度智能避障小车 项目背景与核心组件 智能小车作为嵌入式开发的经典项目,融合了传感器技术、电机控制和算法逻辑等多个领域。在这个项目中,我们将使用STM32F103C8T6最小系统板作为主控,搭配US1…...
封神了!网络安全攻防全攻略,6 大黑客技术一文吃透
一、黑客常用的入侵方式 黑客常用的渗透方法大体可以分为6类:获取口令入侵、远程控制入侵、木马入侵、系统漏洞入侵、电子邮件入侵、网络监听入侵等。 1.获取口令入侵 顾名思义,就是获取到管理员或者用户的账号、密码,进而窃取系统信息。获…...
