python基础知识(九):函数

news2024/11/26 17:52:20

目录

  • 1. 函数的定义
  • 2. 传递实参
    • 2.1 位置实参
    • 2.2 关键字实参
    • 2.3 默认值
    • 2.4 传递任意数量的实参
    • 2.5 结合使用位置实参和任意数量实参
  • 3. 导入模块
    • 3.1 导入特定的函数
    • 3.2 使用 as 给函数指定别名
    • 3.3 使用 as 给模块指定别名
    • 3.4 导入模块中的所有函数

1. 函数的定义

函数的定义形式如下:

def 函数名(参数列表):
	函数体

其中形式参数可以为空,例如:


def greet_user():
    """显示简单的问候语"""

    print("Hello!")


greet_user()

在这里插入图片描述
也可以有参数。

def greet_user(username): 
 """显示简单的问候语""" 

 print("Hello, " + username.title() + "!") 
 
greet_user('jesse')

在这里插入图片描述
在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信息。在代码greet_user(‘jesse’)中,值’jesse’是一个实参。实参是调用函数时传递给函数的信息。我们调用函数时,将要让函数使用的信息放在括号内。在greet_user(‘jesse’)中,将实参’jesse’传递给了函数greet_user(),这个值被存储在形参username中。

2. 传递实参

鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成。

2.1 位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。

def describe_pet(animal_type, pet_name):
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")


describe_pet('hamster', 'harry')

这个函数的定义表明,它需要一种动物类型和一个名字。调用describe_pet()时,需要按顺序提供一种动物类型和一个名字。例如,在前面的函数调用中,实参’hamster’存储在形参animal_type中,而实参’harry’存储在形参pet_name中(见)。在函数体内,使用了这两个形参来显示宠物的信息。
在这里插入图片描述
在函数中,可根据需要使用任意数量的位置实参,Python将按顺序将函数调用中的实参关联到函数定义中相应的形参。

2.2 关键字实参

关键字实参是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

def describe_pet(animal_type, pet_name):
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")


describe_pet(animal_type='hamster', pet_name='harry')

函数describe_pet()还是原来那样,但调用这个函数时,我们向Python明确地指出了各个实参对应的形参。看到这个函数调用时,Python知道应该将实参’hamster’和’harry’分别存储在形参animal_type和pet_name中。
在这里插入图片描述
关键字实参的顺序无关紧要,因为Python知道各个值该存储到哪个形参中。

2.3 默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。

