shuffle함수 질문
455
작성한 질문수 1
처음 shuffle 함수를 사용할 때, C언어에서 하던 습관 그대로 mylist = shuffle(mylist)와 같이 작성했더니 typeError를 뱉더군요.
shuffle(mylist)와 같이 쓰면 제가 원하는대로, 변환된 값이 그대로 원래 리스트에 저장되더라구요. 아무래도 shuffle함수가 포인터로 직접 메모리를 건드리는 함수인 것 같은데,
궁금한 점은 "그럼 원래 코드는 뭐가 문제냐"입니다.
shuffle 함수는 반환값이 없어서 저렇게 자기할당시키려고 하면 문제가 생기는 건가요?
mylist를 인자로 전달 -> shuffle처리 -> shuffle된 mylist 뱉기 -> 그걸 mylist에 저장
이 구조라면 문제가 생길 이유가 없는 것 같은데...
mylist를 인자로 전달 -> mylist가 메모리에서 직접 shuffle됨. 뱉는 값 없음 -> None이나 null이 mylist에 저장되려고 함(이래서 에러가 생김) 이런 식인 건가요?
답변 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





