在Python中定义和使用函数及模块

我将介绍如何在Python中定义和使用函数,以及如何创建和使用Python模块。这些基础知识将帮助你编写更高效和可复用的代码。
image.png

目录

      • 函数基础
        • 定义和调用函数
        • 参数传递
      • 函数式编程
        • 匿名函数
        • 高阶函数
      • 装饰器
      • 模块和包
      • 常用的标准库模块

函数基础

image.png

定义和调用函数

定义函数:Python中有很多自带的函数,比如print(),但你也可以定义自己需要的函数。函数定义的基本格式是:

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

举个例子:

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

调用函数:Python内部的很多函数和自己定义的函数都可以直接调用。例如:

result = sum(3, 6)
print(result)  # 输出:9
参数传递

image.png

为了方便调用自己的函数,我们会先确定参数的名称和位置,然后将函数的主体封装起来。

位置参数:这是最简单的一种参数形式,上面sum()函数中的ab就是位置参数。

默认参数:默认参数是在定义函数时确定的参数,在调用函数时可传可不传。位置参数一定要放在默认参数之前。例如:

def sum(a, b, c=20):
    return a * b + c

print(sum(2, 3))      # 输出:26
print(sum(2, 3, c=10))  # 输出:16

关键字参数:当参数个数太多或者你忘记了参数的位置,可以使用关键字参数通过“键-值”的方式传入。例如:

print(sum(a=5, b=4))  # 输出:40
print(sum(b=4, a=5))  # 输出:40

可变参数:有的函数需要输入的参数个数是可变的,这时候可以定义可变参数。

def func(*args):
    total = 0
    for i in args:
        total += i
    return total

print(func(2, 5, 10))  # 输出:17
print(func(3, 7))      # 输出:10
print(func())          # 输出:0

这里星号*的作用是将传入的位置参数变成一个tuple

包裹关键字参数

def func(**kw):
    total = 0
    for value in kw.values():
        total += value
    return total

print(func(a=1, b=2, c=3))  # 输出:6

函数式编程

匿名函数

image.png

有时我们不需要显式定义一个函数,而可以使用匿名函数。匿名函数使用关键字lambda,基本语法为:lambda arg: expression

sum = lambda a, b: a + b
print(sum(2, 3))  # 输出:5
高阶函数

如果一个函数可以接受另一个函数作为参数,那么这个函数就是高阶函数。
image.png

map()函数:接受两个参数,一个是函数,一个是可迭代的对象(Iterable),函数依次作用于每一个元素,返回一个迭代器(Iterator)。

a = map(lambda x: x ** 2, range(5))
print(list(a))  # 输出:[0, 1, 4, 9, 16]

reduce()函数:也接受两个参数,一个是函数,另一个是Iterable。

from functools import reduce

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

print(reduce(add, range(5)))  # 输出:10 (0 + 1 + 2 + 3 + 4)

filter()函数:函数依次作用于每一个元素,判断其真假(True or False),然后根据真或假来决定保留还是丢弃该元素。

def is_even(n):
    return n % 2 == 0

print(list(filter(is_even, range(6))))  # 输出:[0, 2, 4]

sorted函数

print(sorted([3, 5, 1, -8, 2], key=abs))  # 输出:[1, 2, 3, 5, -8]
print(sorted([("a", 2), ("b", 1), ("c", 3)], key=lambda x: x[1]))  # 输出:[('b', 1), ('a', 2), ('c', 3)]

装饰器

image.png

装饰器可以在不改变函数本身的情况下给函数添加新的功能。

def hello(func):
    def wrapper(*args):
        print("hello xiaoyang!")
        return func(*args)
    return wrapper

@hello
def add(*args):
    total = 0
    for n in args:
        total += n
    return total

print(add(2, 5, 7))  # 输出:hello xiaoyang! 14

模块和包

image.png

一个Python模块就是一个.py文件,一个Python包就是包含一个或多个模块的目录。

创建模块

创建一个叫hello.py的文件:

"This is a hello module"  # 模块的__doc__属性

__author__ = "xiaoyang Li"

def hello():
    print("Hello xiaoyang!")

if __name__ == "__main__":
    hello()

使用模块
image.png

import hello
hello.hello()  # 输出:Hello xiaoyang!

常用的标准库模块

image.png

sys模块

import sys

print(sys.argv)  # 命令行参数列表
print(sys.path)  # 模块检索路径
print(sys.modules.keys())  # 已导入的模块列表

os模块

import os

os.mkdir('test_dir')  # 创建目录
os.rmdir('test_dir')  # 删除目录
print(os.getcwd())  # 获取当前路径

datetime模块

import datetime

print(datetime.datetime.now())  # 当前日期和时间

通过本章的学习,你应该已经掌握了如何定义和使用Python中的函数以及如何创建和使用模块。

希望这些知识能帮助你在编写Python代码时更加得心应手。

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

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

相关文章

这样制作宣传册,才能提升品牌的曝光度

​在当今竞争激烈的市场环境中,一份高质量的宣传册不仅可以展示企业的实力和特色,还能有效提升品牌的曝光度。要想制作出既能吸引眼球又能传达信息的宣传册,需要如何制作呢? 1.明确宣传目标:制作翻页电子宣传册之前&am…

C语言·动态内存管理

1. 为什么要有动态内存管理? 例1: //固定的向内存申请4个字节 int a 10;//申请连续的一块空间 int arr[10]; 这些数据一旦声明定义之后就会在内存中有一块空间,这些空间都是固定的,为了让内存使用更加灵活,这时我们…

Spark SQL 血缘解析方案

背景 项目背景建设数据中台,往往数据开发人员首先需要能够通过有效的途径检索到所需要的数据,然后根据检索的数据模型进行业务加工然后得到一些中间模型,最后再通过数据抽取工具或者OLAP分析工具直接将数据仓库中加工好的公共模型输出到应用层。这里我不在去介绍数据仓库为…

