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

news2024/11/16 7:50:55

「作者主页」:士别三日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 = 18

def function1():
    # 函数里面的变量
    money = 20
    print(money)

function1()

开发时,如果搞混了这些「名字相同」的变量,可能会出现意料之外的情况。为了避免出现这类问题,函数采用了参数传递的方式。


2.2、传递参数

给函数传两个参数,并在函数内调用

name = 'ZhangSan'
money = 18

def 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 = 18

def function1( a, b):
    print('第一个参数:', a)
    print('第二个参数:', b)

function1( name, money)

输出:

第一个参数: ZhangSan
第二个参数: 18

如果参数的「数量不对」,会报错 TypeError。

在这里插入图片描述

如果参数的「位置不对」,会不符合预期。

name = 'ZhangSan'
money = 18

def 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 * 2
    list.append(4)

function1( str1, list1)

print(str1)
print(list1)

输出:

ZhangSan
[1, 2, 3, 4]

2.7、关键字参数

函数调用时,可以按照「参数关键字」给参数「赋值」。使用这种方式,可以不受参数顺序的限制。

name = 'ZhangSan'
money = 18

def function1( a, b):
    print('我的名字是', a, '我有', b, '块钱!')

# 关键字参数传参
function1( b=money, a=name)

输出:

我的名字是 ZhangSan 我有 18 块钱!

3、匿名函数

匿名函数不需要 def 来声明函数,而是用 lambda 表达式来创建函数。常用于处理简单的场景。

语法

函数名 = lambda [参数] : 代码块

lambda 表达式的格式是固定的,因此只能封装有限的代码进去。

实例:创建一个匿名函数,返回两个数相加之和。

function1 = lambda num1, num2: num1 + num2

result = function1(1, 2)
print(result)

输出:

3

4、函数的返回值

关键字 return 可以让函数返回一个值,比如将函数的执行结果返回,或者返回一个自定义的值。

返回多个值需要用逗号间隔;如果不指定值,就返回None。

def function1(a, b):
    return a + b

def function2(a, b):
    return '自定义的值'

def function3(a, b):
    return '第一个值', '第二个值'

def function4(a, b):
    return

print(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 + b
    print('return后面的代码')
    return '第二个返回值'

print(function1(1, 2))

输出:

3

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

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

相关文章

恶意扩展可滥用 VS Code 漏洞窃取认证令牌

微软的 Visual Studio Code (VS Code) 代码编辑器存在一个漏洞,允许恶意扩展程序检索 Windows、Linux 和 macOS 中存储的身份验证令牌。 这些令牌用于集成各种第三方服务和 API,如 Git、GitHub 和其他编码平台,因此窃取这些令牌可能会对数据…

试用MetaGPT

简介 最近朋友和B站都给我推 MetaGPT,正好有空就下载亲测了一下。MetaGPT 是目前(230809)github热榜第一名,今天就加了3000多个星。 MetaGPT是一个多智能体框架,能够生成不同的角色:工程师、产品经理、架…

【sonar】安装sonarQube免费社区版9.9【Linux】【docker】

文章目录 ⛺sonarQube 镜像容器⛺Linux 安装镜像🍁出现 Permission denied的异常🍁安装sonarQube 中文包🍁重启服务 ⛺代码上传到sonarQube扫描🍁java语言配置🍁配置 JS TS Php Go Python⛏️出现异常sonar-scanner.ba…

lc345. 反转字符串中的元音字母

元音字母按照从外到内成对的方式反转,不考虑出现的元音字母个数为奇数的情况 双指针:指针1由左向右遍历,指针2由右向左遍历,某个指针指向元音字母时停止,直到它另一个指针也指向元音字母,此时两个指针指向的…

YonGPT发布背后,“实用主义”成为大模型落地新风向

近年来伴随着数字经济的高歌猛进,国内企业服务赛道迅速站上行业风口。以ChatGPT为代表的大模型的到来,更为整个企服赛道添了一把火。而7月27日用友对外发布的首个企业服务大模型YonGPT,则正式宣告了企业服务大模型全新时代的到来。 目前参与…

C# 2048小游戏核心算法

文章目录 01.程序结构划分02.去零03.合并04.上移05.下移/左移/右移&#xff0c;只是取数据的方向不同06.提高可读性 01.程序结构划分 02.去零 有序向量“唯一化”的思路。 /// <summary>/// 去零/// </summary>/// <param name"row">对于一行或一…

torch.functional.affine_grid的坑

问题描述&#xff1a;在用torch进行图像仿射变换的时候&#xff0c;平移始终有问题 比如现在想要让一张图对应的tensor平移0.5个图像长度 那么需要先构造一个transform_matrix&#xff0c;这里网上说的是偏移量不是像素值&#xff0c;而是归一化的比例 shift_x 0.5 shift_y…

dependency xxxx not found 爆红

一、根本方法&#xff1a;直接手动安装jar包 mvn官网下载之后&#xff0c;终端进入该jar包目录下&#xff08;把下载的jar包移动到本地仓库&#xff09; 运行mvn install:install-file -Dfilejar包的路径 -DgroupIdgruopId中的内容 -DartifactIdactifactId的内容 -Dversionver…

智能财务分析的无冕之王-奥威BI数据可视化工具

利用智能数据可视化分析工具&#xff0c;可极大提升财务分析效率和报表可读性&#xff0c;缩短从分析到决策的耗时。但财务分析的难度往往比其他分析更高&#xff0c;因为它的分析指标计算组合变化太多也太快。哪些数据可视化工具能胜任智能财务数据分析&#xff1f; 奥威BI数…

共享饮水机开发让饮用水更放心

共享饮水机是指基于共享经济模式&#xff0c;将饮水机资源进行共享的服务&#xff0c;区别于传统饮水机&#xff0c;它是一款集物联网控制、远程上报、设备检测等为一体的设备。通过共享饮水机&#xff0c;用户可以方便地获得新鲜的饮用水而不需要购买和维护自己的饮水机。 共享…

算法通关村——迭代实现二叉树的前中后序遍历

前言 递归就是每次执行方法调用都会先把当前的局部变量、参数值和返回地址等压入栈中&#xff0c;后面在递归返回的时候&#xff0c;从栈顶弹出上一层的各项参数继续执行&#xff0c;这就是递归为什么能够自动返回并执行上一层的方法的原因。因此&#xff0c;我们也可以模拟一个…

业务逻辑基础与实操

文章目录 一、定义二、业务逻辑的挖掘1.常见业务流程电信网厅业务火车票订购业务流程网购业务流程 三、挖掘关键点1.验证码突破2.业务授权安全a.未授权访问b.越权访问i)平行越权&#xff08;水平越权是指相同权限的不同用户可以互相访问&#xff09;ii) 垂直越权&#xff08;垂…

