새소식

Python

헷갈리는 파이썬 문법 다지기 4. 함수와 모듈

  • -

파이썬 문법의 모든 내용을 담은 게시글이 아닌 헷갈리거나 자주 까먹는 부분의 문법들만 다룬 내용입니다.


 

함수 

- 함수의 재사용성 (reuse) 

파이썬 함수 내장함수(상당히 많다.) 

- 군집자료형에 유용한 함수들 

  len(), max(), min(), sum(), sorted(), reversed() 함수

 

1) sorted() 함수: 정렬해주는 함수 

- 집합이거나 튜플이거나 리스트인 값들을 sorted()에 적용시키면 전부 다 리스트로 정렬되어 출력되어진다. 

 

2) reversed 함수 : 데이터를 역순으로 바꾸는 함수 

- 순서가 있는 list, tuple, str에만 적용가능 

L= [1,3,5,7,9]
M= reversed(L)
print(M) 
>> <list_reverseiterator object at 0x03DC92B0> 
#리스트를 출력해주는 것이 아니라 역순으로 된 object가 만들어졌다고 출력됨.

#역순으로 출력된 결과를 보고싶으면 
M= list(reversed(L))
print(M)
>>[9,7,5,3,1]

#리스트, 튜플 , 문자열 모두 list(reversed()) 이런식으로 사용

 

함수 정의하기 

#반환 값이 여러 개인 경우 
#함수 반환값이 2개 이상인 경우 튜플로 묶어서 반환한다. 

def add_multiply(x,y):
	sum= x+y
    mult= x*y 
    return sum, mult
   
#main
a= int(input('Enter a:'))
b= int(input('Enter b:'))
m,n= add_multiply(a,b)
print(m,n)

- 함수는 호출 전에 정의되어 있어야 한다. 

print('start of the program')
hello()
print('middle of the program')
hello()

def hello():
	print('hello world')
    
>> hello()를 호출할 때 hello 함수를 만들기 전에 이미 호출했기 때문에 hello 함수가 무엇인지 몰라서 오류 



def hello():
	print('hello world')
    
print('start of the program')
hello()
print('middle of the program')
hello()
>>start of the program
hello world 
middle of the program

 

전역 변수와 지역 변수

- 전역변수 : 프로그램 전체에서 사용 가능

- 지역변수: 함수 내에서만 사용 가능 

 - scoping rule: 변수를 찾을 때 지역변수 -> 전역변수 순서로 찾는다. 

def test():
	b= 20 
    print(a,b)
    
#main
a= 100
print(a)
test()
print(a)
print(b)

>> 100  #전역변수의 a로 출력
>> 200  #지역변수에 a가 정의되어 있지 않으므로 전역변수의 a로 출력
>> 100  #전역변수의 a로 출력
>> 에러 #전역변수 b가 없음

 

- gloabal 선언: 전역변수를 함수 내에서 바꾸고자 할 때, global 선언하여 사용 

                        지역변수를 전역변수로 사용하고자 할 때, global 선언 필요 

 

 

가변 인수 사용하기 

- 정해지지 않은 수의 인수를 함수에 전달 

- 함수에 정의할 때 인수 목록에 반드시 넘겨야 하는 고정 인수를 우선 나열하고, 나머지를 마지막에 튜플 형식으로 한꺼번에 받는다.

def friends(*name):   #인수가 몇개들어오는지 정해지지 않음 *name
	for n in name:
    	print(n.title())
        
friends('alice','paul')
friends('cindy','sally','david','tom')

>> Alice Paul
>> Cindy Sally david tom

 

람다함수의 정의 

- 이름없는 한 줄짜리 함수 

- return문을 사용하지 않음

- 함수를 함수 인자로 넘길 때 유용 

def add(x,y): 
	return x+y 
    
#람다 함수
lambda x,y: x+y

 

map 내장 함수 (람다 함수를 사용) 

#map 내장함수의 예 
def f(x):
	return x*x 
X=[1,2,3,4,5]
list(map(f,x))
>>[1,4,9,16,25]


#람다 예 
X=[1,2,3,4,5]
Y=map(lambda a:a*a, X)  #잠시 이번에만 사용하려고 함수 굳이 만들지 않을 때 유용
list(Y)
>>[1,4,9,16,25]

 

filter 내장함수

X=[1,3,5,7,9]
result = filter(lambda x:x>5, X)
list(result) 
>>[7,9]

 

 


 

random 모듈 

- 임의의 값을 선택하는 함수들로 구성된 모듈 

- import random을 입력하고 사용 

ex. random.randint() / random.randrange() ...

- 리스트에 random 모듈 이용하기 

L = list(range(10))
random.choice(L) 
>> 6

random.sample(L,3) 
>> [5,0,4]

random.shuffle(L)
>>[1,4,2,3,6,5,8,7,9]

- 튜플에서 random 모듈 이용하기 

(문자열도 튜플과 사용 방법 동일, shuffle은 불가능 )

T= tuple(range(1,10,2))
print(T)
>> (1,3,5,7,9)

random.choice(T)
>> 7 
random.sample(T,2) 
[1,7]
random.shuffle(T) #에러- immutable한 형에서는 사용 불가능

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.