Trying to understand Python loop using underscore and input

后端 未结 4 2267
一整个雨季
一整个雨季 2020-12-14 10:33

One more tip - if anyone is learning Python on HackerRank, knowing this is critical for starting out.

I\'m trying to understand this code:

    stamps         


        
相关标签:
4条回答
  • 2020-12-14 10:54

    The underscore is like a normal variable in your program.

    0 讨论(0)
  • 2020-12-14 10:56

    ncoghlan's answer lists 3 conventional uses for _ in Python:

    1. To hold the result of the last executed statement in an interactive interpreter session. This precedent was set by the standard CPython interpreter, and other interpreters have followed suit
    2. For translation lookup in i18n (imported from the corresponding C conventions, I believe), as in code like:

      raise forms.ValidationError(_("Please enter a correct username"))`
      
    3. As a general purpose "throwaway" variable name to indicate that part of a function result is being deliberately ignored, as in code like:

       label, has_label, _ = text.partition(':')
      

    Your question is which one of these is being used in the example in your code. The answer would be that is a throwaway variable (case 3), but its contents are printed here for debugging purposes.

    It is however not a general Python convention to use _ as a loop variable if its value is used in any way. Thus you regularly might see:

     for _ in range(10):
         print("Hello world")
    

    where _ immediately signals the reader that the value is not important and it the loop is just repeated 10 times.

    However in a code such as

     for i in range(10):
         do_something(i)
    

    where the value of the loop variable is used, it is the convention to use a variable name such as i, j instead of _.

    0 讨论(0)
  • 2020-12-14 10:56

    For anyone that is trying to understand how underscore and input works in a loop - after spending quite sometime debugging and printing - here's the code that made me understand what was going on.

        for _ in range(int(raw_input())):
            print raw_input()
    

    User input:

        2
        Dog
        Cat
    

    Output:

        # no output despite entering 2, but 2 is set as range - loops 2 times
        Dog
        Cat
    

    Bonus - notice how there's an int() conversion for the first line in the for loop?

    The first input is 2, so int() converts that just fine. You can tell the first line of code is being ignored now because putting the second input, 'Dog', through int() would yield an error. Can't words into integer numbers.

    0 讨论(0)
  • 2020-12-14 11:18

    Your code

    stamps = set()
    for _ in range(int(raw_input())):
        print 'underscore is', _
        stamps.add(raw_input().strip())
        print stamps
    

    is exactly equivalent to this:

    how_many_loops = int(raw_input()) # asked only once.
    stamps = set()
    for i in range(how_many_loops):
        print 'loop count is', i
        stamps.add(raw_input().strip())
        print stamps
    

    Because whatever you put in range() has to be calculated before the loop starts, so the first int(raw_input()) is asked only once. If you use something like for i in range(very_expensive_list) it will take a bunch of time then start the loop.

    0 讨论(0)
提交回复
热议问题