본문 바로가기
IT 개인학습/Python

Python 함수

by kiimy 2021. 7. 18.
728x90
728x90

Python

- 다른 언어에 비해 구현상의 복잡합이 적은 편이지만 데이터 처리량이 많을 때는 꼭 메모리 제한을 고려해야한다. But 코테에서 이러한 문제는 드물다.

데이터의 개수(리스트의 길이) 메모리 사용량
1,000 약 4 KB
1,000,000 약 4 MB
10,000,000 약 40MB

 

  • 기본 자료형(문자열, 숫자, bool) 등은 특정 하나의 값을 사용한다.
  • 컬렉션은 말 그대로 여러 개의 값을 저장할 수 있음

* 리스트는 동적이다.

  • 동적이라 함은 메소드를 사용해 값을 추가하거나 제거가능
  • 튜플과의 차이점 : 리스트는 메소드를 활용하여 값 수정가능.
  • 딕셔너리와 차이점 : 인덱스를 기반으로 값을 저장하고 수정할 수 있다.
  • 파이썬 리스트는 탐색, 삽입, 삭제와 같은 연산에 대한 메소드를 갖고 있으므로 단순 자료형이 아닌 자료구조의 형태를 취한다.
  • 리스트는 프로그래밍에서 기본적으로 사용되는 값을 여러개 저장할 수 있는 기능인 배열의 기능 또한 갖고 있다.

파이썬에서는 인수들이 참조로 함수에 전달이 됩니다. 즉, 객체의 주소값을 전달한다는 뜻

=> 참조로 전달되지만 immutable, 즉 변경이 불가한, 객체들은 값으로 전달

인수 arguments

  • 필수 인수 (required arguments): 위치를 지키며 전달되는 인수
  • 키워드 인수 (keyword arguments): 파라미터 이름을 사용해 전달되는 인수
  • 기본 인수 (default arguments): 파라미터에서 기본으로 사용되는 값

인수, 매개변수 parameter

출처 - 모던 자바스크립트 Deep dive

  • 매개변수(Parameter)는 외부로부터 받아들이는 임의의 값을 의미한다.
  • 인수(Argument)는 함수를 호출할 때 사용하게 되는 일련의 값들이다.
# 필수인수

def person_info(first_name, last_name):
    print(f"Hello {first_name}, {last_name}!")
    
## 순서를 지켜야하며 함수에서 파라미터로 정의했기 때문에 필수로 넘겨야함
## 그렇지 않으면 TypeError

# 키워드 인수

person_info(last_name="bob", first_name="sponge")

# 기본인수

def person_data(name, type_p='human'):
    print(f"Hello {name}, you are {type_p}")

## 함수에서 받게 되는 파라미터 값들에 대한 기본 값들을 설정하게 된다면 인수를 
## 넘기지 않는 경우 기본값들이 설정
## ==> 기본 값으로 설정된 파라미터들은 기본값이 없는 파라미터 뒤에 등장해야함
## ==> 그렇지 않으면 SyntaxError
  • 리스트 메소드
  • 튜플 메소드
  • 딕셔너리 메소드

setdeafult()

setdeafult() 메서드는 지정된 키가 있으면 해당 값을 내주고, 없는 키가 지정되면 맨 뒤에 추가합니다.

이때 추가되는 값은 None이 기본값이며, 따로 지정할 수도 있습니다.

>>> da = {1: 11, 3: 33}
>>> da.setdefault(1)
11
>>> print(da.setdefault(2))
None
>>> print(da.setdefault(4, 44))
44
>>> da
{1: 11, 3: 33, 2: None, 4: 44}

 

zip( )

* 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 터플의 형태로 

  차례로 접근할 수 있는 반복자(iterator)를 반환

 

* zip() 함수를 사용하면 마치 옷의 지퍼를 올리는 것 처럼 양 측에 있는 데이터를 하나씩 차례로 짝을 지어준다.

