Python 기초 3

Lilmeow·2023년 4월 12일
0

Python Basic

목록 보기
3/7
post-thumbnail

함수

def func():
	print('Hello')

func()
# Hello

전달값과 반환값

def func1(a, b): # func1라는 함수 정의, a,b값을 받아 a + b라는 값을 반환하는 함수
	print('a + b : {0}'.format(a + b))
    return a + b

def func2(a, b): # func2라는 함수 정의, a,b값을 받아 a -b or a값을 반환하는 함수
	if a >= b:
    	print('a - b : {0}'.format(a - b))
        return a - b
	else:
    	print('a < b,', 'a : {0}'.format(a))
        return a

def func3(a, b): # func3라는 함수 정의, a,b값을 받아 commission값과 a - b - commission이라는 값을 반환하는 함수
	commission = 100
    return commission, a - b - commission

a = 0
a = func1(a, 1000) # a, 1000이라는 값이 func1에 입력됨, 함수의 return값(a + b)을 a에 저장
print('a : {0}'.format(a), '\n')
# a + b : 1000
# a : 1000

a = func2(a, 2000) # a, 2000이라는 값이 func2에 입력됨, 함수의 return값(a - b)을 a에 저장
# a < b, a : 1000
a = func2(a, 500) # a, 500이라는 값이 func2에 입력됨, 함수의 return값(a - b)을 a에 저장
print('a : {0}'.format(a), '\n')
# a - b : 500
# a : 500

commission, a = func3(a, 300)
print('commission : {0}, a : {1}'.format(commission, a)) # a, 300이라는 값이 func3에 입력됨, 함수의 첫번째 return값(commission)을 commission에 저장, 두번째 return값(a - b - commission)을 a에 저장
# commission : 100, a : 100

기본값

def profile(name, age, main_lang):
	print('name : {0}\tage : {1}\tmain language : {2}'\
    	.format(name, age, main_lang))

profile('aaa', 20, 'py')
profile('bbb', 25, 'js')
# name : aaa	age : 20	main language : py
# name : bbb	age : 25	main language : js

def profile(name, age = 17, main_lang = 'py'):
	print('name : {0}\tage : {1}\tmain language : {2}'\
    	.format(name, age, main_lang)

profile('aaa', 20, 'js')
profile('bbb') # 전달받지 못한 age, main_lang 값은 기본값으로 대체
profile('ccc', 25) # 전달받지 못한 main_lang 값은 기본값으로 대체
# name : aaa	age : 20	main language : js
# name : bbb	age : 17	main language : py
# name : ccc	age : 25	main language : py

키워드 값을 이용한 함수 호출

def profile(name, age, main_lang):
	print(name, age, main_lang)

profile(name = 'aaa', main_lang = 'py', age = 20)
profile(main_lang = 'js', age = 25, name = 'bbb')
# aaa 20 py
# bbb 25 js
> 함수에서 전달받는 매개변수의 값을 키워드를 이용하여 함수를 호출하고, (키워드 =)을 넣어주면 순서와 상관없이 출력된다

가변 인자를 이용한 함수 호출

def profile(name, age, lang1, lang2, lang3, lang4, lang5):
	print('name : {0}\tage : {1}\t'.format(name, age). end = '') # print 끝에 end = ''를 사용하여 줄 바꿈을 하지 않고 ''공백을 넣어 출력한다, print문을 따로 사용해도 한 줄로 출력 가능
    print(lang1, lang2, lang3, lang4, lang5)

profile('aaa', 20, 'py', 'java', 'js', 'c', 'c+')
profile('bbb', 25, 'c#', 'kotlin', 'html', swift', 'sql')
# name : aaa	age : 20	py java js c c+
# name : bbb	age : 25	c# kotlin html swift sql

def profile(name, age, language*): # 가변인자인 매개변수는 값을 안받아도 되고 여러개 받아도 된다
	print('name : {0}\tage : {1}\t'.format(name, age), end = ' ')
    for lang in language:
    	print(lang, end = ' ')
	print('')

profile('ccc', 30, 'py', 'java', 'js', 'c', 'c+', 'c#', 'html'
profile('ddd', 40)
# name : ccc	age : 30	py java js c c+ c# html
# name : ddd	age : 40

지역변수와 전역변수

# 지역변수 : 함수 내에서만 쓸 수 있는 변수, 함수 호출될 때 만들어졌다가 호출이 끝나면 사라지는 변수
# 전역변수 : 프로그램 내에서 아무곳에서 부를 수 있는 변수

gun = 10 # 전역변수로 선언된 gun
def check(people):
	global gun # 전역 공간에 있는 gun 사용, gun = 10 : 방법 1
    gun = gun - people # 전역 변수를 불러왔으니 함수 내에서 gun이라는 전역 변수에 새로운 값을 할당할 수 있다
    print('result : {0}'.format(gun))

print('total count : {0}'.format(gun)) # 전역변수 gun = 10
check(2) # gun(전역변수) = gun(전역변수 : 10) - 2 = 8
print('total count : {0}'.format(gun)) # 전역변수 gun = 8
# total count : 10
# result : 8
# total count : 8

gun = 10
def check(people):
	gun = 20 # 지역변수 gun을 선언
    gun = gun - people # 20 - people의 결과값을 지역변수 gun에 저장
    print('result : {0}'.format(gun))

print('total count : {0}'.format(gun)) # 전역변수 gun = 10
check(2) # gun(지역변수) = gun(지역변수 : 20) - 2 = 18
> 지역변수 gun의 값은 18이지만 함수 호출이 끝나면 사라지며, 전역변수 gun과는 다른 변수이다. 따라서 전역변수 gun의 값은 여전히 10이다
print('total count : {0}'.format(gun)) # 전역변수 gun = 10
# 10
# 18
# 10

gun = 10
def check_return(gun, people):
	gun = gun - people # 입력 받은 값들의 연산결과(gun - people)가 지역변수 gun에 할당
    print('result : {0}'.format(gun))
    return gun

print('total count : {0}'.format(gun)) # 전역변수 gun = 10
gun = check_return(gun, 2) # 함수에 전역변수 gun = 10, people = 2 입력, 지역변수 gun = 8이라는 반환값이 전역변수 gun에 할당
print('total count : {0}'.format(gun))
# total count : 10
# result : 8
# total count : 8
> 일반적으로 전역변수를 많이 사용하면 코드 관리가 어려워짐, 가급적 함수의 전달값(파라미터)으로 던져서 계산하고 반환값을 받아서 사용하는 방법이 좋다

응용 : 조건문에서 함수의 반환값(True, False) 이용

# 소수 판별
def isPrime(x):
    for i in range(2, x):
        if x % i == 0: # ex) x=7일때, 7%2=1, 7%3=1, 7%4=3, 7%5=2, 7%6=1 -> 만족안함 -> True(소수 맞음) 반환, 만약 나누어 떨어져서 나머지가 0이면 False(소수가 아님)) 반환
            return False
    return True

alist = [12, 13, 7, 9, 19]
for j in alist:
    if isPrime(j):
        print(j, end = ' ')
# 13 7 19

0개의 댓글