Python学习基础笔记十三——函数

news2025/2/28 10:38:25

1、函数的定义:

函数是一段具有特定功能的、可重用的语句组。

说明:过程语言,程序员是按照顺序一行一行的编写代码,然后是顺序执行,很容易出现大量重复的代码行,那么有人就考虑将相同的代码提取出来,独立实现一个功能,供需要的代码调用,这就是函数的来源。

2、通过函数名来进行调用,函数也被看着是一段具有名字的程序,在需要的地方调用执行。对函数的使用不需要了解函数内部实现的原理,只要了解函数的输入输出方式即可。

3、函数的参数:每次函数提供不同的参数作为输入,以实现对不同数据的处理。参数是调用该函数时传递给它的值,可以有零个、一个或者多个。

4、函数的返回值:函数执行后,可以反馈相应的处理结果。当需要返回值的时候,使用保留字return和返回值列表,函数也可以没有return语句。

定义函数的语法形式:

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

5、函数的特点:

1)减少代码重复;

2)使程序更加模块化;

3)使程序便于阅读。

例1:

str1 = '我爱中华人民共和国'


def my_len(s):         # def是保留字定义一个函数,my_len是函数名,s是形参
    i = 0              # i是计数器
    for k in s:        # k是字符串元素
        i = i + 1
    return i           #返回的是字符串元素的个数


ret = my_len(str1)     # my_len函数名调用函数,str1是实参

print(ret)

6、函数的调用过程:

程序调用一个函数需要执行4个步骤:

1)调用程序在调用处暂停执行;

2)在调用时将实参复制给函数的形参;

3)执行函数体语句;

4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

函数式编程是一种编程范式,常见的编程范式还包括命令式编程和面向对象编程等,函数式编程的主要思想是把程序过程尽量写成一系列函数调用,通过函数进一步提高封装级别。函数式编程通过使用一系列函数能够使代码编程编写更简洁、更易于理解,是中小规模软件项目中最常用的编程方式。

7、函数的返回值:

return语句用来退出函数并将程序返回到函数被调用的位置继续执行。return语句可以同时将0个、1个、多个函数运算后的结构返回给函数被调用处的变量。

7.1 返回值的三种情况:

# 没有返回值,返回值为None;

        1)不写return语句;

        2)只写return,结束一个函数;

        3)return None:不常用;

# 返回1个值:

        1)可以返回任意数据类型;

        2)只要返回就可以被接收到;

        3)如果一个程序中有多个return语句,那么只执行第一个。(如果是顺序执行的话)

# 返回多个:

        1)用多个变量接收:有多少返回值就用多少返回值接收;

        2)用一个变量接收:得到的是一个元组。

例2:函数调用。

def f1(l1):
    print("f1 function")
    print("f1 for:")
    for i in l1:
        print(i)


def f2(l1):
    print("f2 function")
    f1(l1)
    print("f2 for:")
    for i in l1:
        print(i)


f2([1, 2, 3, 4])

例3:返回元组。

def func(a, b):
    return b, a


s = func('chang', 2)
print(s, type(s))

结果:

 

8、函数对变量的作用:

一个程序中的变量包含两类:全局变量和局部变量。全部变量指在函数外定义的变量,一般没有缩进,在程序执行全过程有效。局部变量是指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。

例4:

n = 1  # n是全局变量


def func(a, b):
    global n    # 如果n是全局变量,那么需要在n使用前显示声明变量为全局变量

    n = b       # 将局部变量赋值给全局变量n
    return a * b     


s = func('chang', 2)
print(s, n)

该例中,请注意下global的使用。

例5:

ls = []       # ls是全局列表变量


def func(a, b):
    ls.append(b)     # 将局部变量b增加到全局列表变量ls中
    return a * b


s = func('chang', 2)
print(s, ls)   # 测试ls的值是否发生变化ng', 2)
print(s, ls)

结果:

这个地方就是Python才刚刚开始展示它的魅力。

列表等组合数据类型由于操作多个数据,所以它们在使用中有创建和引用的分别。当列表变量被方括号赋值时,这个列表才被真实创建,否则只是对之前创建列表的的一次引用。

上面的代码func()函数的ls.append(b) 语句执行时需要一个真实创建过的列表,此时,func()函数专属的内存空间中没有已创建过的且名称为ls的列表,因此,func()函数进一步去寻找全局内存空间,自动关联全局ls列表,并修改其内容。当func()函数退出后,全局ls列表中的内容被修改。简单地说,对于列表类型,函数可以直接使用全局列表而需要使用global进行声明。

总结:

1)函数内局部变量x,对全局变量x没有影响;

2)函数内部global x,就可以修改全局变量x;

3)组合数据类型,函数内部没有的话,就直接修改全局变量的组合数据类型;

4)组合数据类型,函数内部有的话,那么函数仅对局部变量进行操作,对全局的组合数据类型没有影响。

最后再看下指针和引用的区别:

1)指针是保存内存地址的变量;指针直接指向内存地址,说明对象已经生成。

2)引用是某一种变量的别名,用这个名字可以对这个变量进行操作。引用只是别名,需要真实创建对象才能操作对象。

 

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

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

相关文章

Mybatis源码解析(六):查询数据库主流程

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

.NET 6 支持Cookie与JWT混合认证、授权的方法

从.NET 5开始&#xff0c;.Net Core 与.NET Fremework 合并成了 .NET 5&#xff0c;所以标题也很让人尴尬&#xff0c;不知道该写成是.NET Core还是.NET X。因为这个方法支持.NET 5、6、7。 目录前言Cookie 认证JWT认证总结前言 不知道大家有没有过这样的需求&#xff0c;为了…

基于matlab的异步(感应)电机直接转矩控制系统

