본문 바로가기

컴퓨터 언어/python

Python 4. 파이썬 함수

함수를 정의하는 문법에 대해 알아보겠습니다.

함수는 2가지의 요소(HEADER+BODY)로 이루어져있습니다.

def hello_world(): # 파라메터가 없음
print "HelloWorld!"

hello_world()

Header:

def = define

hello_world = 함수의 이름

( ) = 괄호 안에는 매개변수/파라메터

 

Body: 실질적으로 그 함수가 행하는 행위에 대한 코드

print "Hello World!"

 

호출 및 출력:

hello_world()

( ) = 괄호 안에는 파라메터와 연결되는 알고먼트


# -*- coding: utf-8 -*-

def spam():
    """egss를 출력"""
    print "eggs!!"

spam()
def tax(bill):
  """Adds 8% tax to a restaurant bill.""" #설명구문
  bill *= 1.08	#bill = bill*1.08
  print "With tax: %f" % bill	#%f로 float 값 호출
  return bill

def tip(bill):
  """Adds 15% tip to a restaurant bill."""
  bill *= 1.15
  print "With tip: %f" % bill
  return bill
  
meal_cost = 100
meal_with_tax = tax(meal_cost)	#tax(100)과 같은 의미 ->def tax(bill) 함수로 들어가기
meal_with_tip = tip(meal_with_tax)

키워드로 호출

키워드를 사용하면, 순서바꿔서 함수는 키워드 해당 값에 맞춰 출력된다.

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

profile(main_lang="파이썬",age=23,name="조선영")
#조선영 23 파이썬

 

가변인자, *args

서로 다른 개수의 값을 넣고 싶을 때 사용

def biggest_number(*args): #*args 는 매개변수가 몇가지 들어갈지 모를 때 사용
print max(args)
return max(args) #RETURN 지우고 실행해보기


def smallest_number(*args):
print min(args)
return min(args)


def distance_from_zero(arg):
print abs(arg)
return abs(arg)


a=biggest_number(-10, -5, 5, 10)	#10
print a	#10 #RETURN 값이 없으면 NONE 나옴

smallest_number(-10, -5, 5, 10)	#-10

distance_from_zero(-10)	#10 절댓값 반환
def profile(name,age,*language):
  print("이름:{0}\t나이:{1}\t".format(name,age),end=" ") 
  #end=""는 줄바꿈 없이 한 줄에 쓰이도록 함
  for lang in language:
    print (lang,end=" ")
  print()	#줄바꿈용

profile("조선영",23,"Python", "Java","C","C++","C#")
profile("유재석",20,"Kotlin","Swith")

#이름:조선영     나이:23  Python Java C C++ C# 
#이름:유재석     나이:20  Kotlin Swith 

 

Call and Response

def square(n):
  """Returns the square of a number."""
  squared = n ** 2
  print "%d squared is %d." % (n, squared)
  return squared

square(10)

#10 squared is 100.

 

 

다음과 같은 함수를 살펴봅시다

이 함수에는 n이라는 파라메터가 들어갈 수 있게 되어있습니다.

return은 반환하는 값을 의미합니다

 

square(10)이라고 치면 이 값은 100을 반환하지요

 

 

Parameters and Arguments

파라메터는 매개변수이며 Argument는 인수라는 의미를 갖고 잇습니다

아까의 경우 파라메터는 n이 되며 우리는 10이라는 argument 인수를 파라메터에 넣어준 것이 됩니다.

 

우리가 한 번 pow라는 함수를 만들어봅시다. 이는 제곱 수를 말해서

 

3^5 처럼 base(3) exponent(5)를 지정해주면 그 값을 출력해줄 수 있는 함수를 만들어볼겁니다

 

def power(base, exponent): # Add your parameters here!
 result = base ** exponent

 print "%d to the power of %d is %d." % (base, exponent, result)


power(37, 4) # Add your arguments here!

 

 

Functions Calling Functions

함수는 다른 함수를 연달아서 불러올 수 있습니다. 

 

# -*- coding: utf-8 -*-
def fun_one(n):
 return n * 5

def fun_two(m):
 return fun_one(m) + 7
# return 5*m+7과 같은 뜻(함수와 함수를 연합시킨 효과)

print fun_one(10)	#50
print fun_two(10)	#57

 

problem) 한 함수가 매개변수에 1을 더하고 다른 함수는 매개변수에 2를 더한다고 해봅시다

f(x) = x+1

g(x) = x+2

g(f(x)) = f(x) + 2 의 형식을 이용할 수 있도록 함수 정의를 한 번 해봅시다

 

sol)

def f(x):
    return x+1

def g(x):
    return x+2

def combination(x):
    return g(f(x))

print f(5)	#6
print g(6)	#8
print combination(5)	#8

 

 

 

다른 모듈을 빌려오는 방식

 

print sqrt(25)
#에러를 띄웁니다


import math #math 모듈을 불러오겠습니다
print math.sqrt(25) #math 모듈의 sqrt(제곱근) 함수를 이용하겠다



from math import sqrt #math 모듈에서 sqrt함수를 불러와 붙여넣겠다
print sqrt(25)

from math import * #math 모듈에 있는 모든 함수를 불러오겠다.



모든 함수를 보는 방법은?

import math # math 모듈에서
everything = dir(math) # math에 있는 모든 함수들을 everything 에다가 넣어주겠다
print everything # 그걸 모두 출력하겠다.

 

*args

def biggest_number(*args): #*args 는 매개변수가 몇가지 들어갈지 모를 때 사용
print max(args)
return max(args) #RETURN 지우고 실행해보기


