Python(五)-函数

目录

函数的定义与调用

特点

语法格式 

函数的参数

函数的返回值

函数嵌套调用

变量的作用域

局部变量

全局变量

函数的多种参数

位置参数

关键字参数

默认参数

可变参数


函数的定义与调用

python函数需要使用def关键字来定义,需要先定义,后调用

特点:

  • 先定义,后调用
  • 不调用,不执行
  • 调用一次,执行一次

语法格式 

# 定义函数

def 函数名():

        代码1

        ...

# 调用函数

函数名()

编写一个show()函数,并在函数中输出:bug虐我千百遍, 我待bug如初恋。

def show():print("bug虐我千百遍, 我待bug如初恋。")show()

函数的参数

当在定义函数时,设定了参数,则可称该函数为:有参函数。反之,没有参数的函数,称为:无参函数。

(1)形参是指形式参数,表示在定义函数时的参数;

(2)实参是指实际参数,表示在调用函数时传递的参数值,具有实际意义。

有参函数

def 函数名(参数1,参数2,...):  # 形参
    代码1
    代码2
    ...

函数名(参数值1,参数值2,...)  # 实参

定义一个函数,用于求解两个数之和;

def sum_num(a,b):sum = a + bprint(f"两个数的和:{sum}")sum_num(2,4)  # 6
sum_num(7,4)  # 11

函数的返回值

函数的返回值指的是:当函数完成一件事情后,最后要返回给函数的结果。

def 函数名([参数1, 参数2, ...]):
    代码1
    代码2
    ...
    return 值

...

print(函数名(实参,实参,...))

:

(1)若要给函数返回结果,需要使用return关键字;

(2)return关键字的作用:把结果返回给函数;结束函数;

(3)当函数没有返回值时,默认返回None。

(1)定义一个函数1,用于求解两个数之积,并把积返回给函数;

(2)定义一个函数2,用于求解两个数的差、和,并同时返回给函数;

(3)定义一个函数3,输出:人生苦短,我用Python;

# 1.求解两个数的积
def func1(a,b):return a*bprint(func1(3,5))  # 15# 2.求解两个数的差,和
def func2(x,y):return x-y,x+yprint(func2(8,5))  # (3,13)  输出的是一个元组# 3.输出没有返回值
def show():print("人生苦短,我用Python。")show() # 人生苦短,我用Python。
print(show())  # None

函数嵌套调用

def 函数1():
    代码
    ...

def 函数2():
    代码
    # 调用函数1
    函数1()
    ...

例1:

(1)先定义一个test()函数和func()函数;

(2)接着,在函数test()中,嵌套调用func()函数,并在外部调用test()函数;

(3)执行程序,观察效果;


# 1.定义func()
def func():print("==========AA===============")print("==========Nfunc()============")print("==========BB===============")# 2.定义test()、调用func()
def test():print("*************11****************")func()print("**********M调用了test方法**************")print("*************22****************")# 3.调用test()
test()   

例2:

(1)要完成一个输出任意条横线的需求;

(2)定义函数1:用于输出一条横线;

(3)定义函数2:先循环N次,再调用函数1,可输出N条横线;

def print_one_line():print("-"*40)def print_lines(num):i = 0while i < num:print_one_line()i += 1print_lines(10)

变量的作用域

局部变量

局部变量指的是:定义在函数内部的变量或参数,且只在函数中生效。

def 函数名(参数1,参数2,...):
    代码
    变量名 = 值
    ...

(1)定义一个函数1,有局部变量:参数;

(2)定义一个函数2,有局部变量:变量;

(3)调用函数,观察程序执行效果。

# 1.参数
def func1(a):print(f"a值为:{a}")func1(2)def func2():b=100  # 局部变量print(f"===========b的值 = {b}")func2()
print(b) # 报错

全局变量

全局变量指的是:在函数体内、外都能生效的变量。

变量名 = 值

def 函数名():
    代码
    ...

注意:想要修改全局变量的值时,记得提前使用global进行声明.

# 声明
global 变量名
# 修改值
变量名 = 修改后的值

(1)定义一个全局变量1,并在函数内外都使用;

(2)定义一个同名的全局变量2和局部变量,并在函数内使用该同名变量;

# 1.定义全局变量
a = 100
print(a)def func():print(f"输出的变量:{a}")func()# 3.定义同名变量
age = 18def show():age = 34print(f"输出age的值为:{age}")show()
print(f"age = {age}")

注意:当全局变量和局部变量设置的变量名相同,优先输出全局变量 

函数的多种参数

位置参数

调用函数时,根据函数定义的参数位置来传递数值。

def 函数名(参数1,参数2,...):
    代码
    ...

函数名(值1,值2,...)

(1)定义使用格式化符号替换数据,显示法名,技能,年龄

