python函数
一. 函数的定义
def 函数名(参数): """ 说明文档的位置 """ 代码1 代码2 return 返回值
说明:
1.参数可有可无,根据需要而定
2. return语句可有可无,根据是否有返回值而定
二. 函数的调用
函数名(参数)
三. 函数返回值
1. 一个返回值
def return_num(): return 1 result = return_num() print(result) # 1
2. 多个返回值
def return_num(): return 1, 2 result = return_num() print(result) # (1, 2)
说明:返回多个返回值时,实际上返回的是一个tuple
四. 函数的参数
1. 参数的类型
1.1 普通参数
def fun1(a): print(a) fun1("hello") # hello fun1() # TypeError: fun1() missing 1 required positional argument: 'a'
说明:调用函数时,普通参数必须传,否则会报错
1.2 带默认值的参数(缺省参数)
def fun1(a, b="world"): print(a, b) fun1("hello", "China") # hello China fun1("hello") # hello world
def fun1(b="world", a): # 普通参数在默认参数之后,报错SyntaxError: non-default argument follows default argument print(a, b)
说明:
1. 缺省参数可传可不传,不传则使用默认值
2. 所有普通参数必须出现在默认参数前
1.3 可变参数(不定长参数)
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递
1.3.1 可变位置参数
def fun1(*args): print(args) fun1("hello", "China") # ('hello', 'China') fun1("hello") # ('hello',) fun1() # ()
说明:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。
1.3.2 可变关键字参数:
def fun1(**args): print(args) fun1(name="abc", age= 18) # {'name': 'abc', 'age': 18} fun1(name="abc") # {'name': 'abc'} fun1() # {}
说明:多个关键字参数被封装为一个字典
2. 传参的方式
2.1 位置参数
位置参数:调用函数时根据函数定义的参数位置来传递参数。
def user_info(name, age, gender): print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}') user_info('TOM', 20, '男') # 您的名字是TOM, 年龄是20, 性别是男
说明:
1. 按照参数的顺序依次传参,不指定参数名
2. 传递和定义参数的顺序及个数必须一致。
2.2 关键字参数
函数调用,通过“键=值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
def user_info(name, age, gender): print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}') user_info('Rose', age=20, gender='女') user_info(gender='男', '小明', age=16) # 报错:SyntaxError: positional argument follows keyword argument
说明:
1. 位置参数必须在关键字参数之前
2. 关键字参数间没有先后顺序
3. 关键字参数传递时,关键字直接写即可,不需要加引号
五. 高阶函数
1. 基本使用
把函数作为参数传入,这样的函数称为高阶函数
def fn1(): print("fn1执行了") def fn2(func, c, d): func() print(c, d) fn2(fn1, 1, 2) # fn1执行了 # 1 2
说明:
1. 函数变量可以作为参数直接传递
2. 函数变量后跟()可直接调用这个函数
2. 内置高阶函数
2.1 map()
map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。
list1 = [1, 2, 3, 4, 5] def func(x): return x ** 2 result = map(func, list1) print(result) # <map object at 0x0000013769653198> for i in result: print(i) # 依次打印每一个值 print(list(result)) # [1, 4, 9, 16, 25]
说明:
1. 返回的是一个迭代器对象(可直接for遍历或转换为列表)
2.2 reduce()
reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
# 计算`list1`序列中各个数字的累加和。 import functools list1 = [1, 2, 3, 4, 5] def func(a, b): return a + b result = functools.reduce(func, list1) print(result) # 15
说明:
1.必须引入functools模块
2.3 filter()
filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象。如果要转换为列表, 可以使用 list() 来转换。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def func(x): return x % 2 == 0 result = filter(func, list1) print(result) # <filter object at 0x0000017AF9DC3198> for i in result: print(i) #打印每一个值 print(list(result)) # [2, 4, 6, 8, 10]
说明:
1.和map方法类似,返回一个可迭代对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构