【Python基础】Python函数

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!

文章目录

    • 一、前言
    • 二、函数的定义与调用
    • 三、函数参数
        • 3.1 位置参数
        • 3.2 默认参数
        • 3.3 可变数量参数(或不定长参数)
        • 3.4 关键字参数
    • 四、函数的返回值return 语句
    • 五、函数作用域
    • 六、函数的高级用法
        • 6.1 Lambda函数
        • 6.2 嵌套函数和闭包
        • 6.3 文档字符串
    • 七、总结

一、前言

Python是一种功能强大的编程语言,其函数特性极大地增强了代码的可重用性和模块化设计。函数不仅可以帮助开发者组织和简化代码,还能通过参数传递和返回值机制实现灵活的交互。

本文将详细介绍Python函数的定义、调用、参数类型以及一些高级用法,帮助读者全面掌握Python函数的运用。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年初设计的一门高级编程语言,该语言应用领域非常广泛,尤其在数据科学、人工智能、游戏开发等领域,它已经成为最受欢迎的程序设计语言之一,非常适合新手学习。

    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/turtle.html#turtle-methods

  • Python语言有哪些特点?

    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

    2.易于阅读:Python代码定义的更清晰。

    3.易于维护:Python的成功在于它的源代码是相当容易维护的。

    4.丰富的库:Python的最大的优势之一具有丰富的标准库,并且跨平台的,在UNIX,Windows和Mac兼容很好。

    5.面向对象:Python支持面向对象编程,在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

    6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

    7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

    8.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

    在这里插入图片描述

二、函数的定义与调用

在Python中,使用def关键字定义函数。函数定义包括函数名、函数参数、函数体以及返回值。

在这里插入图片描述

下面是一个简单的函数定义示例:

def greet(name):
    """打印问候消息"""
    print(f"Hello, {name}!")

这个函数名为greet,它接受一个参数name,并在调用时打印一条问候消息。调用该函数的方式如下:

greet("Alice")  # 输出: Hello, Alice!

三、函数参数

Python中的函数参数非常灵活,可以包括位置参数、默认参数、可变参数和关键字参数。

3.1 位置参数

位置参数,即调用函数时,必须按照各个参数的对应位置,顺序的传递参数。

例如:

def add(a, b):
    return a + b

result = add(3, 4)  # 输出: 7
3.2 默认参数

默认参数,如果在调用函数时没有传递该参数的值,则可以使用默认值。

例如,如下如果不传入参数,则会使用默认参数name。

def greet(name="World"):
    return f"Hello, {name}!"

print(greet())          # 输出: Hello, World!
print(greet("Alice"))   # 输出: Hello, Alice!
3.3 可变数量参数(或不定长参数)

可变数量参数,即用于接受的参数,其数量是变化的、不固定的。这些参数被传递为一个元组或列表。

参数前面加星号,表示可变参数,基本语法如下:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

例如,调用求和函数sum时,分别传入两个参数和三个参数:

def sum(*numbers):
    return sum(numbers)

result = sum(1, 2)  # 传递两个参数,输出: 3

print ("result :",result)

result = sum(1, 2, 3)  # 传递三个参数,输出: 6

print ("result :",result)

加了一个星号 ***** 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。例如:

#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )

输出: 
70
(60, 50) # 以元组类型导入

加了两个星号 ** 的参数会以字典的形式导入。例如:

#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)

输出: 
1
{'a': 2, 'b': 3}  # 以字典类型导入

3.4 关键字参数

关键字参数,即用于接受指定名称的参数。这些参数被传递为字典类型。

关键字参数,格式为:参数名1=参数值1,参数名2=参数值2。例如:

def find_word(text, word):
    return text.find(word)

result = find_word(text='Hello, world!', word='world')  # 输出: 7

PS:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

四、函数的返回值return 语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。

例如:

#!/usr/bin/python3
 
# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print ("函数内 : ", total)
   return total
 
# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)

五、函数作用域

函数作用域,即函数内部定义的变量是局部变量,函数外部定义的变量是全局变量。

例如:

x = 10  # 全局变量

def foo():
    x = 5  # 局部变量
    print(f"局部变量 x: {x}")

foo()  # 输出: 局部变量 x: 5
print(f"全局变量 x: {x}")  # 输出: 全局变量 x: 10

