zoukankan      html  css  js  c++  java
  • Python 工匠:使用数字与字符串的技巧学习笔记

    #Python 工匠:使用数字与字符串的技巧学习笔记
    #https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-on-numbers-and-strings.md

    :使用 enum 枚举类型改善代码

    #避免如下代码
    def mark_trip_as_featured(trip):
        """将某个旅程添加到推荐栏目
        """
        if trip.source == 11:
            do_some_thing(trip)
        elif trip.source == 12:
            do_some_other_thing(trip)
        ... ...
        return
    
    
    #提倡如下代码
    from enum import IntEnum
    
    class TripSource(IntEnum):
        FROM_WEBSITE = 11
        FROM_IOS_CLIENT = 12
    
    
    def mark_trip_as_featured(trip):
        if trip.source == TripSource.FROM_WEBSITE:
            do_some_thing(trip)
        elif trip.source == TripSource.FROM_IOS_CLIENT:
            do_some_other_thing(trip)
        ... ...
        return

    :不必预计算字面量表达式

    #避免如下代码
    def f1(delta_seconds):
        # 如果时间已经过去了超过 11 天,不做任何事
        if delta_seconds > 950400:
            return 
        ...
    #提倡如下代码
    def f1(delta_seconds):
        if delta_seconds > 11 * 24 * 3600:
            return

    实用技巧

    1.布尔值其实也是“数字”
    ["Python", "Javascript"][2 > 1]
    'Javascript'
    
    
    [2>1]为True,True即1
    ["Python", "Javascript"][1]

    2.改善超长字符串的可读性

    使用括号将长字符串包起来,然后就可以随意折行了:

    def main():
        logger.info(("There is something really bad happened during the process. "
                     "Please contact your administrator."))


    可以用标准库 textwrap 来解决整段代码的缩进视觉效果

    from textwrap import dedent
    
    def main():
        if user.is_active:
            # dedent 将会缩进掉整段文字最左边的空字符串
            message = dedent("""
                Welcome, today's movie list:
                - Jaw (1975)
                - The Shining (1980)
                - Saw (2004)""")

    3.float("inf") 和 float("-inf") 它们俩分别对应着数学世界里的正负无穷大。当它们和任意数值进行比较时,满足这样的规律:float("-inf") < 任意数值 < float("inf")。

    因为它们有着这样的特点,我们可以在某些场景用上它们:

    # A. 根据年龄升序排序,没有提供年龄放在最后边
    >>> users = {"tom": 19, "jenny": 13, "jack": None, "andrew": 43}
    >>> sorted(users.keys(), key=lambda user: users.get(user) or float('inf'))
    ['jenny', 'tom', 'andrew', 'jack']
    
    # B. 作为循环初始值,简化第一次判断逻辑
    >>> max_num = float('-inf')
    >>> # 找到列表中最大的数字
    >>> for i in [23, 71, 3, 21, 8]:
    ...:    if i > max_num:
    ...:         max_num = i
    ...:
    >>> max_num
    71
  • 相关阅读:
    GridView
    母版页
    Ajax完整结构和删除
    Ajax1
    JQuery动画
    JQuery基础
    LinQ高级查询
    C#简单的学籍管理系统(数据库变更由原来的SQLserver改为SqLite)
    C#两个数只能进行+1,-1,*2操作。求使得两个数相等的最小步骤
    C#求最小公倍数与最大公约数
  • 原文地址:https://www.cnblogs.com/botoo/p/12048709.html
Copyright © 2011-2022 走看看