* 길이가 맞지 않으면 두번째 인자의 길이까지만 출력됨(= 다 나오게 하고 싶다면, zip_longest 사용)

# zip()

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

# zip ==> index로 설명 

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for i in range(3):
...     pair = (numbers[i], letters[i])
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B"]
>>> for i in range(3):
...     pair = (numbers[i], letters[i])
...     print(pair)
...

(1, 'A')
(2, 'B')

enumerate

반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있다. 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환

>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)

 

getattr(object, name[, default])

이름에 해당하는 객체 속성의 값을 가져오는 Build-in 함수

class Point:
    def __init__(self):
        self.x = 10
        self.y = 20

p = Point()

print( getattr(p, 'x') )          # 10
print( getattr(p, 'z', 'Hello') ) # Hello
print( getattr(p, 'a') )          # ❌ Error

popitem()

popitem() 메서드는 맨 오른쪽 요소를 뽑아내 2-튜플 형태로 내줍니다.

>>> da = {1: 11, 3: 33}
>>> da.popitem()
(3, 33)
>>> da
{1: 11}

Values, keys()

# keys

>>> da = {1: 11, 3: 33, 5: 55}
>>> da.keys()
dict_keys([1, 3, 5])
>>> print(list(da.keys()))
[1, 3, 5]

# values

>>> da = {1: 11, 3: 33, 5: 55}
>>> da.values()
dict_values([11, 33, 55])
>>> print(list(da.values()))
[11, 33, 55]

items() ==> 2-튜플 형태의 dict_items(...) 객체

popitem = 맨뒤에 것을 추출

>>> da = {1: 11, 3: 33, 5: 55}
>>> da.items()
dict_items([(1, 11), (3, 33), (5, 55)])
>>> print(list(da.items()))
[(1, 11), (3, 33), (5, 55)]

 

is , == 의 차이

  • is는 변수가 같은 Object(객체)를 가리키면 True
  • ==는 변수가 같은 Value(값)을 가지면 True
# is

>>> a = [1,2,3]
>>> b = a
>>> c = [1,2,3]
>>> a is b
True
>>> a is c
False

# ==

>>> a = [1,2,3]
>>> b = a
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True

return , print

* print
그저 값을 출력할 뿐, 컴퓨터가 이 값을 가지고 무얼 하진 못한다.

변수가 어떤 값을 가지는지 사용자 측에서 편하게 보기 위함이지 함수에는 전혀 영향을 끼치지 않는다.

* return
함수가 값을 반환하는 가장 주된 방법이다.
모든 함수는 어떠한 값을 return하며, 이 return(혹은 yield)이 명시되어 있지 않은 경우에는 

None을 return한다.

이 반환된 값은 다른 함수에서 사용될 수 있으며 변수에 저장될 수도 있다.

참조 : https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html

 

[Java] 클래스, 객체, 인스턴스의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

insert(), remove()

## insert(), remove() 많이 사용 X ==> 시간복잡도 O(N)

scores = [20, 30, 40, 10, 80]
black_list = {2, 4}

for i in range(5):
    if i + 1 in black_list:
        continue
    if scores[i] <= 40:
        print(f"{scores[i+1]} 합격")

sort(), reverse(), sorted()

sort() - 기본 정렬 기능으로 오름차순(reverse=False)

sort(reverse=True) - 내림차순

reverse() - 리스트를 거꾸로 뒤집는다. == list[::-1]

 

sort(), sorted() 차이

리스트.sort() 는 본체의 리스트를 정렬해서 변환
sorted(리스트) 는 본체 리스트는 내버려두고, 정렬한 새로운 리스트를 반환

 

 

728x90

'IT 개인학습 > Python' 카테고리의 다른 글

Python에서 시간 측정하기(Decorator, Command line)  (0) 2021.09.26
Error, try ... except  (0) 2021.07.18
Class 상속(inheritance)  (0) 2021.07.18
매직메소드  (0) 2021.07.18
Class , Object , Method ( OOP )  (0) 2021.07.18

댓글