从零开始:Python语言基础之函数定义与调用

python基础知识之函数的定义及用法 本文主要介绍python函数的定义和调用、函数的参数、函数的作用域、内置函数。对特定的一些功能进行封装,提高代码的重用率,进而提升开发的效率,格式:nginxdef 函数名()# 函数体必需参数  如:def add_num(a, b, c) ,a,b,c三个参数都必须要传默认参数(缺省参数) 如:def add_num(a, b, c=99) ,c是默认参数,可以传,可以不传(不传时直接使用c=99) 阅读详情

一、函数基础:定义与调用的核心逻辑

 

1. 函数的定义

 

在Python中,使用 def 关键字定义函数,其基本语法结构如下:

def 函数名(参数列表):
    """
    函数文档字符串(可选,用于描述函数功能)
    """
    函数体语句
    return 返回值(可选)

①函数名:遵循Python标识符命名规则,需直观反映函数功能(例如 calculate_area 表示计算面积)。

②参数列表:可以为空,也可以包含一个或多个参数,用于接收外部传入的数据。

③函数文档字符串:使用三引号 """ """ 包裹,用于说明函数的功能、参数含义及返回值类型,是良好编程习惯的体现。

④函数体语句:实现具体功能的代码块。

⑤return语句:用于结束函数并返回结果,若省略则默认返回 None 。

 

例如,定义一个计算两数之和的函数:

def add_numbers(a, b):
    """
    该函数接收两个参数,返回它们的和
    :param a: 第一个数字
    :param b: 第二个数字
    :return: 两数之和
    """
    return a + b

2. 函数的调用

 

定义函数后,通过函数名加括号的方式调用函数,并传入相应参数:

result = add_numbers(3, 5)
print(result)  # 输出8

调用函数时,传入的参数数量和类型需与函数定义时匹配,否则会抛出 TypeError 异常。例如:

# 错误调用,参数数量不匹配
# add_numbers(3)  # 抛出TypeError: add_numbers() missing 1 required positional argument: 'b'

二、函数参数:灵活的数据传递方式

 

1. 位置参数

 

位置参数是最基本的参数传递方式,调用函数时需按照参数定义的顺序传入对应的值。例如:

def print_info(name, age):
    print(f"姓名:{name},年龄:{age}")

print_info("Alice", 25)  # 姓名:Alice,年龄:25

2. 关键字参数

 

使用关键字参数调用函数时,可以不遵循参数定义的顺序,通过“参数名=值”的形式明确指定每个参数的值。例如:

print_info(age=30, name="Bob")  # 姓名:Bob,年龄:30

3. 默认参数

 

定义函数时可为参数设置默认值,调用函数时若不传入该参数,则使用默认值。例如:

def greet(name, message="你好"):
    print(f"{name},{message}!")

greet("Charlie")  # Charlie,你好!
greet("David", "早上好")  # David,早上好!

4. 可变参数

 

当函数需要处理不确定数量的参数时,可使用可变参数,分为以下两种类型:

 

①可变位置参数(*args):将多个位置参数收集为一个元组。

def sum_numbers(*args):
    result = 0
    for num in args:
        result += num
    return result

print(sum_numbers(1, 2, 3, 4))  # 输出10

②**可变关键字参数(kwargs):将多个关键字参数收集为一个字典。

def print_student_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_student_info(name="Eve", age=22, major="Computer Science")

5. 参数组合使用

 

在函数定义中,多种参数类型可以组合使用,但需遵循固定的顺序:位置参数、默认参数、可变位置参数(*args)、可变关键字参数(**kwargs)。例如:

def func(a, b=10, *args, **kwargs):
    print(f"a: {a}, b: {b}, args: {args}, kwargs: {kwargs}")

func(1, 2, 3, 4, c=5, d=6)
# 输出:a: 1, b: 2, args: (3, 4), kwargs: {'c': 5, 'd': 6}

三、函数返回值:结果的输出与处理

 

函数通过 return 语句返回结果,返回值可以是任意数据类型,如数值、字符串、列表、字典甚至其他函数。例如:

# 返回列表
def get_fruits():
    return ["apple", "banana", "cherry"]

# 返回字典
def get_student_info():
    return {"name": "Frank", "age": 23, "major": "Math"}

# 返回函数(高阶函数)
def outer_function():
    def inner_function():
        print("这是内部函数")
    return inner_function

result_list = get_fruits()
result_dict = get_student_info()
inner_func = outer_function()
inner_func()  # 调用内部函数

如果函数中没有 return 语句,或者 return 后不跟任何值,则函数默认返回 None 。例如:

 
def print_message():
    print("Hello, World!")

