《Python入门到精通》函数详解

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

函数

  • 1、函数的调用
  • 2、函数的参数
    • 2.1、变量的就近原则
    • 2.2、传递参数
    • 2.3、形参和实参
    • 2.4、位置参数
    • 2.5、缺省参数
    • 2.6、可变类型和不可变类型
    • 2.7、关键字参数
  • 3、匿名函数
  • 4、函数的返回值

函数就是一段「封装」起来的「代码」,目的是提高代码的「模块性」「复用性」

「模块性」:把具有「独立功能」的代码封装成一个模块,同时可以增加可读性
「复用性」:把需要「使用多次」的代码封装成一个模块(函数),后续直接调用函数,提高开发效率。

语法

def 函数名():代码
  1. 使用 def 关键字定义函数,后面跟函数名,后面跟括号()
  2. 括号里用来定义参数,多个参数之间使用逗号间隔
  3. 函数的内容以冒号:开始,并且缩进
  4. 最后可以选择用 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易服客工作室:7个优质WordPress LMS线上教育系统插件比较(优点和缺点)

您是否正在为您的 WordPress 网站寻找最好的 LMS 插件?在线学习管理系统 (LMS) 插件允许您使用 WordPress 创建和运行类似 Udemy 的在线课程。 一个完美的 WordPress LMS 插件包括管理在线课程内容、处理订阅、运行和评分测验、接受付款等功能。 在本文中&#xf…

yolov5代码解读之yolo.py【网络结构】

​这个文件阿对于做模型修改、模型创新有很好大好处。 首先加载一些python库和模块: 如果要执行这段代码,直接在终端输入python yolo.py. yolov5的模型定义和网络搭建都用到了model这个类(也就是以下图片展示的东西):(以前代码没…

【学习日记】【FreeRTOS】调度器函数实现详解

写在前面 本文主要是对于 FreeRTOS 中调度器函数实现的详细解释,代码大部分参考了野火 FreeRTOS 教程配套源码,作了一小部分修改。 一、MSP 和 PSP Cortex-M有两种栈空间,主堆栈和进程堆栈。 MSP 用于系统级别和中断处理的堆栈 MSP 用于保…

linux配置上网 linux adsl拨号上网设置

Linux里面配置ADSL上网是件很麻烦的事。但配置完成之后就能开机自动拨号上网,可谓十分的方便。支持的系统有Redhat,CentOS,SuSE,FreeBSD,Ubuntu等常见的Linux。 工具/原料 ADSL网络,电信,网通,移动等常见宽带。 Linux系统的安装光…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)

文章目录 一、简介1. MinGW 和 MinGW-W64 区别和联系2. MSVCRT 和 UCRT 介绍 二、下载1. 从 sourceforge.net 下载2. 从 github 下载3. 从 镜像站点 下载4. 自己编译 三、安装与配置1. 在线安装2. 离线安装3. 环境配置 四、总结 一、简介 1. MinGW 和 MinGW-W64 区别和联系 M…

LinearAlgebraMIT_8_TheRankOfMatrix

这节课中主要讲解根据秩来判断方程组/矩阵的(solvability)解情况,即通过秩来判断(aumented matrix)增广矩阵的解。我们需要直接求解方程组的解就是求解矩阵的解。 x.1 判断(非齐次线性方程组)Axb是否有解 我们以下面这个方程组为例,它具有3个约束条件和…

《OWASP代码审计》学习——跨站脚本注入(XSS)

一、跨站脚本概述 1.什么是跨站脚本 跨站点脚本(XSS)是一种编码注入漏洞。它通常出现在 web 应用程序中。XSS 使攻击者能够向其他用户浏览的网页中注入恶意内容。XSS 允许攻击者绕过访问控制,它是 OWASP Top10 最常见的漏洞之一。XSS 是网络服务器上的第二大漏洞。…

Linux系统性能调优及调试课:Linux Kernel Printk

🚀返回专栏总目录 文章目录 0、printk 说明1、printk 日志等级设置2、屏蔽等级日志控制机制3、printk打印常用方式4、printk打印格式0、printk 说明 在开发Linux device Driver或者跟踪调试内核行为的时候经常要通过Log API来trace整个过程,Kernel API printk()是整个Kern…

Flume拦截器

实现 Interceptor接口 方法1 是初始化: 方法2和3重载 拦截: 方法3 是关闭: 但是flume是通过内部类创建对象的

餐饮管理系统ssm酒店饭店仓库进销存jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 餐饮管理系统ssm 系统有1权限:管理员 二…

Vue中使用qrcode说明

1.安装 npm i qrcode1.5.3 2.导入 import QRCode from qrcode 3.转换 说明:拿到服务器传来的字符串,转换成base64,然后通过img标签展示。 // 字符串转成二维码 let result await this.$API.reqPayInfo(this.orderId); 总结:

Java一般用于postgis空间数据库通用的增删查改sql命令

目录 1 增加 2 删除 3 查询 4 更新 "public"."JGSQGW_Geo"为某模式下得表 一般postgrel有这样的设计模式 1 增加 #前端绘制出的数据插入 INSERT INTO "public"."JGSQGW_Geo" ( "geom","gridone","gridon…

集合Collection-List-ArrayList学习

一、集合 集合是数据容器。相较于数组集合具有以下几个特点: 数组一旦创建,长度不可改变。集合的长度会自动扩容。集合具有很多数组没有的功能函数API数组元素的存储特点单一,不同的集合有不同的存储特点。 1. Collection顶层接口 Collect…

zustand:基于 Flux 模型实现的小型、快速和可扩展的状态管理

目录 ReactStep 1:安装Step 2:Store 初始化Step3:Store 绑定组件,就完成了!效果图 VueStep 1: 安装Step 2: Store 初始化Step 3: Store 绑定组件,就完成了!效果图 微前端为什么你需要 zustand-pub ?安装ste…

Centos8上加速git clone

首先通过命令获取域名对应的IP地址 [rootggbond ~]# nslookup github.global.ssl.fastly.net [rootggbond ~]# nslookup github.com 之后如上获取到的IP地址 以IP-域名的格式加入到hosts文件中 [rootggbond ~]# vim /etc/hosts Centos8上更新DNS缓存 [rootggbond ~]# nscd -…

R语言5_安装Giotto

环境Ubuntu22/20, R4.1. 已开启科学上网。 第一步,更新服务器环境,进入终端,键入如下命令, apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev libhdf5-dev libmagick9-dev …

opencv基础55-获取轮廓的特征值及示例

轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本节介绍几个轮廓自身的属性特征及轮廓所包围对象的特征。 宽高比 可以使用宽高比(AspectRation)来描述轮廓,例如矩形轮廓的宽高比为: 宽高比 宽度&am…

消息队列比较

、ActiveMQ 优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据。 缺点:官方社区现在对ActiveMQ5.X维护越来越少了,高吞吐量场景较少使用。 2、K…

htmlCSS-----案例展示

目录 前言 作品效果 html代码 CSS代码 图片资源 前言 在学习html过程中我们要试着去写写一些案例,通过这些案例让我们更加熟悉代码以及丰富我们的经验,下面是我个人写的一个案例,代码和图片也给出了大家,你们可以参考参考。…

linux cp -rpf指令

cp -rpf #强行递归复制/etc目录到/mist目录中,并保持源目录的权限等信息不变。 有点类似于打patch,不会改变已有的内容。