def show_info(name, skill, age):print("-" * 50)print("法名: %s"%name)print("技能: %s"%skill)print("年龄: %d"%age)print("-" * 50)# 2 关键字参数 关注点: 值找到对应的参数名就可以, 跟顺序无关(参数多时 比较适合)
# show_info(skill="好色", age=888, name="八戒")
# show_info(age=888) # 报错: 缺少两个参数 name, skill# 1 位置参数 关注点: 参数 个数, 类型, 顺序(缺点: 必须按照指定顺序来)
show_info("悟空", "七十二绝技", 666)
# show_info("悟空", 72, "666") # 报错: 需要整数, 传递的字符串, 类型不一致
# show_info("悟空") # 报错: 缺少参数

注意:如果参数的个数不够,或者类型不对,将会报错

关键字参数

调用函数时,可以通过【键 = 值】的形式指定参数。

def 函数名(参数1,参数2,...):
    代码
    ...

函数名(参数1=值, 参数2=值,...)

定义一个函数,用于显示个人名片的姓名、年龄、性别等信息;

# 1.定义显示个人信息的函数
def show_infos(name, age, sex):print("个人信息如下:")print(f"姓名:{name}")print(f"年龄:{age}")print(f"性别:{sex}")# 2.调用
show_infos(age=24,name="张三",sex="女")
# show_infos(age=24,name="张三",gender="女")  # 报错

默认参数

在定义函数时,就为参数提供默认值。

def 函数名(参数1,参数2,...,参数n=值):
    代码
    ...

函数名(值1,值2,...[值n])

定义一个显示姓名,电话,密码的函数,且默认性别为男;

def emp(name, phone, password="123456"):print("-" * 50)print(f"个人信息: name={name}, phone={phone}, password={password}")print("-" * 50)# emp("悟空", "18612480001", password="baqi")
emp("八戒", "18612480001")# 报错: 设置默认参数 必须参数的最后
# def emp(password="123456", name, phone):
#     print("-" * 50)
#     print(f"个人信息: name={name}, phone={phone}, password={password}")
#     print("-" * 50)# 报错: 设置默认参数 必须参数的最后
# def emp(name="悟净", phone, password="123456"):
#     print("-" * 50)
#     print(f"个人信息: name={name}, phone={phone}, password={password}")
#     print("-" * 50)

 注意:定义默认参数必须放在最后的位置,并且打印时也不可以换位置

可变参数

可变参数也叫不定长参数,不定长参数用于在不确定调用函数时,要传递多少个参数的场景,当然也可以不传递参数。

而当要调用函数时,可以给*args传递位置参数,给**kwargs传递关键字参数,这样显得更加方便。

def 函数名(参数1,..,*args,**kwargs):
    代码
    ...
    
函数名(值1, 值2, 值3, ... 参数1=值, 参数2=值,...)

(1)定义函数1,使用不定长参数*args求多个数之和;

(2)定义函数2,使用不定长参数**kwargs求多个数之和;

(3)综合两个函数,合并在一起完成求多个数之和;

# 1.通过*args求和
def num1(*args):print(args)sum1 = 0for i in args:sum1 += iprint(f"多个数之和为:{sum1}")num1(1,2)  # 3
num1(1,2,9)  # 12
num1(1,2,9,11)  # 23# 2.通过**kwargs之和
def num2(**kwargs):print(kwargs)sum2 = 0for i in kwargs.values():sum2 += iprint(f"多个数之和为:{sum2}")num2(a=1,b=2)  # 3
num2(a=1,b=2,c=4)  # 7
num2(a=1,b=2,c=3,d=9)  # 15# 3.结合
def num3(*args,**kwargs):result = 0sum1 = 0for i in args:sum1 += isum2 = 0for i in kwargs.values():sum2 += iresult = sum1 + sum2print(f"多个数之和为:{result}")num3(3, a=1, b=2, c=4)  # 10
num3(3,6, a=1, b=2, c=4)  # 16
num3(3,6, a=1, b=2, c=4,f=9)  # 25

 

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

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

相关文章

【数据结构与算法】LeetCode:二分查找

文章目录 二分查找二分查找搜索插入位置 &#xff08;Hot 100&#xff09;x 的平方根搜索二维矩阵&#xff08;Hot 100&#xff09;在排序数组中查找元素的第一个和最后一个位置 &#xff08;Hot 100&#xff09;搜索旋转排序数组 &#xff08;Hot 100&#xff09;寻找旋转排序…

【Ubuntu】minicom安装、配置、使用以及退出

目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具&#xff0c;以root权限登录系统&#xff0c;可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面&#xff1a; sudo minicon -s 进入配置界面后&#xff0c;…

【STM32】 TCP/IP通信协议--LwIP介绍

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

OCR Fusion: EasyOCR/Tesseract/PaddleOCR/TrOCR/GOT

文章目录 前言一、基类 OCRExecutorBase二、EasyOCR1.安装2.模型下载3.DEMO 三、Tesseract1.安装2.使用问题3.DEMO 四、PaddleOCR1.安装2.DEMO 五、PaddleOCR&#xff08;PyTorch移植版&#xff09;1.代码整理2.DEMO 六、TrOCR1.安装2.模型下载3.DEMO 七、GOT1.安装2.模型下载3…

