zoukankan      html  css  js  c++  java
  • 【python3基础】python3 神坑笔记

    os 篇

    os.listdir(path)

    以下代码在 windows 和 linux 上跑结果会不一样:

    import os
    
    path = 'wuliytTaotao'
    if not os.path.exists(path):
        os.mkdir(path)
    
    # 创建22个文件
    for i in range(22):
        f = open(os.path.join(path, 'file_%02d.txt' % i), 'w')
        f.write(str(i))
        f.close()
    
    print(os.listdir(path))            # 在 windows 和 linux 上结果不一样,windows 上有序,而 linux 上无序
    print(sorted(os.listdir(path)))    # 在 windows 和 linux 上排序后的结果一样
    

    linux上的结果:

    运算符篇

    is vs. ==

    is 判断两个对象是不是同一个 id,而 == 判断两个对象的内容是否相等。判断两个对象(int、str 等)的内容是否相等,用 == 更加保险。

    实例 1:判断两个整数相等

    判断两个整数是否分别相等,用 is 可能会产生一些问题。python3 的整数常量池的范围是 [-5, 256]。用解释器一行一行执行如下程序 is 会有问题,用脚本执行就没问题:

    a = 1
    b = 1
    a == b    # True
    a is b    # True
    c = 1234
    d = 1234
    c == d    # True
    c is d    # False
    

    实例 2:argparse 传参

    运行如下程序,is 的行为在执行脚本时是否传入参数也有区别。(将如下程序保存到 tmp.py 文件中,python tmp.pypython tmp.py -b handsome 分别执行,结果不一样)

    import argparse
    
    parser = argparse.ArgumentParser()
    
    parser.add_argument("-b", "--boy",
                        dest="boy", type=str, default="handsome")
    
    args = parser.parse_args()
    print(args)
    
    boy = args.boy
    
    print(boy is 'handsome')
    print(boy == 'handsome')
    

    实例 3:np.where

    在使用 np.where 判断时,一定不能使用 is。

    import numpy as np
    
    a = np.array([True, False, False, True])
    
    print(np.where(a == True))    # (array([0, 3]),)
    print(np.where(a is True))    # (array([], dtype=int64),)
    

    命令行参数篇

    argparse 在解析 bool 参数时,如果按照 parser.add_argument('-a', dest='a', type=bool, default=True)解析参数 a,那么命令行中 -a False-a True 返回都是 True,而取不到 False。

    详情请见:【python3基础】命令行参数及 argparse - wuliytTaotao

    References

    谈谈Python的常量池 -- resolvewang
    python3 常量池

  • 相关阅读:
    day06 tar命令使用,vim简单操作以及linux开机过程
    day05 创建用户过程、文件夹,文件等权限修改等
    简单算法
    day04
    day03
    Vim常用快捷键
    day02
    ssh注解开发
    spring07 JDBC
    spring06Aop
  • 原文地址:https://www.cnblogs.com/wuliytTaotao/p/11136620.html
Copyright © 2011-2022 走看看