【python基础知识】Day26 函数

一、函数的定义

        函数是一段具有特定功能的、可重用的语句组,用函数名来表示。在需要使用函数时,通过函数名进行调用。函数也可以看作一段具有名字的子程序,可以在需要使用它的地方进行调用执行,不需要在每个执行的地方重复编写这些语句。

        每次使用函数时,可以提供不同的参数作为输入,以实现对不同的数据处理;函数执行后,可以反馈相应的处理结果。

        函数能够完成特定的功能,与黑盒类似,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。严格地说,函数是一种功能的抽象。

        有些函数是python自带的,如print()

        有些函数是库中含有的,如pandas库中pd.read()函数,scikit-learn库中各种机器学习模型

        使用函数的目的:

        1.降低编程难度:使用函数只用关注函数输入输出,能够解决的问题。在项目中遇到大问题,可以将大问题分解成小问题后,使用函数解决小问题

        2.代码复用:函数可以在一个程序中多个位置使用

        python使用def 保留字定义一个函数,语法形式如下:

def 函数名(参数列表):函数体return 返回值列表

        函数调用的形式如下:

函数名(参数列表)

二、函数的参数传递

1.可选参数与可变参数

(1)可选参数:在调用函数时,部分参数可以不用输入。

        原因:在定义函数时,为这些参数指定了默认值

        位置:可选参数必须定义在必选参数后面(这是因为函数调用时,需要按顺序输入参数)

(2)可变数量参数(可变参数):在参数前增加*号实现

        位置:可变参数必须在参数列表最后

2.参数的位置和名称传递

      (1)函数调用时,默认是按位置顺序传递给函数,dup("knock",4)中第一个实参赋值给形参str,第二个实参赋值给times。这种按照位置传递参数的方法固然好,但当参数多时,这种调用参数的方式可读性差

# 定义函数
def dup(str,times = 2):print(str*times)
# 调用函数
dup("knock",4)

        为了解决上述问题,python可以在调用时指定形参名,参数间的顺序可以任意调整

3.函数返回值

        return用来退出函数,并将程序返回到函数被调用的位置继续执行。return语句可以同时将0个、1个或多个值返回

        函数可以没有return,此时函数不返回值

4.全局变量和局部变量

        一个程序中变量有两类:全局变量和局部变量

        全局变量:函数之外定义的变量,在程序执行全过程中有效

        局部变量:函数内部使用的变量,仅在函数内部有效,函数退出后,变量将不存在

        python对变量的作用遵守以下规则:

        (1)简单数据类型变量,无论是否与全局变量重名,仅在函数内部创建和使用。函数退出后,变量被释放,

n = 1    # n是全局变量
def func(a, b):c = a*b     # c是局部变量,a、b作为函数参数也是局部变量return c
s = func("knock",2)
print(s)

如有全局同名变量,其值不变

n = 1    # n是全局变量
def func(a, b):n = b       # n是在函数内存中新生成的局部变量,不是全局变量return a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

 上述代码输出结果

knockknock   1

        (2)简单数据类型变量,在用global保留字声明后,作为全局变量使用。函数退出后,该变量保留且值被函数改变

n = 1    # n是全局变量
def func(a, b):global nn = b      # 将局部变量b 赋值给 全局变量nreturn a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

  上述代码输出结果

knockknock   2

        (3)组合数据类型变量的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值

ls = []             #创建一个列表
def func(a, b):ls.append(b)return a*b
s = func("knock",2)
print(s,ls)  #测试ls列表是否改变

  上述代码输出结果