TCP\IP标准与OSI标准

TCP/IP 模型和 OSI 模型都是用于描述网络体系结构的模型&#xff0c;但它们的设计理念和层次结构有所不同。TCP/IP 模型更注重实际实现&#xff0c;而 OSI 模型更注重抽象和标准化。 1. OSI 模型 (Open Systems Interconnection Model) OSI 模型是一个七层模型&#xff0c;从…

UFS 3.1架构简介

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下…

vue3实现打字机的效果,可以换行

之前看了很多文章,效果是实现了,就是没有自动换行的效果,参考了文章写了一个,先上个效果图,卡顿是因为模仿了卡顿的效果,还是很丝滑的 目录 效果图:代码如下 效果图: ![请添加图片描述](https://i-blog.csdnimg.cn/direct/d8ef33d83dd3441a87d6d033d9e7cafa.gif 代码如下 原…

Vue(16)——Vue3.3新特性

defineOptions 在 Vue 3.3 之前&#xff0c;如果需要在 <script setup> 中设置组件名&#xff0c;通常需要在额外的 <script> 标签中使用 Options API 进行配置。defineOptions 是 Vue 3.3 版本中引入的一个宏&#xff08;macro&#xff09;&#xff0c;它主要用于…

初识Linux以及Linux的基本命令

千呼万唤始出来&#xff0c;Linux系列的文章从今天起开始不定期更新&#xff0c;闲话少叙&#xff0c;我们直接进入正题 初识Linux 这一部分我不打算给大家讲Linux的发展史啥的&#xff0c;直接从系统方面开始介绍 首先&#xff0c;我们平时用win10或win11所看到的桌面以及各…

element ui中当el-dialog需要做全屏时,.fullscreen样式修改问题

element ui 饿了么UI中el-dialog样式修改问题 场景解决方法就是&#xff1a;去掉底部样式中的scoped,然后再进行页面级样式的更改即可。 场景 最近在使用element-ui时&#xff0c;使用到了弹窗组件&#xff1a; element-ui 官网链接地址&#xff1a; element-ui 官网链接地址…

基于springboot+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论&#xff0c;也能对账户进行在线充值…

数据集-目标检测系列-吸烟检测数据集 smoking cigarette >> DataBall

数据集-目标检测系列-吸烟检测数据集 smoking cigarette >> DataBall 数据集-目标检测系列-吸烟检测数据集 &#xff08;smoking cigarette&#xff09; 数据量&#xff1a;1W 数据项目地址&#xff1a; gitcode: https://gitcode.com/DataBall/DataBall-detections-…

双链表的插入删除遍历

双链表的插入操作 双链表的删除操作 双链表的遍历操作

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…

netty编程之实现websocket客户端并发送二进制消息

写在前面 源码。 本文看下netty如何实现websocket客户端并发送二进制消息。 ws的server端参考这篇文章。 1&#xff1a;正文 抽象类AbstractWebsocketClient定义了发送二进制数据的方法&#xff1a; public abstract class AbstractWebsocketClient implements Closeable {…

【Immich部署与访问】自托管媒体文件备份服务 Immich 本地化部署与远程访问存储数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

【C++】STL详解之string类

目录 什么是STL STL的版本 STL的六大组件 STL的缺陷 一.string的定义方式 二. string的插入 1.使用push_back进行尾插 2.使用insert插入 三.string的拼接 四.string的删除 1.使用pop_back进行尾删 2.使用erase进行删除 五.string的查找 1.使用find正向搜索第一个…

Python 将数据写入 excel(新手入门)

一、场景分析 假设有如下一组列表数据&#xff1a; 写一段 python脚本 将这组数据写入一个新建的 excel&#xff0c;表头是 【序号】、【姓名】、【性别】、【年龄】 student_list [{name:小林, gender:男, age:10}, {name:小红, gender:女, age:11}, {name:小王, gender:男…

了解输出电源优先级

主要又SUB&#xff0c;SBU以及USB三种模式。 调试10kW逆变器存在的输出电源优先级的问题&#xff0c;当优先级为SUB时&#xff0c;利用电压源模拟电池&#xff0c;当电池电压超过58.4V&#xff0c;即过压&#xff0c;在接入市电&#xff0c;市电继电器仍然闭合&#xff0c;仍然…

JS加密=JS混淆?(JS加密、JS混淆,是一回事吗?)

JS加密、JS混淆&#xff0c;是一回事吗&#xff1f; 是的&#xff01;在国内&#xff0c;JS加密&#xff0c;其实就是指JS混淆。 1、当人们提起JS加密时&#xff0c;通常是指对JS代码进行混淆加密处理&#xff0c;而不是指JS加密算法&#xff08;如xor加密算法、md5加密算法、…