0

0

Python函数如何写第一个简单的自定义函数 Python函数入门级自定义函数的编写技巧​

星夢妙者

星夢妙者

发布时间:2025-08-13 08:48:02

|

993人浏览过

|

来源于php中文网

原创

要写python的第一个简单自定义函数,必须使用def关键字定义函数名和括号后的冒号,并确保函数体有正确缩进,例如def greet(): print("你好,python世界!"),调用时直接使用greet()即可执行函数体内的代码,该函数无参数也无返回值,仅完成打印操作,这样实现了代码的封装与复用,避免了重复编写相同代码,提高了程序的可维护性和可读性。

Python函数如何写第一个简单的自定义函数 Python函数入门级自定义函数的编写技巧​

写Python的第一个简单自定义函数,核心就是使用

def
关键字来定义一个代码块,并给它一个名字,这样你就能反复调用它,避免重复劳动。这就像给一段常用操作起了个外号,以后直接喊外号就行。

解决方案

要写一个最基础的Python自定义函数,你只需要掌握

def
这个关键字,然后给你的函数起个名字,后面跟着一对圆括号
()
,再加一个冒号
:
。函数体内部的代码需要有缩进。

举个例子,我们来写一个打招呼的函数:

立即学习Python免费学习笔记(深入)”;

def greet():
    print("你好,Python世界!")

# 调用这个函数
greet()

这个

greet
函数没有接收任何外部信息(所以括号里是空的),它只是简单地打印一句话。当你调用
greet()
时,它就会执行函数体内的
print
语句。

如果你想让函数更灵活,比如向不同的人打招呼,你就需要用到参数。参数就像是函数在执行时需要的一些“输入”信息。

def greet_person(name):
    print(f"你好,{name}!很高兴见到你。")

# 调用时传入参数
greet_person("小明")
greet_person("李华")

这里,

name
就是
greet_person
函数的一个参数。调用函数时,你把具体的值(比如“小明”)传给
name
,函数内部就能用这个值了。

再进一步,函数不仅可以执行操作,还可以返回一个结果。这就像你问了一个问题,函数思考后给你一个答案。我们用

return
关键字来返回结果。

def add_numbers(a, b):
    sum_result = a + b
    return sum_result # 返回计算结果

# 调用函数并接收返回值
result = add_numbers(5, 3)
print(f"5 加 3 等于:{result}")

# 也可以直接打印返回值
print(add_numbers(10, 20))

add_numbers
函数接收两个参数
a
b
,计算它们的和,然后用
return
把这个和“吐”出来。当你调用它并把返回值赋给一个变量时,你就可以继续使用这个结果了。

为什么我们需要自定义函数?

说实话,刚开始学的时候,我个人觉得写函数有点儿麻烦,直接把代码写在那里不是更直接吗?但很快我就发现,自定义函数简直是编写可维护、可读性高代码的基石。

首先是复用性。想象一下,如果你有十个地方需要执行同样或类似的操作,比如格式化一个日期字符串。你总不能在十个地方都复制粘贴那段代码吧?那太蠢了。写成函数,一次定义,处处调用,省心省力。而且,如果哪天这个操作的逻辑变了,你只需要改函数内部的代码,所有调用它的地方都会自动更新,这效率简直了。

其次是模块化可读性。把一大段代码拆分成一个个小函数,每个函数只负责完成一个具体、独立的小任务。这就像搭乐高积木,每个积木块都有自己的形状和用途。这样一来,你的主程序看起来就非常清晰,一眼就能看出程序的整体逻辑流程,而不需要深入到每个细节里。当代码量大了,这种结构化简直是救命稻草。别人读你的代码,或者你自己过段时间再看,也能很快理解。

最后,它还能帮助我们避免重复造轮子。很多时候,你遇到的问题,可能别人也遇到过,并且已经写好了现成的函数(比如Python标准库里的那些)。但如果你需要的功能非常特定,或者现有函数不能完全满足需求,那么自定义函数就是最好的选择。它让你能根据自己的实际情况,量身定制解决方案。

AssemblyAI
AssemblyAI

转录和理解语音的AI模型

下载

自定义函数中的参数与返回值有什么讲究?

参数和返回值,这是函数灵活性的核心所在,也是我个人觉得最有意思的部分。