def smallest_number(*args):
print min(args)
return min(args)


def distance_from_zero(arg):
print abs(arg)
return abs(arg)


a=biggest_number(-10, -5, 5, 10)	#10
print a	#10 #RETURN 값이 없으면 NONE 나옴

smallest_number(-10, -5, 5, 10)	#-10

distance_from_zero(-10)	#10 절댓값 반환

 

print 와 return을 같이 쓰는 이유?

print만 쓰면 함수가 종료되었을 때, 함수값을 다른 곳에 이용할 수 없음

return 값을 가지고 있으면 print a에서 10이라는 값이 출력 가능

return 값이 없으면 None이 나옴

 

 

+ max() / min() / abs() / type()

더보기

max() 함수

maximum = max(4, 8, 15)

print maximum

 

min() 함수

minimum = min(4, 8, 15)

print minimum

 

abs() 함수

absolute = abs(-42)

print absolute

 

type()함수

print type(42)

print type(4.2)

print type('spam')

 

problem)

distance_from_zero라는 함수를 만들것이며 한개의 매개변수를 가집니다 그 매개변수가 int 나 float 타입일 경우에는 에는 절대값을 출력하고 아닐 경우에는 “Nope”를 출력하도록 해봅시다

# -*- coding: utf-8 -*-


"""distance_from_zero라는 함수를 만들것이며 한개의 매개변수를 가집니다
그 매개변수가 int 나 float 타입일 경우에는 에는 절대값을 출력하고

아닐 경우에는 “Nope”를 출력하도록 해봅시다 """

def distance_from_zero(a):
    if type(a)==(int or float): 
    #if type(a)==int or float:는 오류남!
    #if type(a)==int or type(a)== float으로는 가능
    
        print abs(a)
    else:
        print "Nope"

distance_from_zero("안")

 

Lambda syntax

my_list = range(16)
print filter(lambda x: x % 3 == 0, my_list)

#[0, 3, 6, 9, 12, 15]

 

여기서  lambda x: x % 3 == 0

def by_three(x):
return x % 3 == 0 와 같은 의미이다.

 

languages = ["HTML", "JavaScript", "Python", "Ruby"]
# Add arguments to the filter()
print filter(lambda x: x == "Python", languages)
#['Python']
cubes = [x ** 3 for x in range(1, 11)]
print cubes #[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
print filter(lambda x: x % 3 == 0, cubes) #[27, 216, 729]
squares = [x ** 2 for x in range(1, 11)]
print filter(lambda x: x >= 30 and x <= 70, squares)
#[36, 49, 64]

https://www.youtube.com/watch?v=kWiCuklohdY

지역변수와 전역변수

# -*- encoding:utf-8-*-
gun=10

def checkpoint(soldiers): #경계근무
  gun=20
  gun=gun-soldiers
  print("[함수 내] 남은 총:{0}".format(gun))

print("전체 총:{0}".format(gun))
checkpoint(2) #2명이 경계 근무 나감
print("남은 총:{0}".format(gun))

#전체 총:10
#[함수 내] 남은 총:18
#남은 총:10

 

왜 여전히 남은 총이 8개가 아닌 10개인가?

def 안의 gun은 지역변수이기 때문이다.

이 때는 전역변수를 사용해야함. global 사용

 

gun=10

def checkpoint(soldiers): #경계근무
  global gun #전역 공간에 있는 gun을 사용하겠다.
  gun=gun-soldiers
  print("[함수 내] 남은 총:{0}".format(gun))

print("전체 총:{0}".format(gun))
checkpoint(2) #2명이 경계 근무 나감
print("남은 총:{0}".format(gun))

#전체 총:10
#[함수 내] 남은 총:8
#남은 총:8

 

하지만 일반적으로는 전역변수를 많이 쓰면 코드 관리가 어려워서 권장하지 않음 ->def checkpoint(soldiers)

파라미터를 사용하고 반환값을 받아서 사용하길 권장 ->def checkpoint_ret(gun,soldiers)

(밑의 코드 참고)

gun=10

1.권장하지 않음
def checkpoint(soldiers): #경계근무
  global gun #전역 공간에 있는 gun을 사용하겠다.
  gun=gun-soldiers
  print("[함수 내] 남은 총:{0}".format(gun))


2.권장
def checkpoint_ret(gun,soldiers):
  gun=gun-soldiers
  print("[함수 내] 남은 총:{0}".format(gun))
  return gun

print("전체 총:{0}".format(gun))
gun=checkpoint_ret(gun,2)
print("남은 총:{0}".format(gun))

#전체 총:10
#[함수 내] 남은 총:8
#남은 총:8

 

 

QUIZ) 표준 체중을 구하는 프로그램

(성별에 따른 공식)

남자: 키(m)*키(m)*22

여자: 키(m)*키(m)*21

 

조건1: 표준 체중은 별도의 함수 내에서 계산

           *함수명: std_weight

            *전달값: 키(height), 성별(gender)

조건2: 표준 체중은 소수점 둘째자리까지 표시

 

(출력 예제)

키 175cm 남자의 표준 체중은 67.38kg 입니다.

 

sol)

 

 

'컴퓨터 언어 > python' 카테고리의 다른 글

파이썬 기초1  (0) 2020.07.15
Python 5: List + Dictinaray + for루프  (0) 2020.07.14
Python 3. Conditionals ana Control Flow  (0) 2020.07.14
Python 2. String & Console out  (0) 2020.07.14
Python 1. Python Syntax  (0) 2020.07.14