请问 python 中 for [key] in iter( raw_input, "" ) 用法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
zeroday

请问 python 中 for [key] in iter( raw_input, "" ) 用法

  •  
  •   zeroday Jan 10, 2015 6613 views
    This topic created in 4125 days ago, the information mentioned may be changed or developed.

    在 MOOC 的 OJ上提交作业时,常常要求给定输入,然后给出相应的输出。

    直接在代码上写

    n = int( raw_input() ) print myFun( n ) 

    是不通过的

    后来参考了一下别人的代码,需要改为

    str = "" for i in iter( raw_input, str ): print myFun( i ) 

    才能通过。

    我猜测这段代码应该是只要输入不出错,就一直读取输入,然后输出,这样继续下去。
    类似于C中的

    while ( scanf( "%d", &n ) != EOF ) 

    对于这段代码

    str = "" for i in iter( raw_input, str ): print myFun( i ) 

    iter()参数内有一些不理解的地方,还请各位解惑。

    python 中的输入不是 raw_input(), 而这里怎么是 raw_input,少了两个圆括号呢?

    第二个参数""有什么含义呢?

    我试着改为[], 本机运行正确,但是在OJ上提交时,提示"程序异常,exit code非0"

    最后就是“程序异常,exit code非0”这是什么含义呢?有时候在本机上运行正确,但是提交到OJ上时就出现了这个错误。

    8 replies    2015-01-10 21:49:51 +08:00
    yakiang
        1
    yakiang  
       Jan 10, 2015   2
    iter(callable, sentinel) -> iterator
    Get an iterator from an object. The callable is called until it returns the sentinel.

    所以第一个参数是一个 callable 对象,这里就是函数名字就可以,加括号就是直接调用它了
    当这个callable返回的东西 == 第二个参数时退出
    猜测可能你不用空字符串就会导致 exit code 非 0
    artorius
        2
    artorius  
       Jan 10, 2015
    大数....
    zeroday
        3
    zeroday  
    OP
       Jan 10, 2015
    @yakiang 谢谢解答。参数填入`raw_input` 明白了。

    第二个参数是`""`,意味着不输入是吗?

    这个语句执行的是,

    对于每个输入的值i,做循环,直到i为空,即用户不输入,直接回车时,退出循环。是这样吗?
    hahastudio
        4
    hahastudio  
       Jan 10, 2015   1
    Python 这个世代的语言有一个重要的特性就是函数变成了一等公民,跟其他类型同等地位,所以你可以做到传递一个函数作为参数
    Python 自带文档,遇到不会的函数可以 help,比如 help("iter"),help("raw_input")
    你就会知道 raw_input 会去掉末尾的换行符 \n
    然后一个极不推荐的实践就是变量名使用 Python 自带的函数名、常量名,所以不要使用 str 作为变量名,你会失去 str()
    yakiang
        5
    yakiang  
       Jan 10, 2015
    @zeroday 就是这样
    20015jjw
        6
    20015jjw  
       Jan 10, 2015   2
    raw_input 这里是一个无argument的函数名称,iter做的工作就是生成一个iterator,然后这个iterator会一直call第一个argument所指向的方程(相当于raw_input()),然后这个iterator会在这个方程输出sentinel的时候停止。
    @hahastudio 提出不要使用str作为变量名非常对,因为str本身是保留的class名,一旦被替换,就不存在了。
    exit code 非 0 表示退出的时候报错了,至于是多少还要看他exit code是多少,一般0是指正常退出。
    zeroday
        7
    zeroday  
    OP
       Jan 10, 2015
    @hahastudio 谢谢了提醒,下次编码的时会注意用函数名做变量名的。

    help 命令很有用。
    zeroday
        8
    zeroday  
    OP
       Jan 10, 2015
    @20015jjw 哦,原来 iter 函数作用是这个。谢谢解惑了。
    About     Help     Advertise     Blog     API     FAQ     Solana     5180 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 89ms UTC 09:42 PVG 17:42 LAX 02:42 JFK 05:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86