Python语法详解module4(函数)

news2024/11/23 22:02:59

在这里插入图片描述

目录

  • 一、函数基础
      • 1. 函数的概念和作用
      • 2. 函数的定义和调用
      • 3. 参数传递
  • 二、返回值和文档字符串
    • 返回值的概念和用法
      • 1. 返回值的概念
      • 2. 使用 `return` 关键字返回值:
      • 3. 多个返回值的情况:
    • 文档字符串(docstring)的作用和使用方法
      • 1. 文档字符串的作用:
      • 2. 使用方法:
      • 3. 查看文档字符串:
  • 三、局部变量和全局变量
      • 局部变量(Local Variables)
      • 全局变量(Global Variables)
      • 区别:
      • 在函数中访问全局变量:
  • 四、函数的形参、实参
      • 形参(形式参数)
      • 实参(实际参数)
      • 关系和作用
  • 五、内嵌函数
      • 内嵌函数的定义和调用
      • 内嵌函数的作用和用法
      • 注意事项

一、函数基础

1. 函数的概念和作用

在编程中,函数是一段可重复使用的代码块,它接收输入参数、执行特定任务,并返回结果。

函数的作用在于封装特定功能,使得代码更易读、更易维护,并且能够提高代码的重用性和模块化。

函数的优点包括:

  • 模块化: 将代码分割为函数可以使得程序结构更清晰,更易于理解和维护。
  • 可重用性: 可以多次调用同一个函数,避免重复编写相同的代码。
  • 简化复杂性: 通过将复杂的操作封装在函数中,可以简化主程序的逻辑结构。
  • 提高可读性: 给函数起一个具有描述性的名称可以使代码更易读懂,降低理解成本。

2. 函数的定义和调用

在 Python 中,使用 def 关键字定义函数,语法如下:

def function_name(parameters):
    """文档字符串(可选)"""
    # 函数体
    statements
    return expression  # 可选
  • function_name 是函数的名称,用于标识函数。
  • parameters 是函数的参数列表,可以包含零个或多个参数,多个参数之间用逗号分隔。
  • """文档字符串""" 是函数的文档字符串,用于描述函数的作用、参数、返回值等信息,是可选的。
  • statements 是函数的代码块,包含了实现特定功能的语句。
  • return expression 是函数的返回语句,可选的,用于返回计算结果给调用者。

函数定义完成后,可以通过函数名称和参数列表来调用函数,如下所示:

result = function_name(arguments)
  • function_name 是函数的名称。
  • arguments 是传递给函数的参数列表,可以是位置参数或关键字参数。
  • result 是函数调用的返回值,如果函数没有返回值,则返回 None

3. 参数传递

在函数调用时,可以通过参数传递数据给函数。Python 函数支持多种类型的参数传递方式,包括:

  • 位置参数: 位置参数是按照参数的位置顺序传递的,调用时参数的顺序必须与函数定义时的参数顺序相匹配。
def greet(name, message):
    print(f"Hello, {name}! {message}")

greet("yushifu", "How are you?")
# 输出: Hello, yushifu! How are you?
  • 关键字参数: 关键字参数是按照参数名进行传递的,可以不按照参数定义的顺序传递参数。
greet(message="How are you?", name="yushifu")
# 输出: Hello, yushifu! How are you?
  • 默认参数: 默认参数在函数定义时就已经赋予了默认值,调用函数时可以不传递该参数,使用默认值。
def greet(name, message="How are you?"):
    print(f"Hello, {name}! {message}")

greet("yushifu")
# 输出: Hello, yushifu! How are you?
  • 可变长参数: 可变长参数允许函数接受任意数量的参数。在函数定义时,使用 *args 来表示可变长位置参数,使用 **kwargs 来表示可变长关键字参数。
def calculate_sum(*args):
    total = 0
    for num in args:
        total += num
    return total

print(calculate_sum(1, 2, 3, 4, 5))  # 输出: 15
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

	print_info(name="yushifu", age=23, city="Beijing")
# 输出:
# name: yushifu
# age: 23
# city: Beijing

二、返回值和文档字符串

返回值的概念和用法

在函数中,返回值是指函数执行完毕后向调用者传递的结果。

使用返回值可以将函数内部计算的结果传递给其他代码进行处理。

在 Python 中,使用 return 关键字来返回值。

1. 返回值的概念

  • 函数可以返回一个或多个值给调用者。
  • 返回值可以是任何数据类型,包括数字、字符串、列表、元组、字典等。
  • 如果函数没有明确的返回语句,它会默认返回 None

2. 使用 return 关键字返回值:

def add(a, b):
    result = a + b
    return result  # 返回计算结果给调用者

return result 语句将计算结果 result 返回给调用者。

3. 多个返回值的情况:

def calculate(a, b):
    total = a + b
    difference = a - b
    return total, difference  # 返回多个值

return total, difference 返回了两个值,实际上返回的是一个元组 (total, difference)


文档字符串(docstring)的作用和使用方法

文档字符串是函数定义的一部分,用于描述函数的作用、参数、返回值等信息。文

档字符串被存储在函数的 __doc__ 属性中,可以通过 help() 函数或 .__doc__ 属性来查看函数的文档字符串。

1. 文档字符串的作用:

  • 帮助其他开发者理解函数的作用和用法。
  • 为函数提供简明扼要的描述,方便使用者了解函数的功能和用法。
  • 提供参数和返回值的说明,帮助使用者正确调用函数。

2. 使用方法:

def greet(name):
    """输出问候语
    
    Args:
        name (str): 要问候的人的名字

    Returns:
        str: 包含问候语的字符串
    """
    return f"Hello, {name}!"

在函数定义的第一行使用三重引号 """...""" 来定义文档字符串。文档字符串通常包括以下内容:

  • 函数的作用和功能描述。
  • 参数的说明,包括参数名和类型。
  • 返回值的说明,包括返回值的类型。

3. 查看文档字符串:

可以使用 help() 函数或者直接访问 .__doc__ 属性来查看函数的文档字符串。

print(help(greet))
# 或者
print(greet.__doc__)

三、局部变量和全局变量

局部变量(Local Variables)

  • 局部变量是在函数内部声明的变量,它们只能在函数内部使用,函数执行结束后就会被销毁。

  • 局部变量的作用域仅限于函数内部,外部代码无法访问局部变量。

def my_function():
    x = 10  # x 是局部变量
    print("Inside the function:", x)

my_function()
# 输出: Inside the function: 10

# 尝试在函数外部访问局部变量将会引发 NameError
print(x)
# 输出: NameError: name 'x' is not defined

全局变量(Global Variables)

  • 全局变量是在整个程序中声明的变量,它们可以在程序的任何地方被访问。
  • 与局部变量不同,全局变量的作用域不限于特定的函数或代码块。
y = 20  # y 是全局变量

def my_function():
    print("Inside the function:", y)

my_function()
# 输出: Inside the function: 20

print("Outside the function:", y)
# 输出: Outside the function: 20

区别:

  1. 作用域:

    • 局部变量的作用域限于函数内部,只能在函数内部访问。
    • 全局变量的作用域是整个程序,可以在程序的任何地方访问。
  2. 生存周期:

    • 局部变量的生存周期仅限于函数执行期间,函数执行结束后会被销毁。
    • 全局变量的生存周期与程序的执行周期相同,只有当程序结束时才会被销毁。
  3. 访问权限:

    • 局部变量只能在声明它们的函数内部访问,外部代码无法直接访问。
    • 全局变量可以在整个程序的任何地方访问,包括函数内部和外部。

在函数中访问全局变量:

在函数内部可以访问全局变量,但如果要修改全局变量的值,则需要使用 global 关键字将其声明为全局变量。

z = 30  # z 是全局变量

def my_function():
    global z
    z = 40  # 修改全局变量 z 的值
    print("Inside the function:", z)

my_function()
# 输出: Inside the function: 40

print("Outside the function:", z)
# 输出: Outside the function: 40

四、函数的形参、实参

形参(形式参数)

  • 形参是在函数定义时声明的参数,用于接收函数调用时传递的实际参数值。

  • 形参是函数定义中的占位符,其值在函数调用时由实参传递给它。

  • 形参通常用于指定函数的输入参数。

def greet(name):
    print("Hello,", name)

# 在这个函数中,name 就是一个形参

在上面的例子中,name 是函数 greet 的形参,它用来接收调用函数时传递的实际参数值。

实参(实际参数)

  • 实参是函数调用时传递给函数的实际数值或对象,它们是真实存在的数据,用来填充函数定义中的形参。
  • 实参是函数调用时实际提供给函数的值。
greet("yushifu")

# 在这个函数调用中,"yushifu" 就是一个实参

在这个例子中,“Alice” 是传递给函数 greet 的实参,它会被赋值给函数定义中的形参 name

关系和作用

  • 关系:

    • 实参是在调用函数时传递给函数的值,填充函数定义中的形参。
    • 形参是在函数定义时声明的参数,用来接收调用函数时传递的实际参数值。
  • 作用:

    • 形参用于指定函数的输入参数,在函数定义中起到接收外部数据的作用。
    • 实参用于传递真实数据给函数,在函数调用时起到向函数传递信息的作用。