参数,你可以把它想象成函数执行任务时需要的一些“原材料”或者“指令”。函数可以没有参数(像我们最开始的

greet()
),也可以有一个、两个,甚至很多个。

  • 位置参数 (Positional Arguments):这是最常见的,你按顺序把值传进去,函数会按定义的顺序接收。比如
    add_numbers(5, 3)
    5
    就给了
    a
    3
    给了
    b
    。顺序错了,结果就错了。
  • 关键字参数 (Keyword Arguments):你可以通过参数名来传递值,这样就不必担心顺序了。比如
    add_numbers(b=3, a=5)
    ,这样即使顺序颠倒了,函数也能正确识别。这在函数参数很多,或者你想跳过某些参数直接指定后面参数时特别有用。
  • 默认参数 (Default Arguments):这个功能很赞。你可以在定义函数时给参数一个默认值。如果调用函数时没有为这个参数传值,它就会使用默认值;如果传了,就用你传的值。比如
    def greet(name="陌生人"):
    。这样,
    greet()
    会打印“你好,陌生人!”,而
    greet("张三")
    则会打印“你好,张三!”。这极大地增加了函数的灵活性,减少了你需要写多个重载函数的情况。

返回值,则代表着函数执行任务后的“成果”或者“答案”。一个函数可以没有返回值(默认返回

None
),也可以返回一个值,甚至返回多个值(以元组的形式)。

  • return
    关键字
    :这是用来指定函数返回什么的。一旦
    return
    语句被执行,函数就会立即结束,并把
    return
    后面的值传给调用者。函数体里
    return
    后面的代码就不会再执行了。
  • 返回多个值:Python的一个很方便的特性是你可以直接
    return val1, val2, val3
    ,它会把这些值打包成一个元组返回。调用者可以这样接收:
    v1, v2, v3 = my_function()
  • print
    return
    的区别
    :初学者经常混淆这两者。
    print
    只是把内容显示在控制台上,但函数本身并没有“吐出”这个值。而
    return
    是把值真正地传回给调用者,让调用者可以继续使用这个值进行后续操作。如果你想让函数计算一个结果并让其他部分的代码使用这个结果,那必须用
    return

编写第一个函数时常犯的错误有哪些?

写第一个函数时,遇到一些小坑是很正常的,我自己当年也踩过不少。这些错误通常都比较基础,但足以让你抓狂。

  • 缩进错误 (IndentationError):这是Python的标志性错误之一。Python不使用大括号来定义代码块,而是依赖缩进。函数体内的所有代码行都必须有相同的缩进级别。少一个空格,多一个空格,或者混用空格和Tab,都可能导致

    IndentationError
    。比如:

    def my_bad_function():
    print("我缩进错了") # 这里可能缩进不一致

    Python会告诉你

    expected an indented block
    或者
    unindent does not match any outer indentation level
    。记住,一致的缩进是函数能正常运行的前提。

  • 忘记调用函数:你定义了一个很棒的函数,但如果你不调用它,它就永远不会执行。比如你写了

    def hello(): print("Hello")
    ,但没有写
    hello()
    ,那么什么都不会发生。这就像你给一个机器人编程了,但没按启动按钮。

  • 参数不匹配:当你调用函数时,传入的参数数量或类型与函数定义的不一致。

    def add(a, b):
        return a + b
    # add(5) # 缺少一个参数,会报TypeError
    # add("hello", 123) # 类型不匹配,会报TypeError

    Python会报

    TypeError: add() missing 1 required positional argument: 'b'
    或者
    TypeError: can only concatenate str (not "int") to str

  • 误解

    return
    print
    :前面也提到了,但这个错误太常见了,值得再强调。如果你希望函数计算一个结果并供后续代码使用,你必须用
    return
    。如果只是想在控制台看到输出,用
    print

    def calculate_and_print(x, y):
        result = x * y
        print(f"结果是: {result}") # 只是打印,函数实际返回None
    
    def calculate_and_return(x, y):
        result = x * y
        return result # 返回结果
    
    val1 = calculate_and_print(2, 3)
    print(f"val1 的值是: {val1}") # 会输出 "结果是: 6" 和 "val1 的值是: None"
    
    val2 = calculate_and_return(2, 3)
    print(f"val2 的值是: {val2}") # 会输出 "val2 的值是: 6"

    calculate_and_print
    虽然打印了6,但它本身并没有“给”你6,所以
    val1
    None
    。而
    calculate_and_return
    则实实在在地把6传给了
    val2

  • 变量作用域问题 (Scope):初学者有时会混淆函数内部和外部的变量。函数内部定义的变量(局部变量)只在函数内部有效,函数外部是访问不到的。

    def my_scoped_function():
        local_var = "我只在函数里"
        print(local_var)
    
    my_scoped_function()
    # print(local_var) # 这里会报NameError,因为local_var是局部变量

    这个概念在后面学习更复杂的程序时会变得非常重要,但现在你只需要知道,函数内部的东西,通常就留在函数内部。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1205

2024.04.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号