python 知识点笔记

注意点1:
def
bare_except(): while True: try: s = input("Input a number: ") x = int(s) break except: # oops! can't CTRL-C to exit print("Not a number, try again") 这样会捕捉所有异常,导致按下 CTRL-C 程序都不会终止,调整后的做法是 def bare_except(): while True: try: s = input("Input a number: ")
x = int(s)
break
        except Exception:  # 比这更好的是用 ValueError
            print("Not a number, try again")
注意点2:
如果函数参数使用可变对象,那么下次调用时可能会产生非预期结果,坏的做法def mutable_default_arguments():
    def append(n, l=[]):
        l.append(n)
        return l

    l1 = append(0)  # [0]
    l2 = append(1)  # [0, 1]
调整后的做法,如下:

def mutable_default_arguments():

    def append(n, l=None):
        if l is None:
            l = []
        l.append(n)
        return l

    l1 = append(0)  # [0]
    l2 = append(1)  # [1]
注意点3:
使用 time.time() 统计耗时坏的做法def timing_with_time():
    start = time.time()
    time.sleep(1)
    end = time.time()
    print(end - start)
调整后的做法是使用 time.perf_counter(),更精确:def timing_with_time():
   # more accurate
    start = time.perf_counter()
    time.sleep(1)
    end = time.perf_counter()
    print(end - start)

注意点4:

坏的做法

subprocess.run(["ls -l"], capture_output=True, shell=True)

如果 shell=True,则将 ls -l 传递给/bin/sh(shell) 而不是 Unix 上的 ls 程序,会导致 subprocess 产生一个中间 shell 进程, 换句话说,使用中间 shell 意味着在命令运行之前,命令字符串中的变量、glob 模式和其他特殊的 shell 功能都会被预处理。比如,$HOME 会在在执行 echo 命令之前被处理处理。

调整后的做法是拒绝从 shell 执行,如下:

subprocess.run(["ls", "-l"], capture_output=True)
注意点5:多用numpy来提高性能
坏的做法def not_using_numpy_pandas():
    x = list(range(100))
    y = list(range(100))
    s = [a + b for a, b in zip(x, y)]
调整后的的做法,如下:import numpy as np
def not_using_numpy_pandas():
    # 性能更快
    x = np.arange(100)
    y = np.arange(100)
    s = x + y

 

 
posted @ 2021-12-10 11:02  15375357604  阅读(27)  评论(0编辑  收藏  举报