def describe_pet(pet_name, animal_type='dog'):
    """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")
 

describe_pet(pet_name='willie')

这里修改了函数describe_pet()的定义,在其中给形参animal_type指定了默认值’dog’。这样,调用这个函数时,如果没有给animal_type指定值,Python将把这个形参设置为’dog’。
在这里插入图片描述
注意:在这个函数的定义中,修改了形参的排列顺序。由于给animal_type指定了默认值,无需通过实参来指定动物类型,因此在函数调用中只包含一个实参——宠物的名字。然而,Python依然将这个实参视为位置实参,因此如果函数调用中只包含宠物的名字,这个实参将关联到函数定义中的第一个形参。这就是需要将pet_name放在形参列表开头的原因所在。

2.4 传递任意数量的实参

有时候,预先不知道函数需要接受多少个实参,但是Python允许函数从调用语句中收集任意数量的实参。

def make_pizza(*toppings): 
 """打印顾客点的所有配料""" 
 print(toppings) 
 
make_pizza('pepperoni') 
make_pizza('mushrooms', 'green peppers', 'extra cheese')

形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中。函数体内的print语句通过生成输出来证明Python能够处理使用一个值调用函数的情形,也能处理使用三个值来调用函数的情形。它以类似的方式处理不同的调用,注意,Python将实参封装到一个元组中,即便函数只收到一个值也如此。
在这里插入图片描述

2.5 结合使用位置实参和任意数量实参

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

def make_pizza(size, *toppings):
    """概述要制作的比萨"""

    print("\nMaking a " + str(size) +
          "-inch pizza with the following toppings:")

    for topping in toppings:
        print("- " + topping)


make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

基于上述函数定义,Python将收到的第一个值存储在形参size中,并将其他的所有值都存储在元组toppings中。在函数调用中,首先指定表示比萨尺寸的实参,然后根据需要指定任意数量的配料。
在这里插入图片描述

3. 导入模块

有的时候可以导入别人写好的函数或者模块,也就是第三方库。

3.1 导入特定的函数

导入模块中的特定函数,这种导入方法的语法如下:

from 模块名 import 函数名

通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:

from 模块名 import 函数1,函数2,函数3 

3.2 使用 as 给函数指定别名

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名——函数的另一个名称,类似于外号。
指定别名的通用语法如下:

from module_name import function_name as fn

3.3 使用 as 给模块指定别名

给模块指定别名的通用语法如下:

import module_name as mn 

3.4 导入模块中的所有函数

使用星号(*)运算符可让Python导入模块中的所有函数。

from module_name import * 

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

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

相关文章

Wijmo 5.20231.888 JavaScript UI Crack

Wijmo使用更快、更灵活的 JavaScript UI 组件构建更好的应用程序 使用 Wijmo,利用我们引人注目的 UI 组件库,将更多时间花在应用程序的核心功能上。要求零依赖,Wijmo sports弹性网格,业内最好的 JavaScript 数据网格,提…

基于深度学习的高精度动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度动物检测识别系统可用于日常生活中或野外来检测与定位动物目标(狼、鹿、猪、兔和浣熊),利用深度学习算法可实现图片、视频、摄像头等方式的动物(狼、鹿、猪、兔和浣熊)目标检测识…

前端基础面试题(HTML,CSS,JS)

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 html语义化的理解 代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SE…

AI实战营:MMPreTrain代码实现

环境 环境安装 pip install openmim mim install mmengine mim install mmcv mim install mmpretrain # 安装多模态模型 pip install "mmpretrain[multimodal]" 验证环境 In [1]: import mmengineIn [2]: mmengine.__version__ Out[2]: 0.7.3In [3]: import …

开发者出海合规手册;@levelsio独立开发月入20万解析;MJ+AR设计珠宝;SD算法原理-通俗版 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 独立开发者必看,出海应用开发者合规手册 这是 JourneymanChina 多年出海经验教训的总结,适用于Google Play 以…

在Wamp环境中如何下载Composer并且使用Laravel配置Apache服务器

一.Composer的安装 方法1.到Composer官网Composer (getcomposer.org)下载 点击Composer-Setup.exe下载Composer安装包 点击Next 这里选择你的php.exe的地址 然后一直点next结束。 然后打开cmd命令输入composer -v看是否运行成功。 方法2.CMD命令安装composer php -r &quo…

学生考试作弊检测系统 yolov8

学生考试作弊检测系统采用yolov8网络模型人工智能技术,学生考试作弊检测系统过在考场中安装监控设备,对学生的作弊行为进行实时监测。当学生出现作弊行为时,学生考试作弊检测系统将自动识别并记录信息。YOLOv8 算法的核心特性和改动可以归结为…

SolVES 模型与多技术融合【多语言】实现生态系统服务功能社会价值评估及拓展案例分析

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

IDEA中Maven依赖包下载不了的一种“奇怪”解决方案【亲测有效】

💧 记录一下今天遇到的 b u g \color{#FF1493}{记录一下今天遇到的bug} 记录一下今天遇到的bug💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 数据结构与算法…

Linux - fd文件描述符和文件详解

​​​​​​​ ​​​​​​​ ​​​​​​​ 感谢各位 点赞 收藏 评论 三连支持 本文章收录于专栏【Linux系统编程】 ❀希望能对大家有所帮助❀ 本文章由 风君子吖 原创 ​​​​​​​ ​​​​​​​ ​​​​​​​ …

WPF 如何实时查看页面元素如何使用实时可视化树

文章目录 往期回顾可视化页面元素如何使用调试工具 总结 往期回顾 WPF 学习:如何使用实时可视化树,照着MaterialDesign的Demo学习 可视化页面元素 我们知道,网页的页面元素是可以通过按F12查看代码。查看到页面元素的。 WPF也有类似的工具…

基于相位共轭法的散射聚焦成像研究-Matlab代码

▒▒本文目录▒▒ 一、引言二、相位共轭法散射聚焦成像Matlab仿真三、参考文献四、Matlab程序开发与实验指导 一、引言 一直以来,研究人员致力于分析造成散射的原因、随机介质性质以及各种散射光的特征,并且研究透过散射介质成像。1990年,I.…

模型剪枝:给模型剪个头发

本文来自公众号“AI大道理”。 深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。 网…

在价格战中苦苦挣扎的小鹏汽车和蔚来,哪个是最好的电动汽车股?

来源:猛兽财经 作者:猛兽财经 总结: 从长期来看,小鹏汽车(XPEV)的基本面优于蔚来(NIO),小鹏汽车目前的估值也更有吸引力,在全球电动汽车行业中也具有更好的长期投机性。 猛兽财经的投资组合中其中有一部分…

断更两个月的感悟

清明时节雨纷纷, 路上行人欲断魂, 借问酒家何处有, 牧童遥指杏花村。 1.断更 武汉的三月和四月是个多雨的季节,这样的天气经常让我患得患失,由于一些原因(后文再详细说明),不知不觉…

【Linux】分析Fuse中libfuse源码

在Linux中,我们可以使用FUSE来进行自定义用户态文件系统的实现。编译example中的示例是学习FUSE的第一步,本文侧重于剖析FUSE的client端的源码。 文章目录 (一) 下载libfuse源码,避免重复造轮子(二&#xf…

什么是WePY?

WePY(微信小程序开发框架)是一个基于组件化开发思想的微信小程序开发框架。它类似于Vue.js框架,通过封装小程序原生的API,提供了更加简洁、高效的开发方式。 WePY的主要特点包括: 组件化开发:WePY将页面拆…

分布式锁原理与实战二:公平锁和可重入锁的原理

在单体的应用开发场景中,涉及并发同步的时候,大家往往采用synchronized 或者 Lock 的方式来解决多线程间的同步问题。但在分布式集群工作的开发场景中,那么就需要一种更加高级的锁机制,来处理种跨JVM 进程之间的数据同步问题&…

论证有效性写作模板

析错口诀: 1.概念不明确,我就说它概念模糊,并做不利它的解释。【有概念模糊之嫌,A是理解1?还是理解2?】 2.概念有变换,我就说它混淆概念,并指出混淆的环节。(概念推概念&…

华为OD机试真题 Java 实现【数列描述】【2023 B卷 100分】,附详细解题思路

一、题目描述 有一个数列a[N] (N60),从a[0]开始,每一项都是一个数字。数列中a[n1]都是a[n]的描述。其中a[0]1。 规则如下: a[0]:1 a[1]:11(含义:其前一项a[0]1是1个1,即“11”。表示a[0]从左到右,连续出…