일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 운영체제
- Windows
- TensorFlow
- linux
- 관리
- vuejs
- centOS
- server
- Python
- representation learning
- 설정
- Kali
- vue
- ML
- Visual Intelligence
- 칼리
- 머신러닝
- 시퀸스 자료형
- 가상머신
- Language Intelligence
- xshell
- 설치
- Machine Learning
- python 설치
- vmware
- Network
- Python 기초
- 선형회귀
- 리눅스
- 텐서플로우
- Today
- Total
homebody's blog
[Python] 함수(Function) - 1 본문
함수(Function)
def func(parameter1, parameter2):
code line1
code line2
return value
- 함수 선언은 def로 시작하여 :으로 끝나고, 다음은 4spaces 들여쓰기로 코드 블록을 만든다.
- 함수는 매개변수(parameter)를 넘겨줄 수도 있다.
- 함수는 동작후에 return을 통해 결과값을 전달 할 수도 있다. (return 값이 없으면, None을 반환)
- 함수는 호출을 func(val1, val2)와 같이 한다.
문제 - 1
rectangle() 함수 만들기
def rectangle(height, width):
return 2 * (height + width), height * width
print("{}".format(rectangle(30, 20)))
(100, 600)
-> 함수에서 결과값을 여러 개를 동시에 반환하면 tuple형식으로 전달이 된다.
-
내장함수 목록 확인
dir(__builtins__)
-
함수의 return
- 함수는 반환되는 값이 있으며, 이는 어떠한 종류의 객체여도 상관없다.
- 단, 오직 한 개의 객체만 반환된다.
- 함수가 return 되거나 종료되면, 함수를 호출한 곳으로 돌아간다.
문제 - 2
my_max() 함수 만들기 -> 정수를 두개 받아서, 큰 값을 반환한다.
def my_max(a,b):
if a>b:
return a
elif a==b:
return "same"
else:
return b
print(my_max(1,5))
5
문제 - 3
리스트 두개를 받아 각각 더한 결과를 비교하여 값이 큰 리스트를 반환하는 함수를 만든다.
def my_list_max(a, b):
if sum(a)>sum(b):
return a
elif sum(a)==sum(b):
return "same"
else:
return b
print(my_list_max([10, 3], [5,9]))
[5, 9]
함수의 인자/인수
함수는 인자(parameter)를 받을 수 있다.
함수는 기본적으로 인수를 위치로 판단한다.
-
기본 값(Default Argument Values)
def func(p1=v1): return p1
-
함수가 호출될 때, 인자를 지정하지 않아도 기본 값을 설정할 수 있다.
-
기본 값이 설정이 되어 있어도 파라미터가 넘어오면 넘어온 값으로 넣는다.
-
기본 값이 설정되어 있더라도 기존의 함수와 동일하게 호출 가능하다.
-
호출시 인자가 없으면 기본 인자 값이 활용된다.
-
단, 기본 매개변수 이후에 기본 값이 없는 매개변수를 사용할 수는 없다.
-
기본 값을 쓸려면 제일 뒤에서 부터 사용해야한다.그래야 기본값이 없는 매개변수를 사용할 수 있다.
def hello(name = "익명"): print(f"'안녕 {name}아'") hello()
'안녕 익명아'
-
-
-
키워드 인자(Keyword Arguments)
-
키워드 인자는 직접적으로 변수의 이름으로 특정 인자를 전달할 수 있다.
def greeting(age, name='ssafy'): print(f'{name}은 {age}살입니다.') # 다양하게 함수를 호출 greeting(39, '태형') greeting(name = '태형', age = 39)
태형은 39살입니다. 태형은 39살입니다.
-
단 아래와 같이 활용할 수는 없다. 키워드 인자를 활용한 뒤에 위치 인자를 활용할 수는 없다.
def greeting(age, name='ssafy'): print(f'{name}은 {age}살입니다.') greeting(age=39,'태형')
-
우리가 주로 활용하는 print() 함수는 파이썬 표준 라이브러리의 내장함수 중 하나이며, 다음과 같이 구성되어 있다.
print(*objects, sep='', end='\n', file=sys.stdout, flush=False)
-
-
가변 인자 리스트
def func(*args):
-
print()처럼 정해지지 않은 임의의 숫자의 인자를 받기 위해서는 가변인자를 활용한다.
-
가변인자는 tuple 형태로 처리가 되며, *로 표현한다.
-
이렇게 처리하면 몇 개의 인자값이 전달 되던지 해결할 수 있다.
# 가변 인자 예시 (print문은 *obejcts를 통해 임의의 숫자의 인자를 모두 처리한다.) print('hi', 'hello', '안녕', 'guten tag', '', sep='.')
# args는 tuple임을 확인 def my_func(*args): print(type(args)) print(args) my_func(1,2,3,4,5,6,7,8,9)
<class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8, 9)
문제 - 4
정수를 여러 개 받아서 가장 큰 값을 반환하는 my_max()def my_max(*nums): tmp=list(nums) tmp.sort() return tmp[-1] #or def my_max(*nums): max_num = nums[0] for num in nums: if num > max_num: max_num = num return max_num my_max(1, 2, 6, 5, 2, 3, 4)
6
-
-
정의되지 않은 인자들 처리
def func(**kwargs):
-
정의되지 않은 인자들은 dict 형태로 처리가 되며, **로 표현한다.
-
주로 kwagrs라는 이름을 사용하며, **kwargs를 통해 인자를 받아 처리할 수 있다. kwagrs는 다른 이름으로 바뀔 수 있다.
-
우리가 dictionary를 만들 때 사용할 수 있는 dict() 함수는 파이썬 표준 라이브러리의 내장함수중 하나이며, 다음과 같이 구성되어 있다.
class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg)
문제 - 5
실제 dictionary모습으로 출력하는 함수 만들기
def my_fake_dict(**languages): for lang in languages: print("{}: {}".format(lang, languages[lang]), end=' ') my_fake_dict(한국어='안녕', 영어='hi', 독일어='Guten Tag')
한국어: 안녕 영어: hi 독일어: Guten Tag
-
-
dictionary를 인자로 전달(unpacking arguments list)
-
**dict(변수명)를 통해 함수에 인자를 넘길 수 있다. dictionary를 인자로 넘기면 에러가 발생한다.
# user 검증(유사 회원가입)을 작성 # username, password, password_confirmation을 받아서 비밀번호 일치 여부를 판단 def user(username, password, password_confirmation): if password == password_confirmation: print(f"{username}님, 회원가입이 완료되었습니다.") else: print("비밀번호가 일치하지 않습니다.") my_account = {'username': 'jang', 'password' : '1234', 'password_confirmation' : '234'} user(**my_account)
-
이름공간 및 스코프(Scope)
-
파이썬에서 사용되는 이름들은 이름공간(namespce)에 저장되어 있다.
-
변수에서 값을 찾을 때 아래와 같은 순서대로 이름을 찾아나간다.
-
Local scope: 정의된 함수
-
Enclosed scope: 상위 함수
-
Global scope: 함수 밖의 변수 혹은 import된 모듈
-
Built-in scope: 파이썬안에 내장되어 있는 함수 또는 속성
str(1) #정수 1을 문자열 '1'로 변환해줌 -> 제대로 작동함 str = 4 #str을 Global scope에 4라는 값을 가지고 있는 변수로 선언됨 str(1) #그래서 Built-in scope에 있는 str()함수를 사용할려고 하면 not callable이라는 오류가 발생 왜냐면 str은 Global scope에 선언된 변수이기 때문이다. del(str)#그래서 del을 써서 선언된 변수를 없애주어야한다. str(1) #그러면 Built-in scope에 있는 내장함수를 제대로 사용할 수 있다.
-
-
이름공간은 각자의 수명주기가 있다.
- built-in scope : 파이썬이 실행된 이후부터 끝까지
- Global scope : 모듈이 호출된 시점 이후 혹은 이름 선언된 이후부터 끝까지
- Local/Enclosed scope : 함수가 실행된 시점 이후부터 리턴할때 까지
-
'Python' 카테고리의 다른 글
[Python] Pycharm 설치 (0) | 2019.07.04 |
---|---|
[Python] Python 기초 - 5(if, for) (0) | 2019.07.02 |
[Python] Python 기초 - 4(set, dictionary) (0) | 2019.07.01 |
[Python] Python 기초 - 3(시퀀스 자료형) (0) | 2019.06.30 |
[Python] Python 기초 - 2(연산자, 형변환) (0) | 2019.06.29 |