8个让Python代码效率翻倍的简单技巧

Written by

in

文章目录
  • 还在这样写变量交换吗? # 老掉牙的写法 temp = a a = b b = temp 学会这招,一行代码搞定: # 运行一下试试: a, b = 3, 5 print(f”交换前:a={a}, b={b}”) a, b = b, a # 这行就够了! print(f”交换后:a={a}, b={b}”)
  • 有一堆文本文件要改名,你可能会这么写: # 老式写法 new_names = [] for name in files: if name.endswith(‘.txt’): new_names.append(name.replace(‘.txt’, ‘.md’)) 试试这个一行代码的魔法: # 来测试一下: files = [‘笔记1.txt’, ‘笔记2.txt’, ‘照片.jpg’] new_names = [name.replace(‘.txt’, ‘.md’) for name in files if name.endswith(‘.txt’)] print(f”处理后的文件名:{new_names}”)
  • 看到这种代码就头大: # 容易出错的写法 try: value = user_data[‘age’] except KeyError: value = 0 一行代码搞定,还能自定义默认值: # 实战体验: user_data = {‘name’: ‘小明’} age = user_data.get(‘age’, 18) # 找不到就返回18 print(f”用户年龄:{age}”)
  • 看到这种代码就想骂人: # 各种魔法数字,看得头晕 if user_status == 0: print(“未注册”) elif user_status == 1: print(“已注册”) elif user_status == 2: print(“已认证”) 来看看优雅的写法: from enum import Enum class UserStatus(Enum): UNREGISTERED = 0 REGISTERED = 1 VERIFIED = 2 # 实际使用起来很清晰 status = UserStatus.REGISTERED print(f”用户状态:{status.name}”)
  • 这种代码看着就烦: if grade >= 90: level = “A” elif grade >= 80: level = “B” elif grade >= 70: level = “C” else: level = “D” 用字典映射,既优雅又高效: # 实战测试: grade_map = { lambda x: x >= 90: “A”, lambda x: 80 <= x < 90: “B”, lambda x: 70 <= x < 80: “C”, lambda x: x < 70: “D” } def get_level(score): return next(v for k, v in grade_map.items() if k(score)) print(f”85分的等级:{get_level(85)}”)
  • 别再这样写了: # 又臭又长的老写法 name = data[‘user’][‘profile’][‘name’] 学会这个神器: from functools import reduce from operator import getitem def deep_get(dictionary, keys, default=None): return reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default, keys.split(‘.’), dictionary) # 实战一下: data = { ‘user’: { ‘profile’: { ‘name’: ‘张三’, ‘age’: 25 } } } name = deep_get(data, ‘user.profile.name’) print(f”用户名:{name}”)
  • 不要再这样写了: f = open(‘data.txt’, ‘r’) # 处理文件 f.close() # 经常忘记关闭 用上下文管理器,既安全又优雅: # 实战演示: with open(‘demo.txt’, ‘w’) as f: f.write(‘这才是正确的打开方式!’) print(“文件已自动关闭,无需担心!”)
  • 这种写法太业余了: def create_user(name, age=None, city=None, hobby=None): if age is None: age = 18 if city is None: city = “北京” # …更多判断 用字典解包,代码立马高级起来: def create_user(**kwargs): defaults = { ‘age’: 18, ‘city’: ‘北京’, ‘hobby’: ‘编程’ } params = {**defaults, **kwargs} return params # 测试一下: user1 = create_user(name=’小明’) user2 = create_user(name=’小红’, age=20) print(f”用户1:{user1}”) print(f”用户2:{user2}”) 最后说两句: 这些技巧不是为了装逼,是为了写出更简洁、更健壮的代码。建议大家先pick一两个最感兴趣的,在实际项目中多尝试,慢慢就能体会到其中的妙处。 到此这篇关于8个让Python代码效率翻倍的简单技巧的文章就介绍到这了,更多相关Python代码优化技巧内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python Pandas实现大数据处理的性能优化技巧 Python性能优化之让你的代码运行速度提升10倍的技巧分享 Python内存优化的实战技巧分享 优化Python代码的实用技巧分享 Python加速运行8个优化技巧分享 5个Python性能优化技巧分享(代码提速300%) Python中利用算法优化性能的技巧分享 15个Python运行速度优化技巧分享
  • 目录
    • 一、变量交换还在用第三个变量?老铁你Out啦!
    • 二、批量处理文件还在用for循环?列表推导式一把梭!
    • 三、字典取值总怕报错?dict.get()来帮你!
    • 四、用枚举类型让代码更优雅
    • 五、条件判断太多?字典映射来救场!
    • 六、处理JSON数据还在手动解析?
    • 七、文件处理的正确姿势
    • 八、函数参数还在傻傻写默认值?

    还在这样写变量交换吗?

    # 老掉牙的写法
    temp = a
    a = b
    b = temp
    

    学会这招,一行代码搞定:

    # 运行一下试试:
    a, b = 3, 5
    print(f"交换前:a={a}, b={b}")
    a, b = b, a  # 这行就够了!
    print(f"交换后:a={a}, b={b}")
    

    有一堆文本文件要改名,你可能会这么写:

    # 老式写法
    new_names = []
    for name in files:
        if name.endswith('.txt'):
            new_names.append(name.replace('.txt', '.md'))
    

    试试这个一行代码的魔法:

    # 来测试一下:
    files = ['笔记1.txt', '笔记2.txt', '照片.jpg']
    new_names = [name.replace('.txt', '.md') for name in files if name.endswith('.txt')]
    print(f"处理后的文件名:{new_names}")
    

    看到这种代码就头大:

    # 容易出错的写法
    try:
        value = user_data['age']
    except KeyError:
        value = 0
    

    一行代码搞定,还能自定义默认值:

    # 实战体验:
    user_data = {'name': '小明'}
    age = user_data.get('age', 18)  # 找不到就返回18
    print(f"用户年龄:{age}")
    

    看到这种代码就想骂人:

    # 各种魔法数字,看得头晕
    if user_status == 0:
        print("未注册")
    elif user_status == 1:
        print("已注册")
    elif user_status == 2:
        print("已认证")
    

    来看看优雅的写法:

    from enum import Enum
    
    class UserStatus(Enum):
        UNREGISTERED = 0
        REGISTERED = 1
        VERIFIED = 2
    
    # 实际使用起来很清晰
    status = UserStatus.REGISTERED
    print(f"用户状态:{status.name}")
    

    这种代码看着就烦:

    if grade >= 90:
        level = "A"
    elif grade >= 80:
        level = "B"
    elif grade >= 70:
        level = "C"
    else:
        level = "D"
    

    用字典映射,既优雅又高效:

    # 实战测试:
    grade_map = {
        lambda x: x >= 90: "A",
        lambda x: 80 <= x < 90: "B",
        lambda x: 70 <= x < 80: "C",
        lambda x: x < 70: "D"
    }
    
    def get_level(score):
        return next(v for k, v in grade_map.items() if k(score))
    
    print(f"85分的等级:{get_level(85)}")
    

    别再这样写了:

    # 又臭又长的老写法
    name = data['user']['profile']['name']
    

    学会这个神器:

    from functools import reduce
    from operator import getitem
    
    def deep_get(dictionary, keys, default=None):
        return reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default, 
                     keys.split('.'), dictionary)
    
    # 实战一下:
    data = {
        'user': {
            'profile': {
                'name': '张三',
                'age': 25
            }
        }
    }
    
    name = deep_get(data, 'user.profile.name')
    print(f"用户名:{name}")
    

    不要再这样写了:

    f = open('data.txt', 'r')
    # 处理文件
    f.close()  # 经常忘记关闭
    

    用上下文管理器,既安全又优雅:

    # 实战演示:
    with open('demo.txt', 'w') as f:
        f.write('这才是正确的打开方式!')
    print("文件已自动关闭,无需担心!")
    

    这种写法太业余了:

    def create_user(name, age=None, city=None, hobby=None):
        if age is None:
            age = 18
        if city is None:
            city = "北京"
        # ...更多判断
    

    用字典解包,代码立马高级起来:

    def create_user(**kwargs):
        defaults = {
            'age': 18,
            'city': '北京',
            'hobby': '编程'
        }
        params = {**defaults, **kwargs}
        return params
    
    # 测试一下:
    user1 = create_user(name='小明')
    user2 = create_user(name='小红', age=20)
    print(f"用户1:{user1}")
    print(f"用户2:{user2}")
    

    最后说两句:

    这些技巧不是为了装逼,是为了写出更简洁、更健壮的代码。建议大家先pick一两个最感兴趣的,在实际项目中多尝试,慢慢就能体会到其中的妙处。

    到此这篇关于8个让Python代码效率翻倍的简单技巧的文章就介绍到这了,更多相关Python代码优化技巧内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python Pandas实现大数据处理的性能优化技巧
    • Python性能优化之让你的代码运行速度提升10倍的技巧分享
    • Python内存优化的实战技巧分享
    • 优化Python代码的实用技巧分享
    • Python加速运行8个优化技巧分享
    • 5个Python性能优化技巧分享(代码提速300%)
    • Python中利用算法优化性能的技巧分享
    • 15个Python运行速度优化技巧分享

    站内搜索