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
whalegia
V2EX  ›  Python

[与 0x01 做 AND 运算]和 [判断是否等于 1 ] 在 Pyhton 中的区别?

  •  
  •   whalegia · 2014-11-13 04:06:17 +08:00 · 3997 次点击
    这是一个创建于 3659 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 Python ,看别人的代码经常发现类似:

    1. total = m + n # m 和 n 都是整型
    2. if total & 0x01:
    3. pass


    这样的代码。我想请问一下,这种做 And 运算的方式和判定是否等于 1 有区别嘛?为什么要这样写呢?可以避免什么 bug 嘛?
    第 1 条附言  ·  2014-11-13 07:19:42 +08:00
    谢谢大家!然后请大神不要走…… /拽衣角

    我还有一个问题……(orz…… 弱弱的……)

    请问这种定义方法是怎么读的?

    1. numLen, res, dict = len(num), set(), {} #?????????

    来源于: http://www.cnblogs.com/zuoyuan/p/3699384.html
    22 条回复    2014-11-15 09:00:26 +08:00
    Sunyanzi
        1
    Sunyanzi  
       2014-11-13 04:23:43 +08:00   ❤️ 1
    区别大了 ... 这是在判断是否是奇数 ...

    不过说起来我更好奇的是 ... 你是怎么认为这是在判断是否等于 1 的 ..?
    whalegia
        2
    whalegia  
    OP
       2014-11-13 04:32:29 +08:00
    @Sunyanzi 噢这样啊,我想偏了……就是不是 AND 两边都为 1 才为真嘛。所以下意识就觉得,哈哈哈。。。
    whalegia
        3
    whalegia  
    OP
       2014-11-13 04:34:20 +08:00
    @Sunyanzi 哎呀好丢人,V2EX 可不可以删贴。
    CupTools
        4
    CupTools  
       2014-11-13 05:48:11 +08:00
    @whalegia 不丢人,不耻下问才会有进步
    blacktulip
        5
    blacktulip  
       2014-11-13 06:19:16 +08:00
    @CupTools 不耻下问...
    Sunyanzi
        6
    Sunyanzi  
       2014-11-13 06:22:50 +08:00   ❤️ 1
    @whalegia & 不是 and 哟 ... 虽然都是与 ...

    但 & 是按位与 ... and 是逻辑与 ... 还是有本质的区别哒 ...
    zxy
        7
    zxy  
       2014-11-13 06:45:55 +08:00 via iPhone
    刚醒来,结果也把&当作&&读了,感谢楼上
    dreampuf
        8
    dreampuf  
       2014-11-13 07:09:52 +08:00   ❤️ 1
    区别大了

    In [115]: dis.disassemble(compile("total & 0x01", "__file__", "single"))
    1 0 LOAD_NAME 0 (total)
    3 LOAD_CONST 0 (1)
    6 BINARY_AND
    7 PRINT_EXPR
    8 LOAD_CONST 1 (None)
    11 RETURN_VALUE

    In [116]: dis.disassemble(compile("total == 1", "__file__", "single"))
    1 0 LOAD_NAME 0 (total)
    3 LOAD_CONST 0 (1)
    6 COMPARE_OP 2 (==)
    9 PRINT_EXPR
    10 LOAD_CONST 1 (None)
    13 RETURN_VALUE

    In [117]: dis.disassemble(compile("total and 1", "__file__", "single"))
    1 0 LOAD_NAME 0 (total)
    3 JUMP_IF_FALSE_OR_POP 9
    6 LOAD_CONST 0 (1)
    >> 9 PRINT_EXPR
    10 LOAD_CONST 1 (None)
    13 RETURN_VALUE
    staticor
        9
    staticor  
       2014-11-13 07:58:59 +08:00   ❤️ 1
    multi-assignment 其实可以理解为定义了一个 "namedtuple" = tuple

    name, height = "mike", "78kg"

    ==>

    (name, height) = ("mike", "78kg")


    可以分别试试
    a = 1, 2

    a = (1, 2)
    查看得到的a 类型
    whalegia
        10
    whalegia  
    OP
       2014-11-13 08:11:03 +08:00
    @staticor 谢谢!

    我解释一下您看对吗:
    他这里其实是定义了一堆变量,
    1、numLen 是 num 的长度,为整型
    2、res 是一个 tuple,还没有值
    3、dict 是一个字典,为空
    4、然后这三个东西在一起又是一个 tuple:(numLen, res, dict),像这样??


    我试了 a = 1, 2 和 a = (1, 2),打印出来两个是一样的。所以 tuple 定义的时候可以没有括号啊原来。
    cloud107202
        11
    cloud107202  
       2014-11-13 09:32:15 +08:00
    不耻下问。。楼主赶快去查查词典,以后可别在重要场合搞错这个成语
    staticor
        12
    staticor  
       2014-11-13 09:37:42 +08:00   ❤️ 1
    @whalegia 理论上可以这样做的.
    不过我建议自己写时还是把同类型的一起赋值吧.
    要注意两边的个数问题.
    a, b = 2 #not match Typeerror
    a, b = 1, 2 3 # too many values, valueError

    可以用 a, *b = 1,2,3
    这也是*的一个实用的地方了.
    whalegia
        13
    whalegia  
    OP
       2014-11-13 09:43:55 +08:00
    @staticor 多谢!
    msg7086
        14
    msg7086  
       2014-11-13 11:53:37 +08:00
    @CupTools 赶快去查查词典,以后可别在重要场合搞错这个成语

    @cloud107202 楼主躺枪
    cloud107202
        15
    cloud107202  
       2014-11-13 12:14:51 +08:00
    @msg7086 ^_^
    CupTools
        16
    CupTools  
       2014-11-13 13:24:10 +08:00
    @msg7086 @whalegia 我初中没毕业
    O14
        17
    O14  
       2014-11-13 14:48:47 +08:00 via Android
    楼主学Python,还是搜一下看《简明Python教程》吧
    ryd994
        18
    ryd994  
       2014-11-13 15:07:03 +08:00
    那和%2比呢?
    @Sunyanzi
    forreal
        19
    forreal  
       2014-11-13 20:08:40 +08:00
    gao
    Sunyanzi
        20
    Sunyanzi  
       2014-11-13 21:05:23 +08:00
    @ryd994 & 1 和 % 2 虽然实现原理大相径庭但结果是一样的 ... 殊途同归的感觉 ..?
    whalegia
        21
    whalegia  
    OP
       2014-11-14 02:08:10 +08:00
    @msg7086 躺枪小事儿。谢谢lol
    @CupTools 没事儿国外待久用词是会有些犹豫。我英文也说得乱七八糟的。
    @Sunyanzi 大神能否私一个联系方式……
    Sunyanzi
        22
    Sunyanzi  
       2014-11-15 09:00:26 +08:00
    @whalegia V2 这种光明正大的地方怎么会有私信功能啦 ...

    以及我的联系方式在 V2 留过好多次啦 ... 挖掘一下能挖出来哒 ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:29 · PVG 06:29 · LAX 14:29 · JFK 17:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.