当前位置: 首页 > news >正文

Python 函数详解

在写 Python 程序的时候,如果你发现自己不停地在写重复的代码,那说明你需要函数来帮你省事了。

参考文章: Python 函数 | 简单一点学习 easyeasy.me

目录

  1. 什么是函数?
  2. 为什么要用函数?
  3. 如何定义函数(def 语法)
  4. 函数参数的各种花样(位置参数、默认值、可变参数)
  5. 函数的返回值
  6. 变量作用域(局部变量 vs 全局变量)
  7. 匿名函数 lambda
  8. 函数作为参数传递
  9. 嵌套函数和闭包
  10. 装饰器(进阶)
  11. 实战:写几个有用的函数

1. 什么是函数?

函数就是把一段代码封装起来,给它起个名字,以后想用的时候直接调用名字就行。

比如你写了个计算两个数相加的功能:

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

你只要写好一次,之后用 add(3, 4) 就能得到 7


2. 为什么要用函数?

几个原因:

  • 复用性高:写一次,用多次;
  • 代码更清晰:每段代码都表达一个明确功能;
  • 方便维护:改一个地方,所有地方都生效;
  • 避免重复:不复制粘贴,写得更优雅。

3. 如何定义函数(def 语法)

def 关键词来定义函数:

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

调用方法:

greet("Tom")  # 输出:Hello, Tom

注意:

  • 函数名尽量见名知意;
  • 函数体缩进(4 空格)是必须的;
  • return 可以返回值,也可以没有。

4. 函数参数的各种花样

Python 的函数参数可以有很多种写法,主要有这些:

📌 位置参数

最常见的,就是你传几个值,函数就按顺序接收。

def say_hello(name, age):print(f"{name} is {age} years old.")

📌 默认参数

有些参数可以不传,给它设置一个默认值。

def greet(name="Guest"):print("Hi", name)

📌 可变参数 *args

接收任意数量的位置参数(会变成元组):

def add_all(*numbers):return sum(numbers)add_all(1, 2, 3, 4)  # 结果是 10

📌 关键字参数 **kwargs

接收任意数量的键值对参数(会变成字典):

def print_info(**kwargs):for key, value in kwargs.items():print(key, ":", value)print_info(name="Alice", age=20)

5. 函数的返回值

return 把值返回出去:

def double(x):return x * 2result = double(5)  # result 是 10

如果不写 return,函数默认返回 None

可以返回多个值(其实是个元组):

def calc(a, b):return a + b, a * bs, p = calc(2, 3)

6. 变量作用域(局部变量 vs 全局变量)

局部变量(local)

只在函数内部能用:

def test():x = 10  # x 是局部变量

全局变量(global)

在整个文件中都能用的变量:

x = 5def change():global xx = 10

注意:不要滥用全局变量,会让代码难维护。


7. 匿名函数 lambda

lambda 是一种简洁写法,适合只用一次的小函数:

double = lambda x: x * 2
print(double(4))  # 输出 8

常见用法是搭配 mapfilter 等函数。


8. 函数作为参数传递

Python 中,函数本身也是“值”,可以当参数传:

def apply(f, x):return f(x)print(apply(lambda x: x**2, 5))  # 输出 25

9. 嵌套函数和闭包

函数里可以再定义函数:

def outer(msg):def inner():print("Message:", msg)return innerf = outer("Hi")
f()  # 输出 Message: Hi

这种结构叫“闭包”,可以记住外层函数的变量。


10. 装饰器(进阶)

装饰器是个“函数改造器”,用来给函数加功能而不改源码,后续文章我会专门讲解装饰器如何定义与使用:

def logger(func):def wrapper(*args, **kwargs):print("Calling", func.__name__)return func(*args, **kwargs)return wrapper@logger
def greet(name):print("Hello", name)greet("Bob")

运行结果:

Calling greet
Hello Bob

11. 实战:写几个有用的函数

统计一个字符串中某个字符出现的次数

def count_char(s, ch):return s.count(ch)

判断一个数是不是素数

def is_prime(n):if n < 2:return Falsefor i in range(2, int(n**0.5)+1):if n % i == 0:return Falsereturn True

生成一个斐波那契数列

def fib(n):seq = [0, 1]for i in range(2, n):seq.append(seq[-1] + seq[-2])return seq[:n]

http://www.dtcms.com/a/315534.html

相关文章:

  • 精华贴分享|指数,衍生品,与交易时间之间的逻辑关系
  • Apache OFBiz Scrum 组件命令注入漏洞
  • MySQL 查询性能优化与索引失效问题全解析
  • 视频水印技术中的变换域嵌入方法对比分析
  • K8s Master状态NotReady
  • Linux内核参数调优:为K8s节点优化网络性能
  • Datart:开源数据可视化的新星,赋能企业数据分析
  • K8S的NetworkPolicy使用教程
  • ubuntu24中部署k8s 1.30.x-底层用docker
  • 本机部署K8S集群
  • 基于k8s环境下的pulsar常用命令(下)
  • 查看部署在K8S服务的资源使用情况
  • docker构建镜像并运行容器详细过程
  • HTML总结全览
  • JDK安装教程
  • 机器学习 集成学习之随机森林
  • 攻击实验(ARP欺骗、MAC攻击、报文洪水攻击、DNS欺骗)
  • 调用com对象的坑
  • 自由学习记录(77)
  • 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
  • 水库安全“守护者”:智能雨水情监测预报系统
  • 联发科芯片组曝高危漏洞:越界写入缺陷危及智能手机与物联网设备安全
  • 论文阅读笔记:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》
  • table行内--图片预览--image
  • 防御保护07-08
  • 2025年服务器漏洞生存指南:从应急响应到长效免疫的实战框架
  • 多层Model更新多层ListView
  • 4. 什么是字节码采用字节码的好处是什么
  • avue---upload 图片上传
  • 南柯电子|直流电机EMC整改:从干扰源到解决方案的实战指南