Flutter:屏幕适配

flutter_screenutil flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 flutter_screenutil提供了一些用于处理尺寸和间距的方法&#xff0c;使得开发者可以根据设备的屏幕尺寸和密度…

《剑指offer》(6)其他算法

先计算下三角&#xff0c;再遍历一次计算上三角。 class Solution: def multiply(self , A: List[int]) -> List[int]: #长度判断 n len(A) if n < 1: return [] B [1]*n #计算乘矩阵的下三角&#xff0c;B中的每一个数都是A的前一个数和B的前一个数相乘 for i in ran…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

MobaXterm 中文乱码, 及pojie

中文解决方法&#xff1a; 把“连字”去掉&#xff01; MobaXterm网页&#xff0c;可以生成一个授权文件Custom.mxtpro。放在安装目录就可以了 MobaXterm Keygen (husbin.top)http://b70.husbin.top:5000/

VS+Qt+C++旅游景区地图导航源码实例

程序示例精选 VSQtC旅游景区地图导航 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQtC旅游景区地图导航>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。…

药库管理指南:除了药物质量,这个技能很关键

随着医疗技术的不断进步&#xff0c;药品的质量要求也日益严格&#xff0c;药物的稳定性、疗效以及避免细菌滋生等方面都直接受到温湿度变化的影响。 药品质量和安全是医疗行业的首要任务之一&#xff0c;药库温湿度监控在此过程中发挥着关键作用。通过科学合理地实施温湿度监控…

Java 线程的生命周期和状态(实践加深理解)

一、常规回答&#xff08;八股文&#xff09; 线程的生命周期一共分为有6个状态&#xff0c;在某个时刻中&#xff0c;一个线程只会处在6个状态中的其中一种。 第1&#xff1a;初始状态&#xff08;NEW&#xff09; 当前的线程已经被创建了出来&#xff0c;但是还没有通过调用…

宝塔如何部署springboot前后端分离项目

一&#xff1a;准备工作 1.阿里云购买一个centos的服务器 2.环境准备&#xff1a; 2.1 jdk1.8 2.2 nginx 2.3 mysql 2.4 redis 2.5tomcat 这里根据网上的教学很好安装如果是宝塔的话除了redis都可以一键安装 软件商城安装这三个即可 数据库也是可以直接可视化创建并且导入sq…