【Qt】day2

文章目录 菜单栏工具栏状态栏铆接部件(浮动窗口)中心部件添加图片对话框模态对话框非模态对话框标准对话框(信息对话框)错误对话框信息对话框提问对话框警告对话框 其他标准对话框颜色对话框文件对话框 字体对话框 登录窗口布局按…

《重构》读书笔记【第1章 重构,第一个示例,第2章 重构原则】

文章目录 第1章 重构,第一个示例1.1 重构前1.2 重构后 第2章 重构原则2.1 何谓重构2.2 两顶帽子2.3 为何重构2.4 何时重构2.5 重构和开发过程 第1章 重构,第一个示例 我这里使用的IDE是IntelliJ IDEA 1.1 重构前 plays.js export const plays {&quo…

将 MinIO 与 Keycloak OIDC 集成

Keycloak是一种单点登录解决方案。使用Keycloak,用户使用Keycloak而不是MinIO进行身份验证。如果没有Keycloak,您将不得不为每个用户创建一个单独的身份 - 从长远来看,这将很麻烦。您需要一个集中身份解决方案来管理 MinIO 的身份验证和授权。…

Python深度学习技术

原文链接:Python深度学习技术 近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。Transformer模型(BERT、GPT-…

3.2 文件包含漏洞渗透实战(OWASP实战训练)

3.2 文件包含漏洞渗透实战(OWASP实战训练) 原理及危害3.低安全级别渗透3.1本地文件包含漏洞3.2 本地文件包含漏洞webshell3.3远程文件包含漏洞 上一节讲了本地文件包含和远程文件包含 本地文件包含需要将文件传上去或者不传上去(本地系统的一…

导出 S 参数扫描结果供 INTERCONNECT 使用

导出 S 参数扫描结果供 INTERCONNECT 使用 正文正文 有时候,对于 FDTD 无法直接进行仿真的大型仿真链路,我们需要使用 FDTD 针对单个小的模块进行仿真,再将得到的 S 参数结果导入到 INTERCONNECT 中使用,最终完成整个链路的仿真。通常完成 S 参数扫描后其状态如下图所示:…

【数据结构】栈的定义与实现(附完整运行代码)

目录 一、栈的定义 二、顺序栈 链栈比较 三、栈的实现(顺序栈) 3.1 ❥ 定义栈结构 3.2 ❥ 初始化 3.3 ❥ 销毁 3.4 ❥ 插入(入栈) 3.5 ❥ 删除 (出栈) 3.6 ❥ 获取栈顶元素 3.7 ❥ 判空 3.8 ❥…

1962springboot VUE社区服务平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区服务平台系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和…

光泽正在褪去,所以我们又回到了人工智能领域。

光泽正在褪去,所以我们又回到了人工智能领域。 人工智能冬天将被私有化 自从“人工智能”这个流行词在20世纪50年代被创造出来以来,人工智能经历了几次繁荣和萧条周期。 一种新的技术方法看起来很有趣,并取得了一些成果。它被荒谬地炒作并获…

EdgeOne 边缘函数 + Hono.js + Fauna 搭建个人博客

一、背景 虽然 “博客” 已经是很多很多年前流行的东西了,但是时至今日,仍然有一部分人在维护自己的博客站点,输出不少高质量的文章。 我使用过几种博客托管平台或静态博客生成框架,前段时间使用Hono.jsFauna ,基于 …

热电发电机越来越受到研发关注

热电发电机 (TEG) 利用热量(或更准确地说,温差)和众所周知的塞贝克效应来发电。它们的应用范围从收集可用热能,尤其是在工业和其他情况下“浪费”的热能,到在放射性同位素热发电机 (RTG) 中使用航天器的放射性电源作为…

静电场的基本方程

目录 场积分方程 通量(高斯定理) 环量 场微分方程 散度 旋度 小结 补充知识 立体角 场积分方程 通量(高斯定理) 环量 场微分方程 散度 旋度 小结 补充知识 立体角

慢性病防治新策略:诊所管理系统助力健康管理变革

慢性病,如高血压、糖尿病等,正逐渐成为全球健康领域的重要挑战。据尚普咨询的数据显示,全球每年有4100万人死于慢性非传染性疾病,占全球死亡总数的71%。而在中国,随着经济社会发展和卫生健康服务水平的提高&#xff0c…

OpenAI突然宣布停止向中国提供API服务!

标题 🌟 OpenAI突然宣布停止向中国提供API服务! 🌟摘要 📜引言 📢正文 📝1. OpenAI API的重要性2. 停止服务的原因分析3. 对中国市场的影响4. 应对措施代码案例 📂常见问题解答(QA)❓…

使用AES,前端加密,后端解密,spring工具类了

学习python的时候,看到很多会对参数进行加密,于是好奇心驱使下,让我去了解了下AES加密如何在java中实现。 首先 npm install crypto-js 然后在你的方法中,给你们前端源码看看,因为我用的ruoyi框架做的实验&#xff…

iSCSI driver not found和Failed to start Open-iSCSI的解决方法

案例1:iscsi的配置有问题 方法:一般的处理方法为重装iscsi-initiator-utils。 案例2:linux安装了多个内核,启动所选的内核与iscsi服务不匹配 方法:重启系统,选择对应的内核版本启动系统。 (注…

Python 围棋

效果图 完整代码 源码地址:Python 围棋 # 使用Python内置GUI模块tkinter from tkinter import * # ttk覆盖tkinter部分对象,ttk对tkinter进行了优化 from tkinter.ttk import * # 深拷贝时需要用到copy模块 import copy import tkinter.me…