msg = print_message()
print(msg)  # 输出None
 

 四、函数使用中的常见问题与解决方案

 

1. 参数传递的“陷阱”

 

在Python中,函数参数传递遵循“赋值传递”原则:

 

①对于不可变数据类型(如数字、字符串、元组),函数内对参数的修改不会影响外部变量。

def change_number(num):
    num = 10  # 修改局部变量num

x = 5
change_number(x)
print(x)  # 输出5,x的值未改变

②对于可变数据类型(如列表、字典),函数内对参数的修改会影响外部变量。

def change_list(lst):
    lst.append(4)  # 修改列表

my_list = [1, 2, 3]
change_list(my_list)
print(my_list)  # 输出[1, 2, 3, 4]

若不想修改原始数据,可通过切片(如 lst.copy() )或函数参数传递副本。

 

2. 作用域问题

 

Python使用LEGB规则(Local, Enclosing, Global, Built-in)查找变量:

 

①局部作用域(Local):函数内部定义的变量。

②嵌套作用域(Enclosing):嵌套函数中,内层函数可访问外层函数的变量。

③全局作用域(Global):模块顶层定义的变量,使用 global 关键字在函数内修改全局变量。

 
count = 10
def modify_count():
    global count
    count = 20

modify_count()
print(count)  # 输出20
 

④内置作用域(Built-in):Python内置的函数和变量(如 print 、 len )。

 

3. 递归函数栈溢出

 

递归函数是指在函数内部调用自身的函数。虽然递归可以简洁地解决某些问题(如计算阶乘、遍历树形结构),但如果递归深度过深,会导致栈溢出错误。例如,计算阶乘的递归函数:

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

# 当n过大时,会抛出RecursionError: maximum recursion depth exceeded
# factorial(1000)

解决方法包括使用循环替代递归,或通过调整Python的递归深度限制(不推荐,可能导致程序崩溃)。

 

五、总结

 

函数是Python编程的核心概念之一,通过合理定义和调用函数,可以有效提升代码的复用性、可读性和可维护性。从基础的函数定义与调用,到复杂的参数传递和返回值处理,再到常见问题的解决,每个环节都需要开发者深入理解和实践。掌握函数的使用技巧,不仅能让编程更加高效,还能为构建大型项目奠定坚实基础。随着学习的深入,结合面向对象编程、模块导入等知识,函数的应用场景将更加广泛。

Python——— 函数大全 Python函数详解 阅读详情

相关推荐

〖Python零基础入门篇㉛〗- 函数的定义与使用

什么是函数? --- > 函数是具有某种特定功能的代码块,可以重复使用(在前面数据类型相关章节,其实已经出现了很多 Python 内置函数了)。它使得我们的程序更加模块化,不需要编写大量重复的代码。 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给我们。

易编橙 · 终身成长社群,相遇已是上上签! 4万+

Python—定义与调用函数

在之前的章节中,针对各类对象调用了非常多的函数,这些都是Python的内建函数。这些函数的功能都是预先设计好的,但在实际生产过程中,使用最多的还是自定义函数。

8X_I的博客 1万+

自动化学报Ctex+texstudio配置方法

自动化学报Latex的模板win10使用方法(CTEX+texstudio)

zxy15924462502的博客 7368

Python函数:函数的定义和调用

在Python中,使用def关键字定义函数。函数定义包括函数名、参数列表和函数体。")在这个例子中,定义了一个名为greet的函数,它不接受任何参数,并打印一条问候消息。本文详细介绍了Python函数的定义和调用方法,包括基本函数定义、参数传递、返回值、文档字符串、作用域、嵌套函数和闭包。通过一个综合详细的学生成绩管理系统的例子,我们展示了如何在实际编程中应用这些函数概念。希望本文对您理解和应用Python函数有所帮助。

互联网架构小马的博客 4668

从KVM虚拟化到Openstack云化架构综述

目录 摘要 OpenStack的虚拟化技术 OpenStack架构介绍 Nova Swift KeyStone Neutron Glance Cinder Ceilometer Heat 摘要 这两年的工作中,接触到公有云和私有云的项目还不少。起初对于Openstack的了解,仅停留在其几大组件的交互上,如Nova、Neutron、Glance等,以及对各大云厂商功能点上...

liyunpeng229的博客 2051

常规波束形成——时域波束形成、频域波束形成

本文介绍了波束成形,包括时域波束成形和频域波束成形,并解释了在实现过程可能存在疑惑的相位补偿。

Candy_Editor的博客 3652

python定义函数

本文详细介绍了python中函数的定义以及无参函数、有参函数、传参方式、缺省参数、可变参数*args、关键参数**kwargs、return语句、函数注释、递归函数、回调函数、闭包函数、多态函数的使用方式。

