inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

퀴즈 #4

shuffle함수 질문

455

이다경

작성한 질문수 1

1

처음 shuffle 함수를 사용할 때, C언어에서 하던 습관 그대로 mylist = shuffle(mylist)와 같이 작성했더니 typeError를 뱉더군요.

shuffle(mylist)와 같이 쓰면 제가 원하는대로, 변환된 값이 그대로 원래 리스트에 저장되더라구요. 아무래도 shuffle함수가 포인터로 직접 메모리를 건드리는 함수인 것 같은데,

 

궁금한 점은 "그럼 원래 코드는 뭐가 문제냐"입니다.

shuffle 함수는 반환값이 없어서 저렇게 자기할당시키려고 하면 문제가 생기는 건가요?

mylist를 인자로 전달 -> shuffle처리 -> shuffle된 mylist 뱉기 -> 그걸 mylist에 저장

이 구조라면 문제가 생길 이유가 없는 것 같은데...

mylist를 인자로 전달 -> mylist가 메모리에서 직접 shuffle됨. 뱉는 값 없음 -> None이나 null이 mylist에 저장되려고 함(이래서 에러가 생김) 이런 식인 건가요?

python

답변 1

1

일코

마지막 줄에 하신 말씀이 맞습니다.

random.shuffle 함수는 연산 후 아무 것도 리턴하지 않습니다. ("뱉는 값 없음?"이라고 표현하셨는데, 정확합니다. random.shuffle 구현부에 return문이 없습니다. 파이썬에는 이렇게 리턴문이 없는 함수가 많습니다.)

아래는 random.shuffle 함수의 소스코드입니다.

    def shuffle(self, x):
        """Shuffle list x in place, and return None."""

        randbelow = self._randbelow
        for i in reversed(range(1, len(x))):
            # pick an element in x[:i+1] with which to exchange x[i]
            j = randbelow(i + 1)
            x[i], x[j] = x[j], x[i]

 

그래서, 함수가 무엇을 리턴하는지 숙지해둘 필요가 있습니다. 예를 들어 아래의 세 가지 코드는 전부 a가 None이 되어버립니다.

# 1: a가 None이 됨
>>> a = [1, 3, 2, 5, 4]
>>> a = a.sort()

# 2
>>> a = [1, 2, 3, 4, 5]
>>> a = a.reverse()

# 3
>>> a = [1, 2, 3, 4, 5]
>>> a = a.append(6)

 

quiz 8 오류 문제

0

74

1

str() 작성 위치

0

58

1

아나콘다

0

64

1

윈도우 설치 도와주세요

0

75

1

std_weight함수에서weight만return가능한가요?

0

70

1

오른쪽위 실행버튼을 누르면 터미널에 에러가 뜨고 컨트롤+F5를 누르면 에러가 안뜹니다.

0

38

1

설치해서 시작하는데 문제가 있습니다.

0

70

1

함수 입력할 때 설명 툴팁 나오게 하려면 어떻게 하나요?

0

113

1

2장 환경설정 문의

0

78

1

스타크래프트 프로젝트

0

77

1

python 파일명.py 입력시 Python 출력

0

137

1

로드맵 질문있습니다!

0

91

2

오류

0

75

1

질문 있습니다.

0

79

1

블로그에 학습한 내용을 정리해도 괜찮을까요?

0

174

1

#퀴즈 3의 5번 질문

0

72

1

print("ㅋ"*5) 에 대한 결과가 도출되지 않습니다

0

82

1

가변인자의 위치가 중요한가요?

0

81

1

vscode옛날 버전 설치

0

225

1

글자색상이 선생님처럼 안나옵니다

0

188

1

슬프네

0

156

1

quiz 6번 관련 문의입니다.

0

132

1

퀴즈#3에 대해서 이렇게 작성해도 되나요?

0

197

1

피드백 부탁드립니다

0

93

1