knockknock   [2]

        (4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量操作,函数退出后局部变量被释放,全局变量值不变

ls = []             #ls是全局列表变量
def func(a, b):ls = []         #创建了名称为ls的局部列表变量ls.append(b)    # 将局部变量b增加到局部列表变量ls中return a*b
s = func("knock",2)
print(s,ls)         #测试ls列表是否改变

  上述代码输出结果

knockknock   [ ]

参考目录

[1] python语言程序设计基础(第2版) 嵩天 礼欣 黄天羽

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux云计算训练营笔记day08(MySQL数据库)

Linux云计算训练营笔记day08(MySQL数据库) 目录 Linux云计算训练营笔记day08(MySQL数据库)数据准备修改更新update删除delete数据类型1.整数类型2.浮点数类型(小数)3.字符类型4.日期5.枚举: 表头的值必须在列举的值里选择拷贝表复…

浪潮云边协同:赋能云计算变革的强力引擎

在数字化浪潮以排山倒海之势席卷全球的当下,第五届数字中国建设峰会在福州盛大开幕。这场以“创新驱动新变革,数字引领新格局”为主题的行业盛会,宛如一座汇聚智慧与力量的灯塔,吸引了国内外众多行业精英齐聚一堂,共同…

【Ubuntu】安装BitComet种子下载器

环境 Ubuntu 24.04.2 下载依赖库 环境比较新,此软件需要依赖很多旧的库,逐个安装下载: 1.libicu70 http://nz.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb2.libjavascriptcoregtk-4.0-18 http://security.ubu…

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC perl环境

Unix / Linux / macOS $ ./Configure $ make $ make test1、make Can‘t locate IPC/Cmd.pm in INC [ Downloads ] - /source/index.html https://www.openssl.org/source/ yum -y install perl-IPC-Cmd 2.make test Can’t locate Test/More.pm in INC perl环境 yum -…

MySQL——九、锁

分类 全局锁表级锁行级锁 全局锁 做全库的逻辑备份 flush tables with read lock; unlock tables;在InnoDB引擎中,我们可以在备份时加上参数–single-transaction参数来完成不加锁的一致性数据备份 mysqldump --single-transaction -uroot -p123456 itcast>…

网络基础概念

目录 协议分层 OSI七层模型 TCP/IP五层模型 MAC地址 IP地址 IP地址和MAC地址的区别 端口号 端口号范围划分 理解套接字socket UDP协议概念 TCP协议概念 网络字节序 协议分层 协议本质上也是一种软件。在设计时,为了更好地实现模块化和解耦合&#xf…

CSS Grid布局:从入门到实战

CSS Grid布局:从入门到实战 一、初识Grid布局 还在为网页布局发愁吗?Flexbox虽然好用,但当遇到复杂布局时,CSS Grid才是真正的王者。Grid布局是CSS中最强大的二维布局系统,它就像一张无形的网格纸,让我们…

[Linux] vim及gcc工具

目录 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及选项 2.工作布置 三、自动化构建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系统的常用工具中,常用vim来进行程序的编写&#xff1b…

LLaMA-Factory 微调 Qwen2-7B-Instruct

一、系统环境 使用的 autoDL 算力平台 1、下载基座模型 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com # (可选)配置 hf 国内镜像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat -…

Hapi.js知识框架

一、Hapi.js 基础 1. 核心概念 企业级Node.js框架:由Walmart团队创建,现由社区维护 配置驱动:强调声明式配置而非中间件 插件架构:高度模块化设计 安全优先:内置安全最佳实践 丰富的生态系统:官方维护…

串口模块详细讲解

目录 1.串口介绍 2。STC-ISP串口功能介绍 3.接口及引脚定义 4.串口知识点 4.1 硬件电路 4.2 电平标准 4.3 相关术语 4.4 常见通信接口比较 4.5 51单片机的UART 4.6 串口参数及时序图 4.7 串口模式图 4.8 串口和中断系统 4.9 串口相关寄存器 5.串口向电脑发送信息…

计算机视觉----时域频域在图像中的意义、傅里叶变换在图像中的应用、卷积核的频域解释

1、时域(时间域)——自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x(t)是描述信号在不同时刻取值的函数。 2、频域(频率域)——自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说…