Python入门--函数

news2024/11/27 3:46:52

目录

1. 函数介绍

2. 函数的定义

3. 函数的参数

4. 函数的返回值

5. 函数说明文档

6. 函数的嵌套调用

7. 函数的作用域

(1). 局部变量

(2). 全局变量

(3). global关键字


1. 函数介绍

         函数:是组织好的可重复使用的,用来实现特定功能的代码段

name = "CCZU"
print(len(name))

        为什么随时都可以使len()统计长度呢?因为,len()Python内置的函数,这是提前写好的,可以被重复利用,专门用来统计字符串长度这一功能。我们使用过的:input()print()str()int()等都是Python的内置函数

        如果库里没有设置这一内置函数,我们在每次想用这个功能的时候,就要实现下面这好几行代码。

str = "string"
length = 0
for i in str:
    length+=1
print(length)

        像这种需要经常复用的功能,为了降低代码的重复,Python已经贴心的为大家写好了,想用的时候直接找到对应功能的函数使用即可,这就是将这个功能封装成了函数。

def my_len(str):
    length = 0
    for i in str:
        length += 1
    print(length)

# 每次使用的时候直接调用即可
my_len("hello")
my_len("what")
my_len("please")

        那我们下面来学习一下怎么将这些频繁使用的代码封装成函数。

2. 函数的定义

注意:

① 参数如不需要,可以省略

② 返回值如不需要,可以省略

③ 函数必须先定义后使用

         函数定义之后,想使用定义的函数就要调用,根绝我们的定义来决定怎么调用。有返回值就要用变量来接收,有参数一定要传参数。

def say_hi():
    print("hi")
# 调用函数
say_hi()

3. 函数的参数

        传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据。

        比如我们要实现一个将两个数相加的功能函数,那我们肯定要让这个函数知道需要哪两个数相加,参数大家可以理解为参考的数据。也就是说这个相加的函数想知道自己要让哪些数加起来,就参考我们传的这些参数。

def add(x,y):
    print(x+y)
  • 函数定义中,提供的xy,称之为:形式参数(形参),表示函数声明将要使用2参数
  • 参数之间使用逗号进行分隔
  • 函数调用中,提供的56,称之为:实际参数(实参),表示函数执行时真正使用的参数
  • 传入的时候,按照顺序传入数据,使用逗号分隔

        最后一点大家要尤其注意,因为如果这个功能是实现两个数相除的,那么1/2和2/1可是完全不一样的两个结果。 

4. 函数的返回值

        如果我们想在调用函数的时候用一个变量接收函数调用后的结果,这个时候需要给函数加上返回值。

def add(x,y):
    return x+y

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

        函数体在遇到return后就结束了,所以写在return后的代码不会执行。

        如果函数没有使用return语句返回数据,那么函数实际上也是有返回值的。Python中有一个特殊的字面量:None,其类型是:<class NoneType>返回值的函数,实际上就是返回None这个字面

        None表示:空的、无实际意义的意思函数返回的None,就表示这个函数没有返回什么有意义的内容也就是返回了空的意思。

def say_he11o():
    print("He11o...")
    
# 使用变量接收say_he11o函数的返回值
result = say_he11o()
# 打印返回值
print(result) # 结果None

# 打印返回值类型
print(type(result)) # 结果<cass'NoneType'>

        None也可以主动使用return返回,效果等同于不写return语句。

        None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

  • 用在函数无返回值
  • 用在if判断上:if判断中,None等同于False一般用于在函数中主动返回None,配合if判断做相关处理
def check_age(age):
    if age > 18:
        return "success"
    return None

result = check_age(5)
if not result:
    # 进入if表明result是None值,也就是False
    print("未成年,不可进入")
  • 用于声明无内容的变量上定义变量,但暂时不需要变量有具体值,可以用None来代替
name = None

5. 函数说明文档

        函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。我们可以给函数通过多行注释的形式添加说明文档,辅助理解函数的作用。我们在函数体之前写上函数参数表示什么,返回值什么,函数功能是什么。

def add(x, y):
    """
    add函数可以接收2个参数,进行2数相加的功能

    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的另一个数字
    :return: 返回值是2数相加的结果

    """
    result = x + y
    print(f"2数相加的结果是: {result}")
    return result

6. 函数的嵌套调用

        所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数

# 定义函数func_b
def func_b():
    print("---2---")

# 定义函数func_a,并在内部调用func_b
def func_a():
    print("---1---")
    # 嵌套调用func_b
    func_b()
    print("---3---")

# 调用函数func_a
func_a()

        如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次函数A执行的位置 

7. 函数的作用域

        变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用主要分为两类:局部变量和全局变量

(1). 局部变量

        局部变量是定义在函数体内部的变量,即只在函数体内部生效

def testA():
    num = 100
    print(num)
    
