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

Python 有个语法一直没理解

  •  
  •   gdzzzyyy · 2017-12-09 11:36:07 +08:00 · 6577 次点击
    这是一个创建于 2544 天前的主题,其中的信息可能已经有所发展或是发生改变。

    def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] map2 = map(char2num, '13579') print(map2) 我知道字符串‘ 13579 ’是可以被迭代的。 问一下 第二行的[s]是什么意思??或者我该百度什么才能理解这句话??

    我知道这是字典的内容,我只是对 [ s ] 这么些很疑惑。

    lhx2008
        1
    lhx2008  
       2017-12-09 11:39:10 +08:00 via Android
    s 是 char2num 的参数,比如 s 是'2'就返回字典的'2',就是 2,再用 map 施加到每个字符
    还有楼主的排版要被喷了
    sagaxu
        2
    sagaxu  
       2017-12-09 11:39:45 +08:00
    x = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    x[s]
    lhx2008
        3
    lhx2008  
       2017-12-09 11:41:09 +08:00 via Android
    还不理解的话只能百度 pyhon 字典如何取出值,以及函数的参数
    misaka19000
        4
    misaka19000  
       2017-12-09 11:43:37 +08:00   ❤️ 3
    排版太烂不看
    newhuan
        5
    newhuan  
       2017-12-09 11:44:12 +08:00
    不会 python;不过 char2num 看起来是个函数,s 应该是个参数;{}是个对象字面量,[s]是取值操作;
    猜的 不过应该没错
    lhx2008
        6
    lhx2008  
       2017-12-09 11:44:46 +08:00 via Android
    或者再看看 map 是怎么把对象和函数进行交合的
    gdzzzyyy
        7
    gdzzzyyy  
    OP
       2017-12-09 11:53:30 +08:00
    @lhx2008 额 我其实已经排版过了
    我发出去就去工作了。。回来刷新一下发现错乱了。。。
    cyancat0525
        8
    cyancat0525  
       2017-12-09 11:53:48 +08:00 via Android   ❤️ 1
    你的排版让你错过很多好答案,比如我的
    gdzzzyyy
        9
    gdzzzyyy  
    OP
       2017-12-09 11:54:56 +08:00
    @sagaxu 明白了好像。这好奇葩啊 哈哈哈
    gdzzzyyy
        10
    gdzzzyyy  
    OP
       2017-12-09 11:55:13 +08:00
    @lhx2008 嗯嗯再去看看 这个语法很好玩
    DongDongXie
        11
    DongDongXie  
       2017-12-09 12:18:33 +08:00
    key 啊
    jyf
        12
    jyf  
       2017-12-09 12:44:42 +08:00
    这语法就是正常的字典取值
    其实他写成

    a = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return a[s]

    这样你就能理解了
    也不光是 python 其他几家脚本也是如此取值

    这种问题 可能不是你没仔细读教材 而是对字面量的 dict 不怎么熟悉造成的
    imn1
        13
    imn1  
       2017-12-09 13:08:35 +08:00
    (True, False)[1<0]
    这句能读懂不?
    gdzzzyyy
        14
    gdzzzyyy  
    OP
       2017-12-09 14:32:51 +08:00
    @jyf 谢谢了。看了上面和您的解答自己又看了一下具体语法,明白了。
    Kilerd
        15
    Kilerd  
       2017-12-09 15:14:58 +08:00
    map(lambda x: int(x), '1359')
    ballshapesdsd
        16
    ballshapesdsd  
       2017-12-09 15:22:46 +08:00
    @Kilerd map(int,'13579')
    Kobayashi
        17
    Kobayashi  
       2017-12-09 16:37:26 +08:00 via Android







    符号
    Osk
        18
    Osk  
       2017-12-09 16:43:45 +08:00
    楼主你需要这样处理下排版

    ```python

    your_code...

    ```
    Xiaobaixiao
        19
    Xiaobaixiao  
       2017-12-09 17:33:27 +08:00
    你可能是某个 XXX 教程的受害者
    如果没有其他语言基础,建议你老老实实买本书看。
    gdzzzyyy
        20
    gdzzzyyy  
    OP
       2017-12-09 18:01:08 +08:00
    @Xiaobaixiao 额 和其他语言没关把 我就是看这个{} [] 这么写没理解。
    求推荐一本书把 我刚接触 python 最近在看慕课教程和廖雪峰老师的教程
    Xiaobaixiao
        21
    Xiaobaixiao  
       2017-12-09 19:30:45 +08:00   ❤️ 1
    @gdzzzyyy
    强烈推荐《 Python 语言及其应用》
    那些 XXX 教程真不敢恭维,典型的教你 1+1=2,然后让你解个线性方程,真当每个学习者都拥有爱因斯坦的智商……
    那种东西写给自己看的还差不多,有说错话的地方,dalao 不要打我
    aaronzjw
        22
    aaronzjw  
       2017-12-09 20:19:08 +08:00
    搞好排版再来问,不会换行的话,好歹搞个 gist 啊
    likuku
        23
    likuku  
       2017-12-09 22:15:28 +08:00
    有空玩这些胡里花哨的东西,不如多写点东西解决你真实世界里遇到的问题。
    SingeeKing
        24
    SingeeKing  
       2017-12-09 22:22:26 +08:00
    所以为什么不直接用 map(int,'13579')
    aristotll
        25
    aristotll  
       2017-12-10 00:47:50 +08:00
    如果你会 clojure 理解就更简单了

    字典 也是一个 callable
    aristotll
        26
    aristotll  
       2017-12-10 00:50:19 +08:00
    当然 python 不是函数式编程所以 对字典 []语法糖应该是通过 函数 __getitem__实现的
    kkzxak47
        27
    kkzxak47  
       2017-12-10 01:49:24 +08:00 via Android
    如果这是书里写的,换一本书
    cy18
        28
    cy18  
       2017-12-10 09:56:18 +08:00 via Android
    书推荐 learning python
    edwardchor
        29
    edwardchor  
       2017-12-10 12:04:49 +08:00 via iPad   ❤️ 1
    更安全的语法是{}.get(key[, default]) 否则发现未定义的 key 会报错
    gdzzzyyy
        30
    gdzzzyyy  
    OP
       2017-12-10 15:02:34 +08:00
    @likuku。。。额 我就是在学啊 我看某上万点击的教学 看到了就问一下 也没啥不对吧
    gdzzzyyy
        31
    gdzzzyyy  
    OP
       2017-12-10 15:03:10 +08:00
    @kkzxak47 OK 换教程
    lichangqing93
        32
    lichangqing93  
       2017-12-10 15:08:35 +08:00 via iPhone
    把 map 对于对象和函数的交互搞明白应该就行了
    likuku
        33
    likuku  
       2017-12-10 19:09:57 +08:00
    @gdzzzyyy 于工具型语言来说,用不到就没必要去学了。

    当重构时再研究更好的玩法也是不错的选择。

    最近也碰巧在重构中遇到类似需求,最终选了 map + lambda 的方式。
    pythme
        34
    pythme  
       2017-12-10 19:31:10 +08:00
    不会换行吗,哇哈哈呃呃呃
    bravecarrot
        35
    bravecarrot  
       2017-12-10 22:57:39 +08:00 via iPhone
    lz 趁机看一波 map filter reduce ( py2 ) 和 lambda 的文档
    gdzzzyyy
        36
    gdzzzyyy  
    OP
       2017-12-11 01:01:13 +08:00
    @likuku 嗯嗯 明白了。谢谢了。确实很多东西是在实践中回去查文档。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5910 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:58 · PVG 10:58 · LAX 18:58 · JFK 21:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.