python笔记

Ryder 2025-5-16 15 5/16

列表推导式

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 提供了一些内置的装饰器,例如:

  1. @staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。
  2. @classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为 cls)。
  3. @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))

 

- THE END -

Ryder

7月13日22:22

最后修改:2025年7月13日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论