2013-10-01 3 views
5

여기 내 프로그램이 작동파이썬 : 내 함수는 내가 그것에

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

print (reverse("hello")) 

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

+1

[기능 목록에서 항목 반환]. Python] (http://stackoverflow.com/questions/18990977/return-items-from-list-in-function-python) – Freddie

답변

2

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

def add1(x): 
    return x+1 

def returnsNone(): 
    pass 

print(add1(2)) 
print(returnsNone()) 
+3

어떤 언어입니까? 이 정의들 중 어느 것도 유효한 파이썬 구문이 아닙니다. – Max

+0

@Max : 처음에는 콜론이 누락되었습니다 :) – hugomg

+1

@missingno : 그 뿐만이 아닙니다. 'end'는 파이썬에서 특별한 것을 의미하지 않습니다. – DSM

4

함수 반환 None을 None을 반환 할 것이다, 그래서 당신은 return backwards 명시 적으로도

, 당신은에 파이썬 방법을 사용한다 문제를 해결하십시오 :

letters[::-1] 
+0

이 문제를 해결하기위한 파이썬 방법을위한 upvoting. –

0

생각해 보면 이해할 수 있습니다. reverse은 아무 것도 반환하지 않으며 단지 결과 만 인쇄합니다. 그러나 print (reverse("hello"))이라고 쓰면 실제로 reverse이 반환하는 것을 인쇄하고 있습니다. 아무것도 반환하지 않으므로 None이 인쇄됩니다.

1

모든 함수는 을 파이썬으로 반환합니다. 명시 적으로 값을 반환하지 않으면 파이썬 함수가 None을 반환합니다.

print이 실제로 stdout으로 인쇄되기 때문에 함수가 실제로 아무 것도 반환하지 않지만 return은 실제로 값을 반환합니다. 그들은 일지도 모르지만은 REPL과 동일하지만 완전히 다릅니다.

return backwards 
0

그냥보십시오 :

reverse(hello) 

사실은 역의 반환 값을 인쇄하는

print reverse(hello) 

그래서, 당신의 문제를 해결 값을 반환합니다. 그 반환 값은 없음입니다.

조언 내가 당신에게 몇 가지 일반적인를 들어 보겠습니다 :

역을() 코드에서 부작용 (인쇄)를 가진 기능입니다. 또한

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

이 mantain하기 쉽고 아닌 경우입니다

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

을 : 당신이 필요) (반대를 가진를 인쇄하는 대신 단어를 반환 고려하지 않을 때 당신은 부작용 기능을 피해야한다 루프에 기능을 추가하면 감소 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 접근 방식보다 더 나은 확장 읽고 아마 더 빨리,하지만 더 큰 문자열을하지 않습니다. 말했다

, 더 파이썬은

letters[::-1] 

이미 나에게 일반적으로 훨씬 더 잘 작동보다 더 빨리 누군가에 의해 제안 및 파이썬 프로그래머 읽을 수 쉽게 접근한다.

0

앞에서 설명한대로. python 함수가 return 문을 발견하지 못하면 기본적으로 None을 인쇄합니다. 아래 그림과 같이 약간의 변경을하면 다음과 같이 수정됩니다.

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")) 
관련 문제