def add_numbers(x, y):  # x, y 是形参
    sum = x + y
    print("The sum is:", sum)

add_numbers(3, 5)  # 3, 5 是实参

# 输出: The sum is: 8

在这个例子中,xy 是函数 add_numbers 的形参,当我们调用 add_numbers(3, 5) 时,3 和 5 分别是传递给 xy 的实参,用于计算两个数的和。


五、内嵌函数

  • 内嵌函数(Nested Functions)指的是在一个函数内部定义的另一个函数。
  • 内嵌函数在外部函数内部声明,且只能在外部函数内部被调用。

内嵌函数的定义和调用

在 Python 中,可以在一个函数的内部定义另一个函数,这就是内嵌函数。内嵌函数只能在包含它的外部函数内部调用。

def outer_function():
    def inner_function():
        print("This is the inner function")

    inner_function()  # 在外部函数内部调用内嵌函数

outer_function()
# 输出: This is the inner function

在上面的例子中,inner_function 就是 outer_function 的内嵌函数。在 outer_function 的内部,我们调用了 inner_function

内嵌函数的作用和用法

  1. 封装和隐藏: 内嵌函数可以帮助我们将一些逻辑相关的代码封装在外部函数内部,从而隐藏实现细节,使代码更加模块化和可维护。

  2. 代码复用: 内嵌函数可以在外部函数内部被重复调用,实现代码复用,避免重复编写相似的逻辑。

  3. 闭包(Closure): 内嵌函数可以形成闭包,即可以访问外部函数的局部变量,从而实现一些特殊的功能,如记忆化、延迟计算等。

  4. 限制作用域: 内嵌函数可以限制其作用域,避免与外部函数的其他部分发生命名冲突,提高代码的可维护性。

  5. 模块化设计: 使用内嵌函数可以更好地进行模块化设计,将功能逻辑划分为更小的单元,提高代码的可读性和可维护性。

注意事项

  • 内嵌函数只能在包含它的外部函数内部调用,外部函数的其他部分无法直接访问内嵌函数。
  • 内嵌函数可以访问外部函数的局部变量,形成闭包的特性。
  • 内嵌函数的作用域仅限于外部函数内部。

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

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

相关文章

linux 下修改屏幕分辨率

在使用麒麟虚拟机时,不知道咋回事,会自动改变分辨率。 使用界面设置分辨率选项修改时,下面的保存修改按钮显示不出来,无法完成设置。 所以需要使用命令行修改一下分辨率,修改命令如下所示: 1、执行xrand…

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工,助力中小型初创企业自动化工作流程,简化数据分析,提升客户体验,推动AI与员工的协作,重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…

动态规划9:LCR 099. 最小路径和

动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:LCR …

Leetcode3170. 删除星号以后字典序最小的字符串

Every day a Leetcode 题目来源:3170. 删除星号以后字典序最小的字符串 解法1:栈 由于要去掉最小的字母,为了让字典序尽量小,相比去掉前面的字母,去掉后面的字母更好。 从左到右遍历字符串 s,用 26 个栈…

AI大底座核心平台:百度百舸AI异构计算平台(AI IaaS)与AI中台(AI PaaS)

AI大底座正是整合了以上端到端全要素技术能力,将基础架构IaaS与应用平台PaaS能力深度融合,面向企业和产业AI生 产与应用的全生命周期提供完整解决方案。 百舸AI异构计算平台是AI IaaS层的核心平台,包括AI计算、AI存储、AI加速、AI容器四层套件…

frp开启Dashboard

公网服务器 公网服务器frps.toml bindPort 81 # 127.0.0.1 Dashboard 端口,后面会进行内网穿透,因此不用配置ip为0.0.0.0 webServer.port 82auth.token "token令牌"公网服务器frpc.toml # 因为是在公网服务器的frpc所以直接配127.0.0.1 …

计算机科学(学习笔记三)

内容来源:计算机科学 指令和程序 指令:指示计算机要做什么的代码,多条指令共同组成程序。 计算机指令长度 由于早期计算机每个字只有8位,指令只占4位,意味着只能有16个指令,这远远不够。 现代计算机有两…

【Hive SQL 每日一题】统计各个商品今年销售额与去年销售额的增长率及排名变化

