복붙노트

[PYTHON] 파이썬 : 내 함수는 "무효"를 반환합니다.

PYTHON

파이썬 : 내 함수는 "무효"를 반환합니다.

여기 내 프로그램이있다.

def reverse(letters):
    backwards = ""
    i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
        i = i - 1
    print (backwards)

print (reverse("hello"))

작동하면 "olleh"가 출력되지만 이후에는 "None"이 새 행에 인쇄됩니다. 그리고 나는 이것이 왜 있는지 묻습니다. 분명히 프로그램은 단어를 뒤집을 것이고, 코드는 작동하며, 아무 것도 출력하지 않는 함수가 없으므로, 왜 함수에서 작동하는지 알지 못합니다. 이것은 다른 큰 프로그램에서 사용되고 있기 때문에 함수로 사용해야하고 학교용이므로 .reverse () 함수를 사용하는 것이 허용되지 않습니다. 그래서 나는 가능한 한 큰 변화보다는이 코드를 고정시켜야합니다.

해결법

  1. ==============================

    1.함수는 기본적으로 없음을 반환하므로 명시 적으로 뒤로 돌아와야합니다.

    함수는 기본적으로 없음을 반환하므로 명시 적으로 뒤로 돌아와야합니다.

    또한 파이썬 방법을 사용하여 문제를 해결할 수 있습니다.

    letters[::-1]
    
  2. ==============================

    2.return 문을 사용하여 값을 반환하는 함수를 종료 할 수 있습니다. 함수가 return 문에 도달하지 않고 끝에 도달하면 기본적으로 없음을 반환합니다.

    return 문을 사용하여 값을 반환하는 함수를 종료 할 수 있습니다. 함수가 return 문에 도달하지 않고 끝에 도달하면 기본적으로 없음을 반환합니다.

    def add1(x):
       return x+1
    
    def returnsNone():
       pass
    
    print(add1(2))
    print(returnsNone())
    
  3. ==============================

    3.모든 함수는 파이썬에서 무엇인가를 반환합니다. 명시 적으로 값을 반환하지 않으면 파이썬은 함수에 없음을 반환합니다.

    모든 함수는 파이썬에서 무엇인가를 반환합니다. 명시 적으로 값을 반환하지 않으면 파이썬은 함수에 없음을 반환합니다.

    반환 값은 실제로 값을 반환하는 반면 print는 stdout으로 출력하기 때문에 함수는 실제로 아무 것도 반환하지 않습니다. 그들은 REPL에서 동일하게 보일지도 모르지만 완전히 다릅니다.

    따라서 문제를 해결하려면 값을 반환하십시오.

    return backwards
    
  4. ==============================

    4.생각해 보면 이해가됩니다. 당신의 반대로 아무것도 반환하지 않습니다 - 그냥 결과를 인쇄합니다. 그러나 당신이 print (reverse ( "hello"))를 쓸 때 실제로 reverse가 반환하는 것을 인쇄하고있다. 아무 것도 반환하지 않으므로 None이 인쇄됩니다.

    생각해 보면 이해가됩니다. 당신의 반대로 아무것도 반환하지 않습니다 - 그냥 결과를 인쇄합니다. 그러나 당신이 print (reverse ( "hello"))를 쓸 때 실제로 reverse가 반환하는 것을 인쇄하고있다. 아무 것도 반환하지 않으므로 None이 인쇄됩니다.

  5. ==============================

    5.다음을 시도하십시오.

    다음을 시도하십시오.

     reverse(hello) 
    

    사실

    print reverse(hello) 
    

    당신은 반전의 반환 값을 인쇄하고 있습니다. 그 반환 값은 없음입니다.

    몇 가지 일반적인 조언을 드리겠습니다.

    reverse ()는 부작용 (인쇄) 기능이 있습니다. 너는 피해야한다. 당신이 필요하지 않을 때 부작용이있는 함수는 그것을 인쇄하는 대신 reverse ()를 사용하여 단어를 반환하는 것을 고려하십시오 :

    def reverse(letters):
        backwards = ""
        i = len(letters) - 1
        while i >= 0:
            backwards = backwards + letters[i]
            i = i - 1
        return backwards
    print (reverse("hello"))
    

    그 위에

    i = len(letters) - 1
        while i >= 0:
            backwards = backwards + letters[i]
            i = i - 1
    

    mantain은 쉽지 않습니다. 루프에 기능을 추가하면 감소하는 i = i-1은 '개념적으로'있어야하는 곳에서 멀리 떨어져있을 것입니다. 수표와 함께 감소하는 것을 선호해야합니다.

    for i in xrange(len(letters)-1,-1,-1): 
        backwards = backwards + letters[i] 
    

    나는 게으르다. 쓸 때

    myString = myString + fewChars
    

    그래서 나는 네가 게으르다는 것을 이해할 수있다. 그러나 fewChars를 추가하는 것은 myString을 수정하지 않고 새로운 문자열을 만듭니다. 반복적으로 많은 문자를 추가하는 경우 가장 효율적인 방법은 하나씩 추가하는 것입니다. join () 사용을 고려하십시오. 예를 들어

    letters = 'word'
    lettersList = [letters[i] for i in xrange(len(letters)-1,-1,-1)]
    myReversed ''.join(lettersList)
    

    알았어. 나는 동의하지 않는다. 아마 더 빠르지도 모르겠지만, 큰 문자열의 경우 newString = oldString + oneChar 접근 방식보다 잘 확장된다.

    즉, 더 pythonic 접근했다

    letters[::-1] 
    

    이미 나보다 빠른 누군가가 제안한 것은 일반적으로 훨씬 잘 작동하며 파이썬 프로그래머가 쉽게 읽을 수 있습니다.

  6. ==============================

    6.앞서 언급 한 바와 같이. python 함수가 return 문을 찾지 못하면 기본적으로 없음을 인쇄합니다. 아래 그림과 같이 약간의 변경을하면 다음과 같이 수정됩니다.

    앞서 언급 한 바와 같이. python 함수가 return 문을 찾지 못하면 기본적으로 없음을 인쇄합니다. 아래 그림과 같이 약간의 변경을하면 다음과 같이 수정됩니다.

    def reverse(letters):
        backwards = ""
        i = len(letters) - 1
        while i >= 0:
            backwards = backwards + letters[i]
        i = i - 1
        return(backwards)  # instead of print(backwards)
    
    print(reverse("hello"))
    
  7. from https://stackoverflow.com/questions/19105961/python-my-function-returns-none-after-it-does-what-i-want-it-to by cc-by-sa and MIT license