三元表达式,递归,匿名函数,内置函数

本文介绍了Python中的三元表达式、递归函数、匿名函数及内置函数的应用技巧。包括三元表达式的简单条件判断,递归函数的实现原理与注意事项,lambda表达式的使用场景以及常用的内置函数介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 



一 、三元表达式
只应用于条件成立返回一个值,条件不成立返回另一个值。

   示例:
    name=input('姓名>>: ')
    res='SB' if name == 'alex' else 'NB'
    print(res)
注:通常使用场合为特别简单一眼读懂的地方。

二、递归
函数的递归调用就是在函数调用的过程直接或者间接调用了函数本身。递归的的最大限制1000层,可修改。
示例:
def foo():
print('hahah')
bar()

def bar():
print('kkkkkkk')
foo()
foo()

递归分为两个阶段:
1 回溯 回溯注意一定要在某种程度下结束回溯,否则就是无限的死循环
2 递推


itmes = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13]]]]]]]]]]]]]

def tell(l):
for itme in l:
if type(itme) is not list:
print(itme)
else:
tell(itme)
tell(itmes)

总结:
1 递归一定要有一个明确的结束条件。
2 每进入下一次,问题的规模都应该减少。
3 在Python中递归的效率不高,递归层次过高会导致栈溢出。注意在Python没有伪递归优化。


三、匿名函数

语法 lambda x,y: x ** y

f = lambda x,y: x ** y

print(f(3,10))
print(f(2,100))


总结:
匿名函数就是没有名字的函数。
与普通函数有相同的作用域,但是匿名意味着引用次数为0,使用一次后就释放。
匿名的函数的函数通常应该是一个表达式,该表达式必须只有一个返回值。

四、内置函数
Python自带的常用函数。
要求优先掌握的内置函数
bytes() res = bytes('nihao',encoding='utf-8') #装换位bytes类型。
chr() print(chr(99)) #用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个ascii值。
divmod() #把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
enumerate() #函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
eval() #将字符串str当成有效的表达式来求值并返回计算结果。
filter() #函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,
序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
id() #id() 函数用于获取对象的内存地址。
input() #接受一个标准输入数据,返回为 string 类型。
iter() #函数用来生成迭代器。
len() #返回对象(字符、列表、元组等)长度或项目个数。
map() #根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个
元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
max() #返回字符串中最大的字母。
min() #返回给定参数的最小值,参数可以为序列。
ord() #用来返回单个字符的ascii值(0-255)。
sorted() #函数对所有可迭代的对象进行排序操作。

转载于:https://www.cnblogs.com/zhaodafa/p/8695277.html