文章目录 测试数据需求说明需求实现分步解析 测试数据 -- 创建商品表 DROP TABLE IF EXISTS products; CREATE TABLE products (product_id INT,product_name STRING );INSERT INTO products VALUES (1, Product A), (2, Product B), (3, Product C), (4, Product D), (5, Pro…

【调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持】

调试笔记-系列文章目录 调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 文章目录 调试笔记-系列文章目录调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 前言一、调试环境操作系统:Windows 10 专业版调试环境调试…

【Qt知识】部分QWidget属性表格

QWidget是Qt库中所有图形用户界面组件的基类,它提供了大量属性以供自定义和配置控件的行为和外观。下面列出了一些主要的QWidget属性及其作用。 属性 作用 accessibleName 控件的辅助技术名称,用于无障碍访问。 accessibleDescription 控件的辅助技…

Codeforces Round 951 (Div. 2)(A~C)

目录 A. Guess the Maximum B. XOR Sequences C. Earning on Bets 这次比赛也是打的稀碎了,第二个少个break检查了15分钟才检查出来,第三个符号搞错了,错了两次,道心直接破碎了 A. Guess the Maximum 题意:我们对…

机器学习的热门领域及应用趋势

机器学习的热门领域及应用趋势 近年来,机器学习(Machine Learning, ML)已经成为科技领域的热门话题,其在各个行业的应用越来越广泛和深入。本文将详细介绍当前机器学习的几个热门领域,以及人们在这些领域中使用的机器…

【Mac】Alfred 5 for Mac(苹果效率提升工具)v5.5软件介绍及安装教程

软件介绍 Alfred 是适用于 Mac 操作系统的流行生产力应用程序。它旨在帮助用户在 Mac 电脑上更高效地启动应用程序、搜索文件和文件夹以及执行各种任务。借助 Alfred,用户可以创建自定义键盘快捷方式、设置自定义工作流程并使用热键访问功能。 Alfred for Mac 的一…

uniapp在自定义tabbar上动态修改svg图标颜色和字体颜色

需求&#xff1a;在uniapp项目内&#xff0c;自定义tabbar&#xff0c;需要将图标更换成svg格式&#xff0c;可动态修改图标及字体颜色。 效果图如下&#xff1a; 我使用的是uniapp结合uview2的组件使用&#xff0c;代码如下&#xff1a; <u-tabbar :value"currentIn…

前端 Vue 操作文件方法(导出下载、图片压缩、文件上传和转换)

一、前言 本文对前端 Vue 项目开发过程中&#xff0c;经常遇到要对文件做一些相关操作&#xff0c;比如&#xff1a;文件导出下载、文件上传、图片压缩、文件转换等一些处理方法进行归纳整理&#xff0c;方便后续查阅和复用。 二、具体内容 1、后端的文件导出接口&#xff0c;…

使用node将页面转为pdf?(puppeteer实现)

本文章适合win系统下实验&#xff08;linux&#xff0c;mac可能会出现些莫名其妙的bug我也不会解决&#xff09; 具体过程 首先了解什么时无头浏览器启动无头浏览器打开指定的url页面设置导出pdf格式开始转化完整基础代码 首先了解什么时无头浏览器 没有界面的浏览器下载pupp…

【uni-app】JS动态修改scss样式变量

需求&#xff1a; 1、 当H5嵌入到APP时&#xff0c;使用H5自身的头部&#xff0c;需要兼容手机自带的navbar高度&#xff0c;因此在嵌入APP时&#xff0c;需要固定H5 navbar距离手机自带头部高度&#xff1a;$uni-head:44px; 而paging-head-top是由于z-paging定位导致会覆盖或高…

使用kafka tools工具连接带有用户名密码的kafka

使用kafka tools工具连接带有用户名密码的kafka 创建kafka连接&#xff0c;配置zookeeper 在Security选择Type类型为SASL Plaintext 在Advanced页面添加如下图红框框住的内容 在JAAS_Config加上如下配置 需要加的配置&#xff1a; org.apache.kafka.common.security.plain.Pla…

【大事件】docker可能无法使用了

今天本想继续学习docker的命令&#xff0c;突然发现官方网站的文档页面打不开了。 难道是被墙了&#xff1f; 我用同事的翻了一下&#xff0c;能进&#xff0c;果然&#xff01; 正好手头的工作告一段落&#xff0c;将代码上传&#xff0c;然后通过jenkins将服务器自动部署到…

GAT1399协议分析(7)--pycharm anaconde3 配置pyside2

一、安装pyside2 pip install pyside2 二、配置qtdesigner File->Settings->Tools->External tools 点击添加&#xff0c;添加QtDesigner&#xff0c; 注意designer.exe路径&#xff0c;需要在虚拟环境下。 三、添加pySide2 File->Settings->Tools->Ext…