testA() # 100

print(num) # 报错:name 'num'is not defined

        变量a是定义在`testA`函数内部的变量,在函数外部访问则立即报错。  

        局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。

(2). 全局变量

        所谓全局变量,指的是在函数体内、外都能生效的变量

        如果有一个数据,在函数A和函数B中都要使用就要这个数据存储在一个全局变量里面,也就是定义在函数的外面

# 定义全局变量a
num = 100

# 定义函数testA,并访问全局变量num
def testA():
    print(num)

# 定义函数testB,并访问全局变量num
def testB():
    print(num)

testA() # 100
testB() # 100
print(num) # 100

(3). global关键字

        如果我们想要在函数内部对全局变量的值进行修改,修改的值仅在函数体内部有效。

# 定义全局变量a
num = 100

# 定义函数testA,并访问变量num
def testA():
    print(num)

# 定义函数testB,并访问变量num
def testB():
    num = 300
    print(num)

testA() # 100
testB() # 300
print(num) # 100

        这是因为testB里num=300实际上是testB自己又重新定义了一个num的局部对象,跟全局变量num已经不是同一个东西了。为了让这个局部变量num变回全局变量,我们引入了global关键字。

# 定义全局变量a
num = 100

# 定义函数testA,并访问全局变量num
def testA():
    print(num)

# 定义函数testB,并访问全局变量num
def testB():
    # global关键字用于将变量声明为全局变量
    global num
    num = 300
    print(num)

testA() # 100
testB() # 300
print(num) # 300

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

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

相关文章

【无题】夜入伊人笑愉,泪湿心夜难眠。

在这句诗中&#xff0c;意境描绘了一种深沉的情感体验&#xff0c;充满了温柔与哀愁。诗人通过“夜入伊人笑愉”开启了一段梦境之旅&#xff0c;其中“夜入”象征着进入梦境的状态。在这个梦幻的世界里&#xff0c;诗人与心爱的人欢笑嬉戏&#xff0c;那份快乐和亲昵如同真实的…

java高并发场景RabbitMQ的使用

场景是面试时被问到&#xff0c;一次性请求100多万个前端请求&#xff0c;请问你如果进行后端处理。因为之前的电商也没有一次性这么大的业务量&#xff0c;所以只是前端nginx做了对应的负载均衡技术。所以回答的不是那么流畅。面试官的回答你可以用RabbitMQ做分流,削峰,异步处…

什么是 ARP 欺骗和缓存中毒攻击?

如果您熟悉蒙面歌王&#xff0c;您就会明白蒙面歌王的概念&#xff1a;有人伪装成别人。然后&#xff0c;当面具掉下来时&#xff0c;您会大吃一惊&#xff0c;知道了这位名人是谁。类似的事情也发生在 ARP 欺骗攻击中&#xff0c;只是令人惊讶的是&#xff0c;威胁行为者利用他…

中小型网络系统综合实验

一、实验要求 1.pc端自动获取ip地址&#xff0c;可以互通访问&#xff0c;可以访问域名解析服务器 2.设置vlan&#xff0c;三层交换机实现不同vlan之间的交流 3.设置静态路由&#xff0c;配置nat地址转换&#xff0c;实现全网可达 二、实验思路 1.首先给LSW2配置vlan 10 &a…

双十一不能错过的好物推荐!强推五款超好用的品牌好物

双十一快到了&#xff0c;这个时候的优惠力度都是最大的&#xff0c;还不知道买啥的小伙伴们赶紧来看这篇好物推荐&#xff01;以下五款产品是我花了几天时间精心挑选出来的&#xff0c;看完之后保证你想加入购物车&#xff01; 品牌好物推荐一、希亦CG超声波清洗机 如果你带眼…

用Manim实现高尔顿板(Galton Board)

高尔顿板的介绍 高尔顿板&#xff08;Galton Board&#xff09;&#xff0c;有时也称为贝尔图&#xff08;Bean Machine&#xff09;&#xff0c;是由英国统计学家弗朗西斯高尔顿&#xff08;Francis Galton&#xff09;于19世纪末发明的一种物理装置&#xff0c;用于演示随机分…

【智能算法应用】蒲公英优化算法求解二维路径规划问题

摘要 在二维路径规划问题中&#xff0c;通常需要在不规则的障碍物环境中找到一条从起点到终点的最优路径。本文应用蒲公英优化算法&#xff08;DOA&#xff09;进行路径规划&#xff0c;其能够有效避开障碍物并找到最短路径。通过实验验证&#xff0c;DOA具有收敛速度快、全局…

2024年【金属非金属矿山(露天矿山)安全管理人员】模拟试题及金属非金属矿山(露天矿山)安全管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员模拟试题参考答案及金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山&#…

SAP学习笔记 - Basis01 - 创建Client ,拷贝Client

