[Python入门学习记录(小甲鱼)]第6章 函数

news2025/4/24 1:41:32

函数就是把代码整理打包的东西

6.1 Python的函数基操

函数的基本操作

6.1.1 创建和调用函数

def myfunc():
    print(1)
    print(2)
    print(3)
myfunc()  # 输出 1 2 3 带换行  调用时会自动找函数定义

6.1.2 函数的参数

def add(num1, num2):
    print(num1 + num2)
add(1, 2)  # 输出 3

6.1.3 函数的返回值

def add(num1, num2):
    return num1 + num2
print(add(1, 2))  # 输出 3

def sub(num1, num2):
    print(num1 - num2)
print(sub(2, 1))  # 输出 1 和 None 没有返回值默认None

def test():
    return 1, 2, 3
print(test())  # 输出 (1, 2, 3) 多个返回值默认按元组返回

def test2():
    return [1, 2, 3]
print(test2())  # 输出 [1, 2, 3] 多个返回值可以设置按列表返回

6.2 Python函数的灵活参数

6.2.1 形参和实参

def say(name):
    print("i am %s" % name)
say('lin')  # 输出 i am lin   name 形参  'lin'实参

6.2.2 函数文档

def exchangeRate(dollar):
    """
    功能:汇率转换,美元->人民币
    汇率:6.54
    日期:2018-06-24
    """
    return dollar * 6.54
print(exchangeRate(10))  # 输出 65.4  文档字符串正常不打印

print(exchangeRate.__doc__)  # 查看文档字符串

6.2.3 关键字参数

def eat(somebody, something):
    print(somebody + '+' + something)
eat('wo', 'ni')  # 输出 wo+ni
eat('ni', 'wo')  # 输出 ni+wo
eat(something='wo', somebody='ni')  # 输出 ni+wo
eat('wo', somebody='ni')  # 输出 ni+wo

6.2.4 默认参数

def test(name="123", word="456"):
    print(name + '+' + word)
test()  # 输出 123+456
test('lin', 'wei')  # 输出 lin+wei

6.2.5 收集参数

def test(*params):
    print("有 %d 个参数" % len(params))
    print("第二个参数是", params[1])
test(1, 2, 3, 4, 5) 

6.3 Python变量的作用域

6.3.1 局部变量

函数的形参和函数内部定义的变量都是局部变量,只能在函数内调用

6.3.2 全局变量

定义在外部的变量能作用于任何地方,但如果要在函数内修改全局变量的值,需要使用 global 关键字

6.3.3 global关键字

def test():
    count = 10
    print(count)
test()
count = 5
print(count)  # 输出 10 和 5 无法改变全局变量的值

count = 5
def test():
    global count
    count = 10
    print(count)
test()

print(count)  # 输出 10 和 10 可以改变全局变量的值

6.3.4 内嵌函数

Python允许在函数内部定义另一个函数,内嵌函数只能在包含它的函数内部调用

6.3.5 LEGB原则

变量查找顺序:Local -> Enclosing function locals -> Global -> Builtin

6.3.6 闭包

在内部函数中对一个在外部作用域但不在全局作用域的变量引用,这个内部函数就认为是闭包

6.3.7 装饰器

将函数作为参数传递进另一个函数加工后再返回,这个过程就是装饰

def log(func):
    def func2():
        print("lin")
        func()
        print("wei")
    return func2

@log
def test():
    print("jun")
test()  # 输出 lin jun wei

6.4 函数式编程

6.4.1 lambda

lambda关键字用来创建匿名函数

g = lambda x, y: x + y
print(g(23, 3))  # 输出 26

6.4.2 filter

过滤器,filter函数用来过滤可迭代对象中符合条件的元素

