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

星夢妙者
发布: 2025-08-13 08:48:02
原创
876人浏览过

要写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标准库里的那些)。但如果你需要的功能非常特定,或者现有函数不能完全满足需求,那么自定义函数就是最好的选择。它让你能根据自己的实际情况,量身定制解决方案。

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

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

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

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是局部变量
    登录后复制

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

以上就是Python函数如何写第一个简单的自定义函数 Python函数入门级自定义函数的编写技巧​的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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