局部变量的作用范围仅限于该函数内部,在函数外部尝试访问局部变量会导致错误,例如:

def my_function():
    local_variable = "I am local"
    print(local_variable)
 
my_function()
# 输出: I am local
 
# 在函数外部尝试访问局部变量会导致错误
# print(local_variable)

在函数外部声明的变量称为全局变量。全局变量的作用范围跨越多个函数,例如:

global_variable = "I am global"
 
def my_function():
    print(global_variable)
 
my_function()
# 输出: I am global

如果要在函数内部修改全局变量,需要使用global关键字进行声明,例如:

global_variable = "I am global"
 
def my_function():
    global global_variable
    global_variable = "I have been modified"
 
my_function()
print(global_variable)
# 输出: I have been modified

在函数内部创建的变量,默认为局部变量。如果要在函数内部创建一个全局变量,需要使用global关键字进行声明。

例如:

def my_function():
    global new_global_variable
    new_global_variable = "I am a new global"
 
my_function()
print(new_global_variable)
# Output: I am a new global

总之,局部变量只在其被声明的函数内部有效。全局变量可以在多个函数中共享,但要在函数内部修改全局变量,需要使用global关键字。

六、函数的高级用法

6.1 Lambda函数

Lambda函数是一种匿名函数,通常用于短小的函数定义,而不需要使用def关键字显式地定义函数。

Lambda函数的语法如下:

lambda arguments: expression

下面是一个使用Lambda函数计算两个数之和的例子:

add = lambda x, y: x + y
result = add(3, 4)  # 输出: 7
6.2 嵌套函数和闭包

函数可以嵌套定义,并且内部函数可以访问外部函数的变量。闭包是指内部函数引用了外部函数的变量,并且外部函数返回了这个内部函数。

例如:

def outer():
    x = 5
    def inner():
        print(x)
    return inner

closure = outer()
closure()  # 输出: 5
6.3 文档字符串

文档字符串(docstring)用于描述函数的用途和参数。使用三重引号(“”")编写文档字符串。

例如:

def greet(name):
    """打印问候消息
参数:
    name -- 要问候的人的名字
"""
print(f"Hello, {name}!")

七、总结

Python中的函数是一种非常重要的编程工具,它可以帮助我们组织代码、提高代码的可重用性和可维护性。通过掌握函数的定义、调用、参数、返回值、作用域以及使用技巧等方面的知识,我们可以更好地使用函数来编写高效的Python程序。

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes 简介及部署方法

目录 一、Kubernetes简介 1 应用部署方式演变 1.2 容器编排应用 1.3 kubernetes 简介 1.4 K8S的设计架构 1.4.1 K8S各个组件用途 1.4.2 K8S 各组件之间的调用关系 1.4.3 K8S 的 常用名词感念 1.4.4 k8S的分层架构 二 K8S集群环境搭建 2.1 k8s中容器的管理方式 2.2 …

网络安全知识:什么是访问控制列表 (ACL)?

访问控制列表 (ACL) 是网络安全和管理的基础。它们在确定谁或什么可以访问网络内的特定资源方面发挥着重要作用。 本文深入探讨了 ACL 的复杂性,探索了其类型、组件、应用程序和最佳实践。我们还将比较不同操作系统的 ACL,并讨论它们在网络架构中的战略…

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地…

如何使div居中?CSS居中终极指南

前言 长期以来,如何在父元素中居中对齐一个元素,一直是一个让人头疼的问题,随着 CSS 的发展,越来越多的工具可以用来解决这个难题,五花八门的招式一大堆,这篇博客,旨在帮助你理解不同的居中方法…

EVO进行轨迹评估

EVO进行轨迹评估 文章目录 EVO进行轨迹评估1 前言1.1 轨迹对齐1.2 尺度变换1.3 绝对轨迹误差ATE和相对轨迹误差RTE1.4 绝对姿态误差APE和相对姿态误差RPE 2 安装evo2.1 evo安装2.2 相关报错2.2.1 版本不兼容问题2.2.2 解决PATH警告 2.3 测试 3 evo指令3.1 evo_traj3.2 evo_ape3…

Spring Boot3.x 启动自动执行sql脚本

1 引言 某些项目在首次启动时,需要先手动创建数据库表,然后再手动写入初始数据才能正常使用。为了省去这个手动操作过程,我们可以使用Spring Boot启动时执行sql脚本的配置,全自动完成这个过程。 2 配置 具体配置如下&#xff1…

Python 调用手机摄像头

Python 调用手机摄像头 在手机上安装软件 这里以安卓手机作为演示,ISO也是差不多的 软件下载地址 注意:要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 ) 安装完打开IP摄像头服务器 点击分享查看IP 查看局域网的I…

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代…

