본문 바로가기

IT

13. 파이썬 - 인수의 기본값, 키워드 인수, docstring , 지역/전역변수

인수의 기본값

'''
인수의 기본값
-파이썬에서는 인수의 기본값을 설정하여 자주 바뀌지 않는 데이터는 기본값을 통해 처리할 수 있게 한다.

'''
def calc_stepsum(begin, end, step=1): # 기본값을 설정할수 있다.
    sum=0
    for n in range(begin, end+1, step):
        sum += n
    return sum  

print(calc_stepsum(1, 10, 2)) # 25
print(calc_stepsum(1, 10)) #step에 값을 주지 않아도 기본값으로 들어간다!!!

'''
인수의 기본값을 지정할 때는 항상 맨 뒷부분에 기본값이 지정된 인수들을 모아서 나열해야한다. !!

ex) def clac_sum(begin, end=5, step) (x)
    def clac_sum(begin, end=5, step=1) (o)
    
'''

 

키워드인수

키워드 가변 인수

'''
키워드 인수 (keyword arguments)

-인수의 개수가 많아지면 인수의 순서를 잘 알기 어렵고 함수를 사용할때 전달할 값의
 위치를 헷갈릴 가능성이 높아진다.

ex) def reg_member(id, pw, name, addr, phone):
    
    reg_member('abc1234', 'def111', '홍길동')

-파이썬에서는 순서와 무관하게 인수를 전달하는 방식을 제공하며 인수의 이름을 직접 지정하여 
 대입하는 방식을 허용한다.
'''

def calc_sum(begin, end, step):
    sum=0
    for n in range(begin, end+1, step):
        sum += n    
    return sum

print(calc_sum(3, 7, 1)) #위치 인수값 사용

#키워드 인수값 사용
print(calc_sum(begin =3, end = 7, step =1)) # 25
print(calc_sum(end = 7, begin =3, step =1)) # 25

#위치인수와 키워드인수의 혼합사용
print(calc_sum(3, 7, step = 1)) #(o)
# print(calc_sum(step = 1, 3, 7)) (x) #positional argument follows keyword argument

# print(sep='**', end='==>', 3, 6, 8) (x)
print( 3, 6, 8, sep='**', end='==>' "\n") # 3**6**8==>


'''

키워드 가변 인수

-키워드 인수는 여러개(n개) 전달해서 처리하고 싶을 때는 인수 이름 앞에 **를 붙여 사용한다.
-함수 호출부에서 여러 개의 키워드 인수를 전달하면 인수의 이름과 쌍을 사전으로 만들어 함수에게 전달
-전달 받은 사전 데이터를 함수 내부에서 사용할 때는 사전의 키를 통해 값을 참조하는 방식으로 인수값을 꺼내어 사용한다.

'''

def food_name(**foods):
    for k in foods:
        print(foods[k])
        
food_name(chicken="통닭", gimbab="김밥")
#통닭
#김밥

 

docstring

'''
docstring

-함수의 재활용성을 높이려면 함수의 사용법(인수의 의미, 사용시 주의사항 등)을
 문서로 남기는 것이 중요하다.

-docstring은 함수를 사용하는 사람들을 위한 설명서 역할을 하며 주석과 마찬가지로 코드 실행에는 영향을 주지 않는다.
-작성된 decstring을 열람하는 함수는 내장함수 help()이다.

'''

def calc_sum(begin, end):
    '''
    calc_sum 설명서
    이 함수는 특정 범위의 누적 합계를 계산한다.
    '''
    sum = 0
    for n in range(begin, end+1):
        sum += n 
    return sum


help(print)# print함수에 대한 설명은 잘나옴
help(calc_sum) # 하지만 이러한 내장함수는 안나오는데 설명을 넣는 방법은 '''~ ''' 를 사용하면된다.

 

전역변수와 전역변수 , global함수

'''

지역 변수 (local variable)

-지역변수란 함수 내부에 선언된 변수를 의미한다. 
-지역변수는 함수 내부에서만 작동하며 함수가 종료되는 순간 메모리에서 자동 소멸한다.
-지역변수의 사용을 함수 내부로 제한하는 이유는 변수의 이름 충돌을 피하고 메모리를 절약하기 위함이다.

함수내부에서도 지역변수가 아닌 전역변수를 쓰고싶다면 global함수를 사용하면 된다.
'''

def info():
    word = '안녕' # 지역변수
    print(word)

info()

# 지역변수의 사용을 함수 내부로 제한하는 이유는 변수의 이름 충돌을 피하고 메모리를 절약하기 위함이다.



'''

전역 변수 (global variable)
-전역변수는 프로그램 전체에서 사용되는 공용변수이다. 
-파이썬에서는 들여쓰기 없이 선언된 변수가 전역변수로 취급되며 함수 내부, 제어문 내부 등
 프로그램 어디에서나 사용이 가능하다. 
 
 함수 내부안에서의 우선순위 : 지역변수 > 전역변수 
 
 
'''

price = 1000 # 전역변수
def sale():
    # 함수 내부에서는 전역변수보다 지역변수가 우선 사용된다.
    global price # 함수 내부에서 전역변수 price를 사용해라
    price = 500
    print('지역변수 price의 주소값: ', id(price)) #지역변수 price의 주소값:  1549024159728
    
sale()

print('전역변수 price의 주소값: ', id(price)) # 지역변수 price의 주소값:  1549024159728
print(price)



def calc_price(price):
    print("")

 

레퍼런스 변수

'''
리스트 사본 만들기

- 수치형변수는 저장 공간이 서로 독립적이라 대입하면 일시적으로 값이 같아질뿐 둘중 하나를 
  변경한다고 해도 다른 변수에는 영향을 주지 않는다.

- 그러나 리스트와 같은 객체 데이터는 하나의 리스트르 ㄹ다른 리스트에 대입하면 2개의 리스트가 
  동시에 영향을 받게 되는데 그 이유는 2개의 리스트가 독립된 형태가 아닌 같은 메모리 주소값을
   공유하고 있기 때문이다.

- 리스트의 독립적인 사본을 얻으려면 리스트의 메서드 copy()를 사용해야한다.

'''

print('---------------------------')

list1= [4, 5, 6]
list2 = list1.copy()

print("list1:", list1)
print("list2:", list2)

list1[1] = 100

print("list1:", list1)
print("list2:", list2)
print("list2:", id(list2)) #list2 주소
print("list2:", hex(id(list2))) # 주소를 16진수로


------------------------------결과--------------------------------

---------------------------
list1: [4, 5, 6]
list2: [4, 5, 6]
list1: [4, 100, 6]
list2: [4, 5, 6]
list2: 2099727917704
list2: 0x1e8e1896288