爆笑蛙的博客 8481

西电微原课设——矩阵式键盘数字密码锁设计

内容要求:根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。...

Polaris的博客 1万+

【Python-Day 16】代码复用基石:详解 Python 函数的定义与调用

本文是Python学习系列的第16天,重点介绍了函数的概念及其重要性。函数是组织好的、可重复使用的代码段,能够提高代码的复用性、模块化和可读性。通过将重复的逻辑封装到函数中,开发者可以避免代码冗余,简化维护工作。文章通过示例展示了如何定义和调用函数,并强调了函数在实践DRY(Don't Repeat Yourself)原则中的作用。此外,函数还能将复杂问题分解为更小的任务,使程序结构更清晰、易于管理。本文为初学者提供了函数的基础知识,帮助读者理解其在编程中的核心作用。

吴师兄大模型的博客 2333

人形机器人电源系统硬件开发:从原理图设计到PCB布局的完整流程

人形机器人是“移动的智能终端”,其电源系统如同“心脏+血管”:既要为大脑(主控)、肌肉(电机)、感官(传感器)提供稳定能量,又要在有限体积内应对高动态负载(如跳跃时电机瞬间大电流)。本文聚焦“硬件开发”维度,覆盖从需求分析到PCB制板的完整流程,适合硬件工程师、机器人爱好者快速掌握工程实战方法。

AI天才研究院 2173

基于数字图像处理方法的迷宫问题图解 : 基于骨架提取、四邻域

问题是,这条红色的线是人为标记出来的能通的路线,对计算机来看,黑色和红色的线没有任何差异,所以之前的想法压根不起作用。对应于数字图像的表达,就是从远离主干的分支端点出发,如果4邻域中只有一个可以通的道路,那么这个点在分支上。闪电划过,有一道连接了天空和大地,就是迷宫的解,其余的分支就是迷宫中对应的死路。类似这个闪电图,假设图中最粗的主干(迷宫解的路线)是最先形成的,其余的细小的分支是慢慢从主干上形成的。因此,只要在端点的4邻域中,找到可以走的道路,那么一定就是分支,也就是要移除的路线。

Henry的博客 2073

Python 函数详解:如何定义和调用函数

你可以把函数理解为一个“黑盒子”,你给它一些输入(参数),它会按照一定的逻辑处理这些输入,并给出输出(返回值)。print("你好," + name + "!")greet("小明")你好,小明!上面这段代码中,我们定义了一个名为greet的函数,然后传入"小明"调用了它。在 Python 中,使用关键字def来定义函数。内容说明定义函数使用调用函数函数名(参数)参数类型位置参数、默认参数、*args、**kwargs返回值使用return返回结果作用域。

Maxianghua95的博客 733

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1363

跟我从零开始学Python:函数的定义

  函数是Python中比较重要的概念,简单的说函数就是一个小的功能模块,通过调用函数可以完成特定功能的调用,比如我们开篇文章中的HelloWorld就是使用print函数输出的。   Python系统定义了一系列预定义的函数,我们在程序开发中可以直接拿来使用,我们熟悉的print函数就是其中之一。如果大家熟悉java语言的话,应该知道java中没有函数的概念,这个也是Python和java的一个重要区别。这个区别也导致了Python在某些功能的调用上比java更加的灵活。   除了系统定义的函数,我们

iqifenxia的博客 1266

Playwright MCP:开启浏览器自动化的新篇章

在当今数字化时代,浏览器自动化技术在众多领域发挥着至关重要的作用,从简单的网页爬取到复杂的自动化测试,再到智能代理与网页的交互等场景,都离不开高效、可靠的浏览器自动化工具。而微软推出的项目,正是在这一领域的一次创新性探索,它为开发者带来了全新的视角和强大的功能支持。本文将深入探讨的概念、架构、代码示例、应用场景、注意事项以及未来发展方向,帮助读者全面了解这一前沿技术。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 5261

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[python]从零开始的API调用教程

讲解了如何通过查阅相关文档的方式调用API!

c858845275的博客 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

Python是一种高级、解释型、通用的编程语言,由Guido van Rossum于20世纪90年代初创立。Python以其简洁易读的语法和强大的功能而闻名,使其成为新手和经验丰富的开发人员的首选语言之一。x = 10 # 定义一个整数变量name = "Alice" # 定义一个字符串变量pi = 3.14 # 定义一个浮点数变量is_active = True # 定义一个布尔变量变量名应该具有描述性,以便代码的可读性和可维护性。

Allen- 7667

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从零开始的python学习——函数(1)

本文介绍了Python中函数的基本概念、语法格式、参数传递和返回值。函数是一段可重复使用的代码片段,通过定义形参和实参实现不同数据的处理。文章通过求和函数示例展示了函数的定义和调用方式,并详细讲解了return语句的多种用法,包括多返回值、函数立即结束等特性。强调了一个函数只做一件事的编程原则,建议将计算和输出分离。最后还介绍了如何使用下划线忽略不需要的返回值。全文以通俗易懂的方式讲解了Python函数的核心知识点。

Linux、C++、图形软件开发等。不一定每次都能写出完美的代码,但会认真搞懂每一个问题。 1464

从零开始的python学习——函数(2)

本文深入探讨了Python函数的核心概念,包括变量作用域(全局/局部变量)、函数执行流程、链式调用(函数返回值作为参数)、嵌套调用(函数内部调用其他函数)以及递归(函数调用自身)。文章还介绍了参数默认值和关键字参数的灵活用法,通过调试技巧和代码示例详细解析了函数执行过程。重点强调递归需要终止条件和递推公式,同时指出递归相比循环的优缺点。最后总结了函数参数设计的灵活性,展示了如何通过默认值和关键字参数提升代码可读性和易用性。

Linux、C++、图形软件开发等。不一定每次都能写出完美的代码,但会认真搞懂每一个问题。 1962

python调用自定义py文件_RIDE如何调用自定义Python文件中的函数

1. 如何从零开始编写Python函数?参考另一篇文章: https://my.oschina.net/u/942203/blog/17869792. IDEA如何调用编写的Python文件?a. 将编写的Python文件放入到RIDE 某个Project的一个用于存放Custom Library的文件夹下b. 在Directory或者Test Suite或者Test Case Level的Edi...

weixin_39522170的博客 527

通义千问3-14B从零开始:Python调用函数接口代码实例

本文介绍了基于星图GPU平台自动化部署通义千问3-14B镜像的完整实践,通过Ollama环境实现Python调用函数接口。该方案支持模型微调与AI应用开发,适用于天气查询等轻量级Agent场景,助力开发者高效构建结构化输出的智能系统。

weixin_36431814的博客 869

从零开始学Python第17课:函数高级应用

装饰器是 Python 语言中的特色语法,可以通过装饰器来增强现有的函数,这是一种非常有用的编程技巧。另一方面,通过函数递归调用,可以在代码层面将一些复杂的问题简单化,但是递归调用一定要注意收敛条件和递归公式,找到递归公式才有机会使用递归调用,而收敛条件则确保了递归调用能停下来。函数调用通过内存中的栈空间来保存现场和恢复现场,栈空间通常都很小,所以递归如果不能迅速收敛,很可能会引发栈溢出错误,从而导致程序的崩溃。

骆昊的技术专栏 1210

Python从零开始入门 - P5 函数与模块

Python 从零开始入门级教程 -- 第五节:函数与模块

WHUGIS1805的博客 1184

函数编程核心:从概念到实战,彻底掌握函数定义、调用与调试

函数是编程中的核心概念,它源于数学中的映射关系,定义了输入到输出的确定性转换。在计算机科学中,函数作为可复用的逻辑单元,实现了代码的抽象与模块化,是构建清晰、可维护程序的基础。其技术价值在于通过封装细节、减少重复代码来提升开发效率和软件质量。在实际应用场景中,函数广泛应用于数据处理、事件回调、算法实现等各个领域。理解函数的工作原理,特别是参数传递(值传递与引用传递)和作用域规则,对于解决常见的编程问题至关重要。例如,当遇到类似“无法将‘npm’识别为函数”的错误时,这通常与环境变量配置或命令查找路径有关,而

weixin_30319153的博客 532

python自定义函数的参数调用_Python学习第37课-自定义函数的参数

【每天几分钟,从零入门python编程的世界!】自定义函数的参数Python自定义函数的参数类型包括必需参数、默认参数、关键字参数、不定长参数,我们一般主要使用的是必需参数和默认参数。●必需参数必需参数是调用时必需要传入的参数,不然Python运行时会报语法错误。必需参数传入时必须按照自定义函数定义时的顺序和数量传递。实例1:#定义函数def sub(num1,num2):num1-num2#调用...

weixin_39562234的博客 539

Python(八十七)函数的定义与调用

函数是一段封装了特定功能的可重复使用的代码块。你可以将函数看作是程序中的"子程序"或"小程序",它们接受输入(参数),执行操作,然后返回输出。

AnChenliang_1002的博客 383
上一篇: 从零开始:Python语言基础之循环结构(for/while)
下一篇: 从零开始:Python语言基础之模块导入
玉笥寻珍
博客等级 码龄2年 282粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉笥寻珍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值