flume 使用 exec 采集容器日志,转储磁盘

flume 使用 exec 采集容器日志,转储磁盘 在该场景下,docker 服务为superset,flume 的sources 选择 exec , sinks选择 file roll 。 任务配置 具体配置文件如下: #simple.conf: A single-node Flume configuration#…

Shader 渲染路径

实际的游戏开发中,场景中的光源肯定是更多、更复杂的,如果只有一个平行光的处理,完全不能满足需求。处理更多的光源,我们就需要了解Unity底层是如何处理这些光源的。 1、渲染路径是什么 渲染路径(Rendering Path&…

Apache POl的使用(导出报表)

介绍 Apache POl是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 PO! 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI都是用于操作 Excel 文件。 Apache POl的应用场景: 银行网银系统导出交…

中秋之美——html5+css+js制作中秋网页

中秋之美——html5cssjs制作中秋网页 一、前言二、功能展示三、系统实现四、其它五、源码下载 一、前言 八月十五,秋已过半,是为中秋。 “但愿人长久,千里共婵娟”,中秋时节,气温已凉未寒,天高气爽&#x…

助贷行业的三大严峻挑战:贷款中介公司转型债务重组业务

大家是否察觉到一种趋势?现如今,众多贷款辅助服务机构与专注于债务再构的公司之间形成了紧密的“联动”。有的选择将获取的贷款需求转介给债务重组方,有的则直接下场,动用自身资本参与债务重组业务。这一现象背后,究竟…

紫光展锐完成Android 15同步升级,驱动技术创新与生态共赢

近日,紫光展锐宣布,展锐5G移动平台T820、T770、T765、T760、T750以及4G平台T620、T619、T616、T615、T612、T606,完成Android 15同步升级。相较于过往Android发布,今年同步升级Android 15主要有三大提升: ■ 紫光展锐实…

Oracle版本简介手册

Oracle版本简介手册 图1—数据库发布路线图表 Oracle数据库的各个版本反映了其技术的发展历程和功能增强,从最早的Oracle 1(1979年)到最新的版本,每个版本都带来了新的特性和改进,以满足不断变化的企业需求。以下是Or…

2024 第七届“巅峰极客”网络安全技能挑战赛初赛 Web方向 题解WirteUp

EncirclingGame 题目描述:A simple game, enjoy it and get the flag when you complete it. 开题,前端小游戏,红点出不去就行 直接玩通关了 看看如何不玩也能拿到flag,flag存储在后端php文件内,前端找不到。 看一下…

uniapp使用uni-popup做底部弹出选项(vue3)

效果图 页面代码 <!-- 发票筛选弹出框 --><uni-popup ref"popupRef" type"bottom" border-radius"10px 10px 0 0" background-color"#fff"><h4 style"text-align: center;margin-bottom: 20px;">发票筛…

内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度

热招岗位 更多岗位欢迎扫描末尾二维码&#xff0c;小程序直接提交简历等面试。实时帮你查询面试进程。 安全运营中心研发工程师 岗位要求 1、本科及以上学历&#xff0c;3年以上的安全相关工作经验&#xff1b; 2、熟悉c/c、go编程语言之一、熟悉linux网络编程和系统编程 3、…

AMD Zen5芯片技术架构分析

AMD Zen 5架构深入研究 在Zen 5技术日上&#xff0c;AMD隆重推出了其最新锐龙9000系列—“Granite Ridge”以及Ryzen AI 300系列—“Strix Point”。此次展示深入剖析了公司下一代芯片的卓越性能与创新力。 AMD 一直在缓慢地公布 Zen 5 处理器的细节&#xff0c;但今天我们可以…

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口 int main(int argc, char *argv[]) {//…