• Python weekly -- Things you’re probably not using in Python 3 – but should


    蓝色的 mandelbrot

    1. f-strings (3.6+)

    相对format方法更加灵活的 f-strings

    user = 'hello'
    age = 008
    say_something = f'user {user} has been lived {age} years'
    print(say_something)
    

    2. Pathlib (3.4+)

    对文件路径更方便的抽象

    # C:lizude	empgithubmathmath_projectmath_projectasync_decorator.py
    from pathlib import Path
    root = Path('math_project')
    path = root / 'async_decorator'   # 绝对路径
    print(path.resolve())
    

    输出:C:lizude empgithubmathmath_projectmath_projectasync_decorator

    3. Type hinting (3.5+)

    类型指定,包括参数和函数return 结果

    def sentence_has_animal(sentence: str) -> bool:
        return 'animal' in sentence
    
    
    sentence_has_animal('donald had a farm without animals')
    

    4. Enumerations (3.4+)

    通过 Enum 类可以更方便的写枚举

    from enum import Enum, auto
    class Monster(Enum):
        ZOMBIE = auto()
        WARRIOR = auto()
        BEAR = auto()
        
    print(Monster.ZOMBIE)
    # Monster.ZOMBIE
    
    for monster in Monster:
        print(monster)
    # Monster.ZOMBIE
    # Monster.WARRIOR
    # Monster.BEAR
    

    5. Built-in LRU cache (3.2+)

    缓存目前几乎是软件和硬件的水平切片
    Python 3 makes using them very simple by exposing an LRU (Least Recently Used) cache as a decorator called lru_cache.

    import time
    def fib(number: int) -> int:
        if number == 0: return 0
        if number == 1: return 1
        
        return fib(number-1) + fib(number-2)
    start = time.time()
    fib(40)
    print(f'Duration: {time.time() - start}s')
    # Duration: 30.684099674224854s
    
    from functools import lru_cache
    @lru_cache(maxsize=512)
    def fib_memoization(number: int) -> int:
        if number == 0: return 0
        if number == 1: return 1
        
        return fib_memoization(number-1) + fib_memoization(number-2)
    start = time.time()
    fib_memoization(40)
    print(f'Duration: {time.time() - start}s')
    # Duration: 6.866455078125e-05s
    

    6. Extended iterable unpacking (3.0+)

    解包的扩展

    head, *body, tail = range(5)
    print(head, body, tail)
    # 0, [1,2,3], 4
    
    py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
    print(py)
    print(filename)
    print(cmds)
    # python3.7
    # script.py
    # ['-n', '5', '-l', '15']
    
    first, _, third, *_ = range(8)
    print(first, third)
    # 0, 2
    

    7. Data classes (3.7+)

    数据类 , 官方描述为可改变的有默认值的命名元组

    class Armor:
        
        def __init__(self, armor: float, description: str, level: int = 1):
            self.armor = armor
            self.level = level
            self.description = description
                     
        def power(self) -> float:
            return self.armor * self.level
        
    armor = Armor(5.2, "Common armor.", 2)
    armor.power()
    # 10.4
    print(armor)
    # <__main__.Armor object at 0x7fc4800e2cf8>
    
    from dataclasses import dataclass
    
    @dataclass
    class Armor:
        armor: float
        description: str
        level: int=1
    
        def power(self) -> float:
            return self.armor * self.level
    
    armor = Armor(6, 'common armor.', 2)
    armor.power()
    # 12
    print(armor)
    # Armor(armor=6, description='common armor.', level=2)
    

    8. Implicit namespace packages (3.3+)

    盲目的包的命名空间
    定义一个包的方法是 init.py文件
    在现在不用每个子文件夹都要 init.py文件

    # 每个都有__init__.py
    sound/                          Top-level package
          __init__.py               Initialize the sound package
          formats/                  Subpackage for file format conversions
                  __init__.py
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  Subpackage for sound effects
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
                  ...
          filters/                  Subpackage for filters
                  __init__.py
                  equalizer.py
                  vocoder.py
                  karaoke.py
    
    sound/                          Top-level package
          __init__.py               Initialize the sound package
          formats/                  Subpackage for file format conversions
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  Subpackage for sound effects
                  echo.py
                  surround.py
                  reverse.py
                  ...
          filters/                  Subpackage for filters
                  equalizer.py
                  vocoder.py
                  karaoke.py
                  ...
    

    原文:https://datawhatnow.com/things-you-are-probably-not-using-in-python-3-but-should/

  • 相关阅读:
    动态更新活动条件
    使用本地服务异步执行自定义活动业务逻辑
    隐藏自定义复合活动的内部实现
    如何开发一个基本的复合活动
    HTML5性能之争 —— 单线程:缺点还是特点?
    CDNJS —— Web 上最快的 JavaScript 资源库
    Comfusion 4.1 发布,桌面 Linux 发行
    FreeBSD 9.1 正式版已经可以下载
    Squid Analyzer 5.0 发布,Squid日志统计
    MemSQL 1.8 发布,号称最快的关系数据库
  • 原文地址:https://www.cnblogs.com/bruspawn/p/10882607.html
Copyright © 2020-2023  润新知