列表推导式
name = ['Bob', 'Tom', 'Alice'] print([name.upper() for name in name if len(name)> 3]) # ['ALICE']
字典推导式
name = ['Bob', 'Tom', 'Alice']
print({key:len(key) for key in name})
集合推导式
print({i**2 for i in (1,2,3)})
列表推导式
a = (x for x in range(1,10))
'''返回的是生成器对象'''
print(a) # <generator object <genexpr> at 0x0000027AF560E440>
print(tuple(a))
迭代器
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
生成器
def countdown(n): while n > 0: yield n n -= 1 # 创建生成器对象 generator = countdown(5) # 通过迭代生成器获取值 print(next(generator)) # 输出: 5 print(next(generator)) # 输出: 4 print(next(generator)) # 输出: 3 # 使用 for 循环迭代生成器 for value in generator: print(value) # 输出: 2 1
lambda 函数特点:
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
使用 lambda 函数与 filter() 一起,筛选偶数:
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出:[2, 4, 6, 8]
下面是一个使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 使用 reduce() 和 lambda 函数计算乘积
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出:120
Python 装饰器
装饰器的语法使用 @decorator_name 来应用在函数或方法上。
Python 还提供了一些内置的装饰器,比如 @staticmethod 和 @classmethod,用于定义静态方法和类方法。
装饰器的应用场景:
- 日志记录: 装饰器可用于记录函数的调用信息、参数和返回值。
- 性能分析: 可以使用装饰器来测量函数的执行时间。
- 权限控制: 装饰器可用于限制对某些函数的访问权限。
- 缓存: 装饰器可用于实现函数结果的缓存,以提高性能。
Python 提供了一些内置的装饰器,例如:
@staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。@classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为cls)。@property: 将方法转换为属性,使其可以像属性一样访问。
class MyClass:
@staticmethod
def static_method():
print("This is a static method.")
@classmethod
def class_method(cls):
print(f"This is a class method of {cls.__name__}.")
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
# 使用
MyClass.static_method()
MyClass.class_method()
obj = MyClass()
obj.name = "Alice"
print(obj.name)
__name__ 属性
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
类对象
#!/usr/bin/python3
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
构造方法
def __init__(self):
self.data = []
print (counter.__secretCount) # 报错,实例不能访问私有变量
正则表达式
import re pattern = re.compile(r''' \d+ # 匹配数字 [a-z]+ # 匹配小写字母 ''', flags=re.VERBOSE) result = pattern.match('123abc') print(result.group()) # 输出: '123abc'
简化if-else
user_input = input("Name")
name = user_input or "N/A"
print(name)
array1 = [4,5,6,2,3,5]
array2 = [2,4,5,6,2,1]
# 合并、去重、排序
result = sorted(set(array1+array2))
print(result)
old = ['a', 'c'. 'd', 'f', 'e', 'd', 'c']
new = []
# 去重
new = list(dict.fromkeys(old))
print(new)
bag1 = {
'apple': 3,
'banana':1,
}
bag2 = {
'apple': 1,
'mango':2,
}
new = {
k: bag1.get(k, 0) + bag2.get(k, 0)
for k in set(bag1) | set(bag2)
}
print(new)
# 或者
from collections import Counter
bag1 = Counter({'apple': 3, 'banana': 1})
bag2 = Counter({'apple': 1, 'mango': 2})
new = bag1 + bag2
print(dict(new))
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://blog.grover.top/2025/05/16/python%e7%ac%94%e8%ae%b0/
共有 0 条评论