본문 바로가기

파이썬/자주하는 질문20

파이썬(Python) 전역변수 함수에서 접근방법 파이썬 전역변수(global variable)를 함수에서 접근하기 위해서는 함수내에서 명시적으로 global 키워드를 사용해서 선언을 해주어야 합니다. my_name = "J Builder" def change_name(): global my_name my_name += "!!!" change_name() print(my_name) # J Builder!!! 만약 global 키워드를 사용하여 선언하지 않는다면 함수 내에서 해당 변수에 수정하는 사항들은 반영되지 않습니다. 정확히는 함수내에 있는 변수는 함수 안에서만 영향력을 갖는 지역변수로써 전역변수와는 다른 또 다른 변수가 되는것이죠. my_name = "J Builder" def change_name(): my_name += "!!!"# 여기서 my.. 2020. 9. 10.
파이썬(Python) 리스트 for 루프 중(iteration) 특정 아이템 제거하기 리스트(list)를 for나 while로 iteration 하는 도중에 특정 아이템을 제거하고자 할때는 아래와 같이 list comprehension 을 사용하면 됩니다. mylist = [x for x in mylist if check_if_valid(x)] 아래 예제 코드로 확인해 볼께요. 이 예제는, 리스트를 순회하면서 음수들을 제거하는 코드입니다. # 아이템 x가 0 또는 양수면 True, 음수면 False 반환 def check_if_valid(x): if x >=0: return True return False mylist = [-1, 2, 10, -100, 0, 5, 7, -3] mylist = [x for x in mylist if check_if_valid(x)] print(mylist).. 2020. 9. 10.
파이썬(Python) 함수 참조에 의한 호출? C와 같은 언어에선 함수 호출 시 인자로 포인터를 넘겨서 참조(reference)를 가져올 수 있습니다. 이런 개념에 익숙하다면 파이썬에서의 함수 호출 시 인자가 '값에 의한 호출(call by value)'인지 '참조에 의한 호출(call by reference)'인지 헷갈릴 때가 많습니다. 이럴 때는 딱 한가지만 기억하세요. 파이썬은 '할당에 의한 전달(pass by assignment)' 이다. 먼저 함수를 사용하지 않는 아래 예제부터 먼저 볼께요. 변수값이 함수내에서 수정이 가능한지 확인하기 위해서 mutable 타입인 리스트(list)를 사용해 보겠습니다. a = [1, 2, 3] # 리스트(list) [1, 2, 3]을 a에 할당 했습니다. a는 리스트 [1, 2, 3]을 가리키게 되죠 b =.. 2020. 9. 10.
파이썬(Python) 2차원 리스트 합치기 2차원 리스트의 아이템들을 모두 합쳐서 1차원 리스트를 만드는 방법에 대해서 알아볼께요. 만약 아래과 같은 리스트가 있다면 list_2d = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] # 위의 2차원 리스트를 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 처럼 다 합치고 싶은거죠. itertools 모듈을 사용하면 쉽게 1차원 리스트로 만들 수 있습니다. import itertools list_2d = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] merged = list(itertools.chain.from_iterable(list_2d)) print(merged) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,.. 2020. 9. 9.
파이썬(Python) 리스트 복사하기 파이썬(Python)으로 코딩할 때 가끔씩 리스트를 복사할 일이 생깁니다. 하지만 주의하지 않으면 오류를 만들어 디버깅을 힘들게 할 수 도 있습니다. 즉, 아래와 같이 새로운 리스트에 기존 리스트를 할당해 버리면 실제로 복사가 일어나지 않고 새로운 리스트는 기존 리스트를 참조하게 됩니다. 그래서 기존 리스트의 값을 변경해주면 새로운 리스트의 값 역시 바뀌게 되죠. old_list = [0, 1, 2, 3] new_list = old_list print(new_list) # [0, 1, 2, 3] old_list[0] = 10 print(new_list) # [10, 1, 2, 3] 실제로 독립된 두개의 리스트를 갖기 위해서는 아래와 같은 방법들로 가능합니다. 먼저, 제가 선호하는 방법인 슬라이싱으로 복사.. 2020. 9. 9.
파이썬(Python) 사용자 키보드 입력받는 방법 파이썬 프로그램을 하다보면 종종 사용자의 입력을 받아서 로직을 처리해야 하는 경우가 있습니다. 그럴때는 input() 함수를 사용하면 됩니다. 사용자의 나이를 입력으로 받는 예제코드 입니다. def validate(age): if age < 0: return False return True while True: try: age = int(input("Please enter your age: ")) if validate(age): break else: print("Age should not be less than 0.") except ValueError: print("Invalid input.") 코드 설명을 드리면, 입력값이 양수만 가능하기 때문에 input()에서 받은 사용자 입력값을 int 형으로 변.. 2020. 9. 8.