V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

if a in [1, 2, 3] 这样写符合规范吗?

  •  
  •   miniyao · 2017-09-09 19:32:14 +08:00 · 3570 次点击
    这是一个创建于 2421 天前的主题,其中的信息可能已经有所发展或是发生改变。

    a 这个变量的类型,可能是字符串,也可能是整数,要判断 a 是不是在一个整数列表中,直接这样写:

    if a in [1, 2, 3]:
        pass
    

    虽然系统不报错,是否符合 Python 规范? 有没有必要在这之前判断 a 是否 int 或 str ?

    10 条回复    2017-09-11 10:18:09 +08:00
    Meli55a
        1
    Meli55a  
       2017-09-09 19:44:56 +08:00   ❤️ 1
    肯定不用,你只是判断 a 是不是在 list 中,这跟 a 是什么类型一点关系都没有,
    ```python
    In [2]: lst = [1, 2, 3, "4"]

    In [3]: for a in lst:
    ...: print type(a)
    ...:
    <type 'int'>
    <type 'int'>
    <type 'int'>
    <type 'str'>
    ```

    就好比说,你是不是中国人,跟你是哪里的人、男人女人都没关系
    kkzxak47
        2
    kkzxak47  
       2017-09-09 19:55:50 +08:00   ❤️ 2
    不存在你想象中的规范,只看符不符合你的意图。
    数组里的元素可以是不同类型,a 也可以是任何类型,都是合法的。
    lxy
        3
    lxy  
       2017-09-09 20:19:33 +08:00   ❤️ 1
    有个需要注意的细节。被坑过一次。
    False == 0
    所以 False in [0, ] 会返回 True
    yemenchun1
        4
    yemenchun1  
       2017-09-09 20:43:52 +08:00 via iPhone
    语法上看 没问题
    NoAnyLove
        5
    NoAnyLove  
       2017-09-09 22:38:56 +08:00
    如果整数列表比较大,并且经常使用的话,推荐用变量保存一个 set
    scriptB0y
        6
    scriptB0y  
       2017-09-10 12:24:02 +08:00
    没问题,符合规范,不用检查。

    但是用 tuple 更快一点,
    ```
    if a in (1,2,3):
    pass
    ```
    NoAnyLove
        7
    NoAnyLove  
       2017-09-10 22:28:18 +08:00
    @scriptB0y 为什么用 tuple 回更快?
    ryd994
        8
    ryd994  
       2017-09-10 23:17:43 +08:00 via Android
    @NoAnyLove tuple 不可变,适合用于常量
    scriptB0y
        9
    scriptB0y  
       2017-09-10 23:26:20 +08:00   ❤️ 1
    flyingghost
        10
    flyingghost  
       2017-09-11 10:18:09 +08:00
    @lxy 没毛病,Python 的 in 用的是==比较。
    >>> a = [1]
    >>> b = a[:]
    >>> b is a
    False
    >>> c = [a,a]
    >>> a in c
    True
    >>> b in c
    True
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   979 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:35 · PVG 06:35 · LAX 15:35 · JFK 18:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.