目 录 摘要 I 第1章 绪论 1 1.1 课题研究背景 1 1.2直接转矩控制技术的发展现状 1 1.2.1直接转矩控制的现状及发展趋势 1 1.2.2目前的热点研究问题及解决方法 2 1.3本文研究的主要内容 3 第2章 直接转矩控制系统理论 4 2.1概述 4 2.2 异步电动机的数学模型 4 2.3 逆变器的数学模…

【机器学习项目实战10例】(三):基于K近邻的葡萄酒质量检测项目

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、基于K近邻的葡萄酒质量检测项目二、数据集介绍三、导包四、读取数据五、绘制空间分布六、划分训练集、测试集七、构建K近邻模型八、绘制聚类效果九、网格搜索一、基于K近邻的葡萄酒质量检测项目 葡萄酒数据集是一个经典…

[附源码]SSM计算机毕业设计实验教学过程管理平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Ajax复习(62nd)

1、 Ajax 基础 1.1 传统网站中存在的问题 1、网速慢的情况下&#xff0c;页面加载时间长&#xff0c;用户只能等待 2、表单提交后&#xff0c;如果一项内容不合格&#xff0c;需要重新填写所有表单内容 3、页面跳转&#xff0c;重新加载页面&#xff0c;造成资源浪费&#xf…

基于matlab的BOC调制信号捕获仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 随着全球导航卫星系统的高速发展,导航系统的数量也越来越多,比如使用最广泛的GPS导航系统,以及越来越备受关注的中国北斗导航系统等.因此导航频段变得越来越拥挤,且各个频段内的信号相互…

activiti-api-impl

activiti-api-impl目录概述需求&#xff1a;设计思路实现思路分析1.CommonModelAutoConfiguration2.RuntimeEventImpl3.ProcessModelAutoConfiguration4.DefaultServiceTaskBehavior5.APIVariableInstanceConverterTaskModelAutoConfiguration参考资料和推荐阅读Survive by day…

Flutter高仿微信-第53篇-群聊-删除并退出

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //删除并退出对话框 void _deleteAndExistDialog(){Load…

图解LeetCode——1752. 检查数组是否经排序和轮转得到(难度:简单)

一、题目 给你一个数组 nums 。nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xff0c;则返回 true &#xff1b;否则&#xff0c;返回 false 。 源数…

一文了解Linux上TCP的几个内核参数调优

Linux作为一个强大的操作系统&#xff0c;提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中&#xff0c;笔者积累了一些在内网环境应该进行调优的参数。在此分享出来&#xff0c;希望对大家有所帮助。 调优清单 好了&#xff0…

Java#27(Arrays)

目录 一.Arrays 操作数组的工具类 二.Lambda表达式 1.注意: 2.省略规则 一.Arrays 操作数组的工具类 方法名 作用 public static String toString(数组) 把数组拼接…

大数据毕设选题 - 深度学习动物识别与检测系统( python opencv)

文章目录0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层4 数据集准备4.1 数据标注简介4.2 数据保存5 …

kafka集群搭建与prometheus监控配置

文章目录1、基于zookeeper的集群2、kafka集群安装2.1 基于Zookeeper集群的配置2.2 基于KRaft模式集群的配置2.3、启动Kafka集群3、kafka_exporter监控组件安装3.1、安装3.2、系统服务3.3、集成到prometheus4、与Grafana集成1、基于zookeeper的集群 下载地址&#xff1a;https:…

ABAP学习笔记之——第三章:OPEN SQL和NATIVE SQL

一、SAP R/3体系结构 SAP R/3一个分为三层&#xff1a;数据库层、应用层、表示层。其中应用层和数据库层由一个系统构成。 表示层&#xff1a;表示层(Presentation Layer)简单来讲其实就是指个人PC&#xff0c;是保存构成SAPGUI(GraphicalUserInterface)的软件组件(Software Co…

数字验证学习笔记——SystemVerilog芯片验证10 ——类的成员

一、类和成员 类是成员变量和成员方法的载体&#xff0c;之所以称为自洽体&#xff0c;是因为其变量和方法应符合‘聚拢’原则&#xff0c;即一个类的功能应该尽可能简单&#xff0c;不应承担过多的职责&#xff0c;更不应该承担不符合它的职责&#xff0c;这在设计模式被称为…

变分自编码器(VAES)

Dimensionality reduction ,PCA and autoencoders Dimensionality reduction 我们清楚&#xff0c;数据降维其实都是减少数据的特征数量&#xff0c;如果把encoderencoderencoder看作是由高维原有特征生成低维新特征的过程。把decoderdecoderdecoder看作是将低维特征还原为高…

vulnhub靶机ha:wordy

靶机下载链接&#xff1a;HA: Wordy ~ VulnHub 靶机ip&#xff1a;192.168.174.136&#xff08;后面重启后变成192.168.174.137&#xff09; kali ip&#xff1a;192.168.174.128 目录 靶机ip发现: 靶机端口扫描: 子目录扫描&#xff1a; wpscan扫描 漏洞利用1 漏洞利…

ASEMI肖特基二极管MBR40200PT参数,MBR40200PT规格

编辑-Z ASEMI肖特基二极管MBR40200PT参数&#xff1a; 型号&#xff1a;MBR40200PT 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;200V 最大平均正向整流输出电流&#xff08;IF&#xff09;&#xff1a;40A 峰值正向浪涌电流&#xff08;IFSM&#xff0…

5、Mybatis的查询功能(必定有返回值)

Mybatis的查询功能&#xff08;必定有返回值&#xff09; 注意&#xff1a; 查询功能与前面的增删改不同&#xff0c;增删改的返回值是固定的&#xff08;所以增删改我们就有两种返回值要么设置为int获取受影响的行数&#xff0c;要么设置为void我们不获取返回值&#xff09;…