<think>好的,我现在需要帮助用户理解Python中的匿名函数lambda的定义和用法。根据用户的问题,他们想知道如何定义和使用匿名函数,尤其是如何在定义名称的情况下使用lambda。 首先,我需要回顾用户提供的引用内容。引用[1]提到lambda是匿名函数,没有名字,用于简单的单行函数,与def同。引用[2]举例说明lambda替代def的情况,比如计算x的y次方和条件判断,还提到与map函数一起使用。引用[3]展示了同形式的lambda,如无参数、一个参数、多个参数和条件表达式。 用户之前的问题是关于生成质数的代码解释和优化,现在转向lambda函数,可能需要将两者联系起来。但当前问题主要围绕lambda的基础知识,所以应专注于定义、语法、使用场景和示例。 接下来,我需要组织信息。首先解释lambda的定义,语法结构,然后对比def函数,突出lambda的简洁性。接着,展示同使用场景:如作为参数传递,与map、filter、sorted等内置函数结合,以及条件判断。需要确保每个部分都有示例代码,并引用相关引用内容。 可能需要注意用户提到的“无需定义名称”,所以要强调lambda的匿名性,通常会赋给变量,而是直接使用。但引用中的例子有赋给变量,比如calc = lambda...,可能需要说明虽然可以这样做,但符合最佳实践,应直接作为参数传递。 还要考虑用户可能的疑问,比如lambda的限制,能包含多条语句,只能有一个表达式。需要指出lambda适合简单函数,复杂逻辑仍用def。 最后,生成相关问题,引导用户深入,比如性能优势、与高阶函数结合、与def的对比等,参考之前的问题结构。</think>### Python匿名函数lambda详解与实战应用 --- #### 一、匿名函数核心定义 匿名函数(lambda函数)是Python中**无需命名**的临时函数工具,使用`lambda`关键字定义,专为**单行简单逻辑**设计[^1]。 **语法结构**: ```python lambda 参数列表: 表达式 ``` **与def函数的本质区别**: | 特性 | lambda函数 | def函数 | |--------------------|-------------------------------|--------------------------------| | 函数名 | 匿名(无绑定名称) | 需显式命名 | | 函数体 | 仅限单个表达式 | 可包含多行代码、控制流语句 | | 复用性 | 通常立即使用后释放 | 支持多次调用 | | 典型应用场景 | 简单逻辑、临时函数 | 复杂逻辑、需要复用的功能 | --- #### 二、基础使用场景与代码示例 ##### 1. **替代简单def函数** **传统def写法**(引用[2]): ```python def calc(x, y): return x ** y ``` **lambda优化版**: ```python calc = lambda x, y: x ** y # 直接计算结果(推荐赋给变量) print(calc(2, 5)) # 输出32 ``` > **注意**:虽然技术上可将lambda赋给变量,但违背其匿名特性,建议直接作为参数传递。 --- ##### 2. **条件表达式整合** **带if-else的三元运算**(引用[2][3]): ```python lambda x, y: x * y if x > y else x / y ``` 等效于: ```python def compare(x, y): if x > y: return x * y else: return x / y ``` --- ##### 3. **作为高阶函数参数** 与`map()`、`filter()`、`sorted()`等函数结合使用是lambda的典型场景(引用[2][3]): - **map()映射处理** ```python numbers = [1, 2, 3, 4] squared = map(lambda x: x ** 2, numbers) print(list(squared)) # 输出[1, 4, 9, 16] ``` - **filter()过滤数据** ```python primes = filter(lambda x: all(x%i !=0 for i in range(2, int(x**0.5)+1)), range(2, 20)) print(list(primes)) # 输出[2,3,5,7,11,13,17,19] ``` - **sorted()自定义排序** ```python points = [(1, 2), (3, 1), (5, 0)] sorted_points = sorted(points, key=lambda p: p[1]) # 按y坐标排序 print(sorted_points) # 输出[(5,0), (3,1), (1,2)] ``` --- #### 三、高级用法与规范 ##### 1. **多参数支持** lambda可接收任意数量参数(引用[3]): ```python lambda_c = lambda a, b, c, d: a + b + c + d print(lambda_c(1, 2, 3, 4)) # 输出10 ``` ##### 2. **无参数形式** 适用于固定返回(引用[3]): ```python lambda_a = lambda: 100 print(lambda_a()) # 输出100 ``` ##### 3. **立即执行模式** 通过尾部`()`直接调用(较少用但合法): ```python print((lambda x: x * 2)(5)) # 输出10 ``` --- #### 四、性能优势与内存管理 - **内存效率**:lambda在调用后立即释放,减少内存占用(引用[2])。 - **执行速度**:对于简单操作,lambda比预定义函数稍快(尤其在循环中)。 --- #### 五、使用规范与限制 1. **代码可读性**:避免在lambda中嵌套复杂逻辑,例如: ```python # 错误示范(难以阅读) process = lambda x: (x**2 if x>0 else 0) if isinstance(x, (int, float)) else None ``` **改进方案**:改用def定义多条件函数。 2. **表达式限制**:lambda函数体**只能包含一个表达式**,以下操作非法: - 赋语句(如`x=5`) - 多行代码块 - `return`关键字(自动返回表达式结果) --- #### 六、实战案例:优化质数生成代码 结合用户历史问题中的质数生成代码,使用lambda+filter优化: ```python print(list(filter(lambda x: all(x%i !=0 for i in range(2, int(x**0.5)+1)), range(2, 101)))) ``` 此代码将原双重循环简化为单行,但需权衡可读性。 --- ### 相关问题 1. lambda函数在Python中如何实现闭包特性? 2. 如何用lambda实现递归函数?有哪些限制? 3. 在多线程环境下使用lambda是否存在风险? 4. lambda与列表推导式在性能上有何差异?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值