最近工作当中用到了Client间数据移送的内容&#xff0c;想把自己的虚机给弄两个Client。 最后也没完全弄成&#xff0c;先把过程整理一下&#xff0c;以后有空接着弄。 目录 1&#xff0c;SALE - 新建逻辑系统 2&#xff0c;SCC4 - 分配Client到集团 3&#xff0c;RZ10 - 取…

算法【Java】—— 二叉树的深搜

深搜 深搜简单来说就是一直递归到底&#xff0c;然后返回&#xff0c;以二叉树为例&#xff0c;就是从根节点出发一直搜索到叶子节点&#xff0c;然后想上返回。 这里简单说明一下&#xff1a;深搜的英文缩写是 dfs&#xff0c;下面定义深搜函数名我直接命名为 dfs 实战演练 …

AVL树的创建与检测

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、什么是AVL树&#xff1f; 二、平衡因子 1、什么是平衡因子&#xff1f; 2、平衡因子如何更新&#xff1f; 三、单旋 1、左单旋 ​编辑 2、右单旋 四、双旋…

OSPF的不规则区域

1.远离骨干非骨干区域 2.不连续骨干 解决方案 tunnel ---点到点GRE 在合法与非ABR间建立隧道&#xff0c;然后将其宣告于OSPF协议中&#xff1b; 缺点&#xff1a;1、周期和触发信息对中间穿越区域造成资源占用&#xff08;当同一条路由来自不同区域&#xff0c;路由器会先…

JS基础练习|动态创建多个input并且用数组记录其中的数据

效果图 、 在点击添加输入框的时候&#xff0c;创建新的元素&#xff0c;并且为其绑定响应的事件。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…

稀缺森林火险等级预测算法,基于xgboost方法的火险等级预测,共划分5级,依据当前地区月份,降水量,风力等参数进行预测,并提供15000字的报告

森林火险等级预测算法&#xff0c;基于xgboost方法的火险等级预测&#xff0c;共划分5级&#xff0c;依据当前地区月份&#xff0c;降水量&#xff0c;风力等参数进行预测&#xff0c;并提供15000字的报告 森林火险等级预测算法介绍 项目名称 基于XGBoost的森林火险等级预测算…

双向无头非循环链表的简单实现及介绍

前言 欢迎大家阅读小奥奇的新作&#xff0c;听说上一篇我们留下了一点点 “ 简单的题目 ” &#xff0c;我们在本篇要干什么呢&#xff0c;请看本篇任务&#xff01; 本篇任务概述&#xff1a; 1、解决 “ 简单的遗留题目 ” 2、 LInkedList&#xff08;双向&#xff09;的使用…

2.1MyBatis——ORM对象关系映射

2.1MyBatis——ORM对象关系映射 1. 验证映射配置2.ResultType和ResultMap2.1ResultMap是最终的ORM依据2.2ResultType和ResultMap的使用区别 3.具体的转换逻辑3.1 TypeHandle类型转换 5.总结 概括的说&#xff0c;MyBatis中&#xff0c;对于映射关系的声明是由开发者在xml文件手…

“2024年最流行的10个前端框架”

大多数时候&#xff0c;前端开发人员需要使用一组组合语言来构建他们的前端 Web 应用程序。 HTML 负责网页中的基本布局&#xff0c;CSS 管理视觉格式和结构&#xff0c;JavaScript 用于维护交互性和功能。在这篇文章中&#xff0c;我们将了解最好的前端框架&#xff0c;这些框…

FL Studio 24.1.2.4381中文版免费下载及FL Studio 24最新使用学习教程

家好呀&#xff0c;作为一个资深的音乐爱好者和制作人&#xff0c;今天我要安利一个我最近超级痴迷的数字音频工作站软件——FL Studio24.1.2.4381中文版。这款产品可是让我的音乐创作之路如虎添翼&#xff0c;快来跟我一起看看它的炫酷功能吧&#xff01; 最近接到很多小伙伴的…

2024 ciscn WP

一、MISC 1.火锅链观光打卡 打开后连接自己的钱包&#xff0c;然后点击开始游戏&#xff0c;答题八次后点击获取NFT&#xff0c;得到有flag的图片 没什么多说的&#xff0c;知识问答题 兑换 NFT Flag{y0u_ar3_hotpot_K1ng} 2.Power Trajectory Diagram 方法1&#xff1a; 使用p…

操作系统实验之银行算法

一、实验目的 采用高级语言编写一个动态分配系统资源的程序&#xff0c;模拟死锁现象&#xff0c;观察死锁发生的条件&#xff0c;并采用适当的算法&#xff0c;有效地防止死锁的发生。 二、实验内容 本次实验采用银行算法防止死锁的发生。设有3个并发进程共享10个系统资源。在…