본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/[프로그래밍] 파이썬

2019/08/12 함수

1.  함수를 사용할 때에는, 둘 중 하나의 방법 만을 일관성 있게 사용하여야 한다. 객체의 경계에 대해서 생각해 볼 것.

 

# import turtle
from turtle import *

# import random
from random import *

 

2. 함수는 정의를 한 뒤, 꼭 호출(invoke)를 해 줘야 한다.

 

3. 함수는 반복이라고 하기는 좀 그렇고, 호출 할 때마다 실행이 된다.

 

 

4. 함수의 정의할 때, 인자를 넣는 법!

def calc(a,b,c) :
    print((a+b)*c)

calc(1,2,3)    

 

5. 함수 자체가 값을 가지게 하기 위해서는 return을 해줘야 한다. 함수가 기억하게 하기 위해서는 기억하라는 명령return을 해줘야 한다. 화면을 출력하라와 값을 갖는다는 다르다! return 값이 있으면 함수 값은 변수 값이다.(보통)

def calc(a,b,c) :
    print((a+b)*c)

calc(1,2,3)    


def trapezium(a,b,c):
    return (a+b)*c/2

width = trapezium(1,2,3)
print(width)

 

6. 실인자(숫자) 가인자(변수)를 받을 수 있다.

 

def trapezium(a,b,c):
    return (a+b)*c/2

a= 3
b= 4
c =5

width = trapezium(a,b,c)
print(width)

 

 

7. 마우스를 클릭 할 때마다, 드로잉이 시작 된다. onkey함수로 키보드 입력과 함수의 실행을 연결 시킬 수 있다. 인자에 변수가 들어갈 수 있으었으므로, 함수 또한 들어갈 수 있다.

import turtle

def draw(x,y) :
    t.goto(x,y)

t= turtle.Turtle()
t.shape("turtle")
t.pensize(10)

s = turtle.Screen()
s.onscreenclick(draw)

s.onkey(t.penup, "UP")
s.onkey(t.pendown, "Down")
s.listen()

 

8. 파이썬 함수 만의 특별한 기능이다. 인자를 선언하고 값을 하나 = 할당 시킴으로써, 기본 값을 지정할 수 있다. 기본 값이 지정된 인자는 호출시 입력을 해주지 않아도 된다. 다만 기본값 인자는 뒤로 적어줘야 한다.

def greet(name, msg ="자니?"):
    print("안녕", name +',' + msg)


greet("영희")
greet("영희", "자니? 지금 밖이야?")

 

9. 디폴트를 0으로 넣어주면, 입력 값을 받을 수도 있고, 함수에 직접 인자를 전달해 줄 수도 있다. 하지만 아래의 코드처럼, 두 인자 모두 기본 값을 가질 때, 반드시 첫 번째 값은 전달 해줘야 한다. 

 

def distance(x=0, y=0) :
    if x==0 and y ==0:
        x= int(input("x좌표를 입력하세요 : "))
        y= int(input("y좌표를 입력하세요 : "))
    c = (x**2+y**2)**0.5
    return c

distance(,0)

 

10. *와일드 카드, ster 는 인자를 임의로 모두 받는다. calloff의 타입은 튜플이기 때문에 길이를 찍어보면 원소의 갯수가 나온다.

 

def apark(*calloff):
    print("오늘", calloff, "은 운행하지 않습니다.")
    print(type(calloff))
    print(len(calloff))
apark("청룡", "프롬")

 

 

11. result는 caculate_area 함수가 작동 될 떄에만 살아 있는 변수이기 때문에, 함수의 동작이 끝났을 때, 메모리에서 result 값은 사라진다. 그렇기 때문에 오류가 난다.

 

 

def calclulate_area(radius):
    result =3.14*radius**2
    return result


r = float(input("원의 반지름:"))
area = calclulate_area(r)
print(result)    

 

 

12. r이 명시적으로 함수 정의에 포함 되지 않기 때문에, 안정성이 떨어질 수 있지만, 직관적이다.

 

def cacluate_area(radius):
    result = 3.14* r**2
    return result

r = float(input("원의 반지름: ")) 
area = cacluate_area()
print(area)   

 

 

13. 메인 프로그램과 함수와의 통신이다. Parmeter passing.전역변수로부터 값이 복사되어 지역변수 r이 다른 메모리 위치에서 발생한다.이 둘은 값이 같지만, 만들어지는 시기와 메모리 위치가 다르기 때문에 다른 삶의 형태를 가진다.

전역변수 r은 프로그램 종료시 까지 존재하지만 지역변수 r은 함수 종료시 종료한다.

 

def cacluate_area():
    global area
    area = 3.14* r**2
    return result

r = float(input("원의 반지름: ")) 
area = cacluate_area()
print(area)   

 

14. global area를 선언함으로써, 값을 복사하는 것이 아니라 공유할 수 있게 된다. 둘 사이의 통신이기 때문에, 변수의 생성 시점과 소멸 시점을 잘 고려해보자.

 

 

15. 파이썬의 특이한 강점 list comphrehesion이다.

 

mylist = []
for x in range(10) :
    mylist.append(x*x)
print(mylist)

mylist = [x*x for x in range(0,9)]

print(mylist)

15-2.  _(언더 바)를 써도 사용이 가능하다. 언더 바를 쓴다는 의미는 횟수로서만 의미가 있다는 것이다.

from random import *

mylist2 = [randint(1,45) for x in range(6)]
mylist3 = [randint(1,45) for _ in range(6)]
print(mylist2)