print(list(filter(lambda x: x % 2, range(10))) # 过滤得到奇数

6.4.3 map

映射,map函数对每个元素进行操作

print(list(map(lambda x: x * 2, range(10)))  # 输出 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

6.5 递归

6.5.1 写一个阶乘函数

def func(n):
    if n == 1:
        return 1
    else:
        return n * func(n - 1)

print(func(5))  # 输出 120

6.5.2 斐波那契数列

def func(n):
    if n == 1 or n == 2:
        return 1
    else:
        return func(n - 1) + func(n - 2)

print(func(12))  # 输出 144

6.5.3 汉诺塔

def hanoi(n, x, y, z):
    if n == 1:
        print(x + '->' + z)
    else:
        hanoi(n - 1, x, z, y)
        print(x + '->' + z)
        hanoi(n - 1, y, x, z)

n = int(input('输出层数:'))
hanoi(n, 'X', 'Y', 'Z')

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

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

相关文章

Ubuntu20.04 部署llama-factory问题集

llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。_llamafactory 部署-CSDN博客 1.跟着教程 llama-factory下载不下来 来,试着换源,多试几次,就可以成功了。。。 2.跟着教程,发现无法…

大语言模型助力 Support Case 分析,提升云服务效率

1. 背景 技术工单(Support Case)是企业在进行云平台操作的时候通常会用到的一种技术支持类型,提供的技术支持通常包括所有的云服务的使用问题、账单问题、限制额度提升等等。对于云平台的管理者而言,对各个 BU 所提的工单进行统计…

ubuntu磁盘挂载

1、‌查看磁盘设备及分区‌ 命令‌:列出所有块设备(磁盘及分区) lsblk 0表示此块未挂载 2、格式化分区 sudo mkfs.ext4 /dev/sdb 注意sdb换成自己的块名称 3、创建挂载点目录‌ sudo mkdir -p /mnt/data4、永久挂载 sudo blkid /dev…

chili3d调试笔记8 打印零件属性 浏览器元素展开

无效, 返回的是节点不是坐标啥的, 找他的属性 把document和selectednote(空集)传给handleshowproperty方法 怎么获得selectnotes和selectnotes的property值 有selectnotes运行这段就行了 明天再搞 ----------------------------…

新书速览|DeepSeek移动端AI应用开发:基于Android与iOS

《DeepSeek移动端AI应用开发:基于Android与iOS》 1 本书内容 《DeepSeek移动端AI应用开发:基于Android与iOS》深入剖析了DeepSeek平台的架构原理、API调用及开发实践等核心内容,助力读者在Android与iOS移动端高效集成DeepSeek API,打造出契…

Android调用springboot接口上传大字段,偶现接口超时的优化

介绍 最近有个功能,Android通过okhttp上传实体类,实体类包含一个大字段,上传的字符串长度达到300k,偶现接口超时的情况,大概100次有5次,看日志发现数据并没有到达接口,可能在网络传输中就超时了…

react组件之间如何使用接收到的className(封装一个按钮案例)

带有hover渐变效果 一、父组件 import LineGradientBox from ../line-gradient-box; import styles from ./index.module.scss;<LineGradientBoxfontSize{20}className{styles.btn_height}textSign upwidth"100%"onClick{() > {navigate(/sign-up);}} /> …

JavaScript 数组常用方法解析

1. concat - 合并数组 语法&#xff1a; const newArray oldArray.concat(value1, value2, ..., arrayN); 作用&#xff1a; 将当前数组与其他数组或值合并&#xff0c;返回一个新数组&#xff0c;原数组不变。 测试案例&#xff1a; const arr1 [1, 2, 3]; const arr2…

09.传输层协议 ——— TCP协议

文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…

数字化转型“变形记”:中钧科技经营帮如何让企业长出“智慧骨骼”

数字化转型就像给企业安装一个"智慧引擎"&#xff0c;而中钧科技的经营帮平台就是这台引擎的智能控制系统。让我们用"人体"来打个比方——当企业的数据、流程、决策像神经脉络般打通&#xff0c;才能真正实现灵活运转。下面就以经营帮的五大核心板块为例&a…

【问题解决】centos7已经不维护了,如何继续使用yum源?

背景 CentOS 7 已于2024年6月30日停止维护&#xff0c;在停止维护后我们之前配置的国内镜像源大多都是空目录了&#xff0c;即在线国内镜像源不可用,就像下边这样提示&#xff1a; [rootbogon yum.repos.d]# yum install vim 已加载插件&#xff1a;fastestmirror Loading mi…

Redis 接收连接

阅读本文前&#xff0c;建议先看&#xff1a;Redis 事件循环&#xff08;Event Loop&#xff09;。 Redis 6 支持接收 3 种连接&#xff0c;对应的接收处理器如下&#xff1a; TCP&#xff1a;acceptTcpHandler&#xff1b;TLS&#xff1a;acceptTLSHandler&#xff1b;Unix …

【计算机视觉】CV实战项目- Face-and-Emotion-Recognition 人脸情绪识别

Face-and-Emotion-Recognition 项目详细介绍 项目概述项目功能项目目录结构项目运行方式1. 环境准备2. 数据准备3. 模型训练4. 模型运行 常见问题及解决方法1. **安装依赖问题**2. **数据集问题**3. **模型训练问题**4. **模型运行问题** 项目实战建议项目参考文献 项目概述 F…

基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案

0 引言 近年来&#xff0c;我国自主可控芯片在国家政策和政 府的支持下发展迅速&#xff0c;并在电力、军工、机械、 通信、电子、医疗等领域掀起了国产化替代之 风&#xff0c;但在芯片自主可控和国产化替代方面还有明 显的不足之处。 2022年我国集成电路进口量多 达 5 3…

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…

长期行为序列建模技术演进:从SIM到TWIN-v2

背景 在推荐系统与广告投放领域&#xff0c;长期行为序列建模旨在从用户数月甚至数年的历史行为中捕捉稳定兴趣模式&#xff0c;是解决冷启动、提升推荐精度的关键。随着工业界需求激增&#xff0c;SIM、ETA、SDIM、TWIN及TWIN-v2等模型相继诞生&#xff0c;推动技术不断革新。…

Linux下 REEF3D及DIVEMesh 源码编译安装及使用

目录 软件介绍 基本依赖 一、源码下载 1、REEF3D 2、DIVEMesh 二、解压缩 三、编译安装 1、REEF3D 2、DIVEMesh 四、算例测试 软件介绍 REEF3D是一款开源流体动力学框架&#xff0c;提供计算流体力学及波浪模型。软件采用高效并行化设计&#xff0c;可以在大规模处理器…

嵌入式软件测试的革新:如何用深度集成工具破解效率与安全的双重困局?

在汽车电子、工业控制、航空航天等嵌入式开发领域&#xff0c;团队常面临一个看似无解的悖论&#xff1a;如何在保证代码安全性的前提下&#xff0c;大幅提升测试效率&#xff1f; 传统测试工具往往需要搭建独立环境、插入大量桩代码&#xff0c;甚至需要开发者手动编写测试用例…

Ubuntu24.04安装ROS2问题

1&#xff0c;根据官方指导安装&#xff0c;安装到步骤&#xff1a; sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 时遇到问题。导致sudo apt update一直报错&#xff1a; 找了几天的资料…

【图问答】DeepSeek-VL 论文阅读笔记

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于图片问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;的任务 2. 模型结构 和 三段式训练 1&#xff09;使用 SigLIP 和 SAM 作为混合的vision encoder&#xf…