빠르게 활용하는 파이썬3 스터디(ch1~4)

45
Python study Ahn seong hyun

Upload: seonyhyun-ahn

Post on 30-Jan-2015

2.569 views

Category:

Technology


15 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 빠르게 활용하는 파이썬3 스터디(ch1~4)

Python study

Ahn seong hyun

Page 2: 빠르게 활용하는 파이썬3 스터디(ch1~4)

table of contents

1. 파이썬 개요 및 설치

2. 자료형 및 연산자

3. 함수

4. 제어

Page 3: 빠르게 활용하는 파이썬3 스터디(ch1~4)

About Python. 1. 파이썬 개요 및 설치

파이썬이란 ?- 1991 년 귀도 반 로썸이 발표한 인터프리터 언어- 3 대 구글 언어- 구글 안드로이드 지원

특징- 가독성 : 블록 들여쓰기 구분- 풍부한 라이브러리- 접착성 : C 모듈과 연계가능- 무료- 유니코드 - 동적타이핑 : 런타임시 타입 체크 , 자동 메모리 관리

파이썬의 종류- Cpython : C 로 작성된 파이썬 ( 파이썬 )

- Jthons : java 로 구현된 파이썬 , 자바 가상머신에서 작동 가능 , 자바 클래스 이용- Ironthon : c# 으로 구현- Pypy : 파이썬으로 구현된 파이썬

Page 4: 빠르게 활용하는 파이썬3 스터디(ch1~4)

파이썬 2.x 와 3 는 하위 호환성을 유지 하고 있지 않다 .

1. print 함수의 변화

print “welcome to”, “python 3k” print (“welcome to”, “python3k”) 괄호의 추가 , 구분자 , 끝라인 , 출력 지정 가능 (8 장 입출력 )

2. long 형 대신에 , int 형만

int/int 의 결과는 int 가 아니라 , float1/2 = 03/2 = 13/2 = 1.5

버전의 변화1. 파이썬 개요 및 설치

type(2**31)<type long>

type(2**31)<class int>

<2 의 31 제곱근 >

Page 5: 빠르게 활용하는 파이썬3 스터디(ch1~4)

3. String, Unicode 의 체계의 변화

2.x style

type(‘ 가’ )<type ‘str’>

type<‘ 가’ .decode(‘utf8’)><type ‘unicode’>

type<u‘ 가’ ><type ‘unicode’>

3 style

type<u‘ 가’ >Syntax error

type(‘ 가’ )<type ‘str’>

type<‘ 가’ .decode(‘cp949’)><type ‘bytes’>

버전의 변화1. 파이썬 개요 및 설치

파이썬 2.x 에서는 일반 스트링이 인코딩 있는 문자열이었고 유니코드가 따로 있어서 디코딩으로 유니코드 변환을 해야 했는데 , 파이썬 3 에서는 따로 유니코드를 지정하지 않고 일반 스트링이 유니코드와 동일하고 인코딩이 있는 문자열을 bytes 로 표현됩니다 .

Page 6: 빠르게 활용하는 파이썬3 스터디(ch1~4)

http://www.python.org/download- 윈도우 - 맥

실습

- python idle 실행

파이썬 설치 및 실행1. 파이썬 개요 및 설치

Page 7: 빠르게 활용하는 파이썬3 스터디(ch1~4)

들여쓰기 (indentation)- 파이썬의 가장 큰 특징- 가독성을 높일수 있는 수단은 있으나 , 버그를 찾기 어려운 면이 있다 .

- 코드블록 2 가 코드블록 1 의 하위그룹임 . - 하위그룹이 오기 위해서는 바로 전에 콜론 (:) 이 사용되어야 한다 . - 동일한 코드블록 내 , 정확히 같은 스페이스 같은 탭을 이용한 들여쓰기를 해야 한다 .

- 한줄로도 가능함 . >>> if a==1: print(1)

들여쓰기1. 파이썬 개요 및 설치

코드블록 1:

코드블록 2코드블록 3:

코드블록 4

if a == 1:

print(1)

>>> if a==1:print(1) print(2)

SyntaxError: unexpected indent

Page 8: 빠르게 활용하는 파이썬3 스터디(ch1~4)

주석 #

>>> if a==1:#vmflsxm#adsfadfprint(2)

2

실행 파일과 소스코드 인코딩시 “ #” 사용

#!/usr/bin/python#coding:latin-1

Coding 지시자를 이용해서 인코딩 지정 ( 디폴트 : 아스키 (ASCII))

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

소스코드 인코딩1. 파이썬 개요 및 설치

Page 9: 빠르게 활용하는 파이썬3 스터디(ch1~4)

세미콜론 (;)

- 일반적인 프로그래밍언어에서 사용- 붙여도 상관 없음 .

- 단 , 한 라인에 다 쓸경우 세미콜론으로 구분함 .

문장이 끝나지 않았을 경우 “ \” 으로 그 사실을 명시해 줄수도 있음 . (14p)

- but, 깨끗한 코드를 위해서 쓰지말자 .

기타 문법1. 파이썬 개요 및 설치

Page 10: 빠르게 활용하는 파이썬3 스터디(ch1~4)

설치폴더 /Tools/Scripts/ 의 2to3.py 를 이용

Test.py

def div(a): print u"Result :",a/2num = input("input any number:")div(int(num))

seonghyeon-an-ui-MacBook-Pro:~ seonghyeonan$ /usr/bin/2to3 -w test.pyRefactoringTool: Skipping implicit fixer: bufferRefactoringTool: Skipping implicit fixer: idiomsRefactoringTool: Skipping implicit fixer: set_literalRefactoringTool: Skipping implicit fixer: ws_commaRefactoringTool: Refactored test.py--- test.py (original)+++ test.py (refactored)@@ -1,4 +1,4 @@ def div(a):- print u"Result :",a/2-num = raw_input("input any number:")+ print("Result :",a/2)+num = input("input any number:") div(int(num))RefactoringTool: Files that were modified:RefactoringTool: test.py

-w 옵션을 주지 않으면 어떻게 변경해야하는지만 화면에 출력되고 파일을 변경되지 않는다 .

def div(a): print("Result :",a/2)num = input("input any number:")div(int(num))~

2.x 를 3 으로 변환하기1. 파이썬 개요 및 설치

Page 11: 빠르게 활용하는 파이썬3 스터디(ch1~4)

변수명 : 문자 , 숫자 , 언더바

- 숫자가 맨압에 올수 없다 . - 대소문자 구별 - 예약어는 변수명으로 사용할 수 없다 . (for, whitle, class.. )

치환 연산자

- 변수명 = 값

다른 형태

- (a, b) = (1, 2) 튜플 - [c, d] = [3.4] - 리스트 - e=f=g=1 - 다중치환

변수명2. 자료형

Page 12: 빠르게 활용하는 파이썬3 스터디(ch1~4)

수치형 데이터 타입- int, long, float, complex

int : integer 10 진수 정수 정수 앞에 ‘ 0o’ 8 진수 , ‘0b’ 2 진수 , ‘0x’ 16 진수

입력을 받아서 원하는 진수로 변환하는 함수 oct(), bin(), hex() : 출력이 문자열임 .

>>> 0o108>>> 0b102>>> 0x1016>>> oct(a)'0o144'>>> hex(38)'0x26'>>> bin(a)'0b1100100'

수치형2. 자료형

Page 13: 빠르게 활용하는 파이썬3 스터디(ch1~4)

2.X 버전에서는 int 형의 범위를 넘는것은 long 을 이용 3 버전 에서는 long 형이 없어지고 모두 int 형으로 처리됨 .

float : 실수형 표현

>>> type(3.14)<class 'float'>>>> type(314e-2)<class 'float'>

복소수

>>> x= 3-4j>>> type(x)<class 'complex'>>>> x.imag : 허수부-4.0>>> x.real : 실수부3.0>>> x.conjugate() : 켤레복소수(3+4j)

수치형2. 자료형

Page 14: 빠르게 활용하는 파이썬3 스터디(ch1~4)

연산자

치환연산자 : =

더하기빼기 곱하기나누기나머지 (%)거듭제곱 (**) : 제곱보다 거듭제곱의 연산이 우선순위가 더 높다 .

정수 나누기 (//) : 나누기에서 몫 ( 정수부 ) 만 취함 .

수치형2. 자료형

Page 15: 빠르게 활용하는 파이썬3 스터디(ch1~4)

파이썬에서는 문자를 ‘ ‘ 또는 “” 으로 묶에서 표현한다 .

>>> "ash84"'ash84'>>> 'ash84''ash84'>>> 'ash84"SyntaxError: EOL while scanning string literal

>>> type("ash84")<class 'str'>>>> type('ash84')<class 'str'>

다량의 문자열 “”’ 또는 ‘’’

>>> print(""" hellomy my car good """) hellocar good

문자열2. 자료형

Page 16: 빠르게 활용하는 파이썬3 스터디(ch1~4)

줄바꿈 , 탭 , 등의 특수문자의 표현

\n : 줄바꿈\t : 탭\r : 캐리지리턴\0 : 널\\ : \\’ : ‘\” :”

>>> print("\t hello \n tom \r john ") hello

tom john

문자열2. 자료형

Page 17: 빠르게 활용하는 파이썬3 스터디(ch1~4)

Raw 문자열 (r) : 이스케이프 문자가 적용되지 않는 문자열 출력시

>>> print(r"\tash84\nkk") SyntaxError: unexpected indent>>> print("r\tash84\nkk") SyntaxError: unexpected indent>>> print(r"\tash84\nkk")\tash84\nkk>>>

문자열 연산자 더하기 (+) 문자열 더하기 ( 더하기는 문자열 상수끼리는 생략 가능 ) 곱하기 (*) 문자열 반복

>>> 'py'+'thon''python'>>> 'py'*10'pypypypypypypypypypy'>>>

문자열2. 자료형

Page 18: 빠르게 활용하는 파이썬3 스터디(ch1~4)

문자열 인덱싱

첫번째 문자 : 0 부터 시작

>>> name = "ash84">>> name[0]'a'>>> name[5]Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> name[5]IndexError: string index out of range>>> name[0] = "p"Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> name[0] = "p"TypeError: 'str' object does not support item assignment>>>

인덱싱 오류인덱싱을 이용한 문자열 변경은 안됨 . 다만 문자열 전체를 재 할당시 가능 name=“psh84”

문자열2. 자료형

Page 19: 빠르게 활용하는 파이썬3 스터디(ch1~4)

문자열 슬라이싱 ( 변수명 [ 시작번호 : 끝번호 ])

>>> name[0:2]'as'>>> name[:-2]'ash’>>> name[-2:]'84'>>>

음수의 경우 , 문자열의 끝을 0 으로 보고 센다 . : 위치를 생략한 경우 , 문자열의 처음이나 끝위치로 간주한다 .

문자열 <-> 수치 변환

각 타입 클래스의 생성자 이용>>> str(3.14)'3.14'>>> int("0099")99>>> int("adsfas")Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> int("adsfas")ValueError: invalid literal for int() with base 10: 'adsfas'>>> float("32")32.0>>>

문자열2. 자료형

Page 20: 빠르게 활용하는 파이썬3 스터디(ch1~4)

인코딩이란 ? = 각각의 문자열을 표현하는 방식

유니코드란 ? = 세계의 모든 문자 코드들을 일관된 방식으로 표현할 수 있는 체계로 만든것 .

파이썬 2.x 버전에서는 일반적인 문자열을 유니코드로 변경하는 unicode() 함수 및 문자열 앞에 ‘ u’ 를 붙여야 했음 .

파이썬 3 버전에서는 일반 문자열이 모두 유니코드임 . - 개발자가 글자깨짐을 고려하지 않아도 됨 . - 유니코드 외의 인코딩이 있는 문자열의 bytes 로 표현됨

>>> type("a")<class 'str’>>>> "a".encode('utf-8')b'a'>>> type("a".encode('utf-8'))<class 'bytes'>>>> b = "a".encode('utf-8')>>> type(b)<class 'bytes'>

유니코드2. 자료형

Page 21: 빠르게 활용하는 파이썬3 스터디(ch1~4)

유니코드 to 문자

>>> chr(97)'a'

문자 to 유니코드

>>> ord('a')97

현재 시스템의 인코딩 확인

>>> import sys>>> sys.stdin.encoding'us-ascii' >>> sys.stdout.encoding'us-ascii'>>>

유니코드2. 자료형

Page 22: 빠르게 활용하는 파이썬3 스터디(ch1~4)

리스트

- 값의 나열- 순서 존재 - 여러종류 담을수 있다 . - 0 부터 시작하는 인덱스 및 문자열 슬라이싱 가능 .

>>> colors=['red','green','blue']>>> type(colors)<class 'list'>

>>> colors.append('gold') //append( 문자열 )

>>> colors['red', 'green', 'blue', 'gold']

>>> colors['red', 'pruple', 'green', 'blue', 'gold'] //insert( 위치 , 문자열 )

리스트2. 자료형

Page 23: 빠르게 활용하는 파이썬3 스터디(ch1~4)

extend()

>>> colors.extend(['white','black']) //extend() 한번에 여러값을 삽입 , 리스트나 튜플 삽입등의 반복되는 값을 넣어야 함 . >>> colors['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black’]

>>> colors.extend("gray") // 하나 삽입시 쪼개져서 들어감 . >>> colors['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y']

더하기 (+) 연산 지원

>>> colors+=["gray"]>>> colors['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']

반복되는 값으로 넣지 않으면 , 쪼개져서 들어감 .

index( 문자열 ) : 문자열 위치 찾기 < 가장 앞에 있는것 찾는다 .>Index( 문자열 , 시작위치 ) : 시작위치 이후에 문자열 위치 찾기 Index( 문자열 , 시작위치 , 끝위치 ) : 시작위치와 끝 위치 사이의 문자열 위치 찾기

>>> colors+=["red"]>>> colors.index("red")0 >>> colors.index("red",1)12 >>> colors.index("red",1,5) SyntaxError: unexpected indent>>>

리스트2. 자료형

Page 24: 빠르게 활용하는 파이썬3 스터디(ch1~4)

현재 리스트내의 해당 문자열이 몇개 있는지 count()

Pop( 위치 ) : 해당 위치의 문자열 추출 , 생략하면 제일 뒤에 있는것 추출추출하고 나면 리스트 상에서 사라짐 .

>>> colors.pop()'red'>>> colors['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']>>> colors.pop(1)'pruple'>>> colors['red', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']>>>

해당 문자열을 리스트에서 삭제 : remove( 문자열 ) - 단순삭제 동일한 값이 2 개 있으면 , 앞에 있는것 먼저 삭제함 .

>>> colors.append("red")>>> colors['red', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray', 'red']>>> colors.remove("red")>>> colors['green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray', 'red']>>> colors.remove("red")>>> colors['green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']>>> colors.remove("red")Traceback (most recent call last): File "<pyshell#35>", line 1, in <module> colors.remove("red")ValueError: list.remove(x): x not in list

리스트2. 자료형

Page 25: 빠르게 활용하는 파이썬3 스터디(ch1~4)

sort() 메소드 : 원하는 방식으로 정렬

// 키지정 - 뒤에 한 문자만으로 정렬 . >>> def mysort(x):

return x[-1]

>>> colors['green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']

// 정한 키로 정렬 >>> colors.sort(key = mysort)>>> colors['a', 'gold', 'blue', 'white', 'g', 'black', 'green', 'r', 'y', 'gray']

//역순정렬>>> colors.sort(key=mysort, reverse = True)>>> colors['y', 'gray', 'r', 'green', 'black', 'g', 'blue', 'white', 'gold', 'a']>>>

리스트2. 자료형

Page 26: 빠르게 활용하는 파이썬3 스터디(ch1~4)

세트

- 수학에서의 집합- 값들의 모임 , 단 순서는 없음 . - { } 묶어서 정의

- a = {1,2,3}- >>> type(a)- <class 'set'>

교집합 /합집합 /차집합

>>> a.union(b){1, 2, 3, 4, 5}>>> a.intersection(b){3}>>> a-b{1, 2}>>> a|b //합집합{1, 2, 3, 4, 5}>>> a&b //교집합 {3}

세트2. 자료형

Page 27: 빠르게 활용하는 파이썬3 스터디(ch1~4)

튜플

- 리스트와 유사- [] 대신에 () 표현- 읽기전용임 , 리스트에 비해서 함수가 적지만 , 속도는 더 빠름 . - 2 개의 함수 , count() 와 index() 만 제공

>>> t = (1, 2, 3)>>> type(t)<class 'tuple'> >>> t.count(1)1>>> t.index(2)1

- 다중 할당 시 , 사용됨 . >>> a, b = 1, 2>>> print(a, b)1 2>>> (a, b) = (1, 2)>>> print(a, b)1 2

변수가 하나 더 필요한 swap 에도 간단히 해결 가능 >>> a,b = b, a>>> print(a, b)2 1

튜플2. 자료형

Page 28: 빠르게 활용하는 파이썬3 스터디(ch1~4)

>>> a(1, 2, 3)>>> type(a)<class 'tuple'>>>> b = list(a)>>> b[1, 2, 3]>>> type(b)<class 'list'>>>> c = tuple(b)>>> type(c)<class 'tuple'>>>> c(1, 2, 3)

각각 list(), set(), tuple() 로 서로서로 변환이 가능함 .

in 연산자 : 내부에 어떤 값이 있는지 확인할때 , ‘ 값 in 리스트 또는 세트 또는 튜플’

>>> 1 in aTrue>>> 2 in bTrue>>> 3 in cTrue>>> 5 in cFalse

리스트 , 세트 , 튜플2. 자료형

Page 29: 빠르게 활용하는 파이썬3 스터디(ch1~4)

사전 ( 키와 쌍으로 이루어짐 . )

// 생성자를 이용해서 사전 생성 , 키 = 값 >>> d = dict(a = 1, b = 3, c = 5)>>> type(d)<class 'dict'>>>> d{'a': 1, 'c': 5, 'b': 3}

>>> colors = {"apple":"red", "banana":"yellow"}>>> colors{'apple': 'red', 'banana': 'yellow'}>>> type(colors)<class 'dict'>>>> colors["apple"] // 키로 값 가져오기 'red'>>> colors['reds']

>>> colors['reds'] // 키값없으면 에러 Traceback (most recent call last): File "<pyshell#103>", line 1, in <module> colors['reds']KeyError: 'reds' >>> colors[0] // 인덱스 지원 안함 . Traceback (most recent call last): File "<pyshell#106>", line 1, in <module> colors[0]KeyError: 0

사전2. 자료형

Page 30: 빠르게 활용하는 파이썬3 스터디(ch1~4)

키값 추가

>>> colors["cherry"] = "red">>> colors{'cherry': 'red', 'apple': 'red', 'banana': 'yellow'}>>> colors["apple"] = "green” // 키값이 겹치면 해당키에 값 재할당 >>> colors{'cherry': 'red', 'apple': 'green', 'banana': 'yellow'}

사전 가져오기 (items())

>>> for c in colors.items():print(c)

('cherry', 'red')('apple', 'green')('banana', 'yellow')>>> for a in colors.items():

print(a)

('cherry', 'red')('apple', 'green')('banana', 'yellow')

사전2. 자료형

Page 31: 빠르게 활용하는 파이썬3 스터디(ch1~4)

키 가져오기 (keys())>>> for a in colors.keys():

print(a)

cherryappleBanana

값 가져오기 (values())

>>> for a in colors.values():print(a)

redgreenyellow

사전2. 자료형

Page 32: 빠르게 활용하는 파이썬3 스터디(ch1~4)

사전 삭제

del 이용 , 키 값으로 하나씩 삭제 가능 >>> del colors["apple"]>>> colors{'cherry': 'red', 'banana': 'yellow'}

clear() 를 이용 한번에 모두 삭제 >>> colors.clear()>>> colors{}

다양한 자료형을 섞어서 사용 가능

>>> person = {"name":"ash84", "job":{1, 2, 3}}>>> person{'job': {1, 2, 3}, 'name': 'ash84'}>>> type(person)<class 'dict'>

사전2. 자료형

Page 33: 빠르게 활용하는 파이썬3 스터디(ch1~4)

Bool - 참과 거짓을 나타내는 자료형- True, False 만이 가능함 . - 논리연산 과 각종 비교연산의 결과로 사용

>>> isexist = True>>> type(isexist)<class 'bool'>

// 대소문자 유의>>> isexist = true;Traceback (most recent call last): File "<pyshell#150>", line 1, in <module> isexist = true;NameError: name 'true' is not defined

비교연산- <=, >= ,<, >, != , ==

논리연산- and(&), or(|) not

수치를 논리연산에 사용0 = False음수를 포함한 다른 값 = True

bool2. 자료형

//bool() 함수의 사용

>>> bool(0)False>>> bool(-1)True>>> bool(1)True>>> bool() // 빈문자열 False>>> bool("asdf")True>>> bool(None)False

Page 34: 빠르게 활용하는 파이썬3 스터디(ch1~4)

모든 변수는 해당객체의 주소를 가지고 있음 .

A = 1 //1 이란 객체 생성후 A 라는 변수에 1 이란 객체의 주소를 저장함 .

//a 와 b 가 같은 객체를 공유하게 됨 . >>> a = [1, 2, 3]>>> b = a>>> a[0] = 11>>> a[11, 2, 3]>>> b[11, 2, 3]>>> id(a) // 주소 확인4346207624>>> id(b)4346207624

//얕은 복사 : 주소값을 공유하는 것 , 주소값을 복사해서 주는 형태

// 예외 : int 형의 경우 깊은 복사 ???? >>> a = 10>>> b = a>>> id(a) // 주소 확인 4296853408>>> id(b)4296853408>>> a10>>> b10>>> a = 3>>> a3>>> b10

얕은복사 /깊은복사에 대해서 2. 자료형

Page 35: 빠르게 활용하는 파이썬3 스터디(ch1~4)

강제로 깊은 복사

>>> a = [1, 2, 3]>>> b = a[:] // a 에 있는것을 처음부터 끝까지 다 복사 시켜라 . >>> a[0] = 10>>> a[10, 2, 3]>>> b[1, 2, 3]>>>

일반적인 경우의 copy 모듈 사용 ////깊은 복사 >>> import copy>>> a = [1,2,3]>>> b = copy.deepcopy(a)>>> a[0] = 30>>> a[30, 2, 3]>>> b[1, 2, 3]

얕은복사 /깊은복사에 대해서 2. 자료형

Page 36: 빠르게 활용하는 파이썬3 스터디(ch1~4)

구조

def < 함수명 > ( 인수 1, 인수 2, ..): def times(a,b):< 구문 > return a*return < 반환값 >

함수의 생성과정 (41p)

- 메모리 공간 어딘가에 함수객체가 생성- 함수이름은 생성된 메모리 공간의 주소를 가리키는 역할을 함 .

globals() : 현재 생성된 함수 객체를 볼수 있는 내장 함수 .

mytimes = times// 함수 레퍼런스 ( 함수객체에 대한주소 ) 를 다른 변수에 할당할 수 있음 . 복사가 아닌 레퍼런스 복사 // mytimes, times 둘다 동일한 함수를 가리키고 있다 .

함수의 정의3. 함수

Page 37: 빠르게 활용하는 파이썬3 스터디(ch1~4)

- 다른 언어와 다르게 어떤종류의 객체도 돌려 줄수 있다 .

- 여러값을 튜플로 묶어서 처리 할수 있음 .

- return 을 사용하지 않거나 , return 만 적으면 None 값이 리턴됨 .

- 오직 한개의 객체만 리턴 할수 있다 . 여러개의 경우 , 하나의 튜플 객체로 붂어서 리턴한다 . (44p)

return3. 함수

Page 38: 빠르게 활용하는 파이썬3 스터디(ch1~4)

- 파이썬에서 인수는 레퍼런스를 이용해서 전달

- 인수 변수의 변경가능성에 따라서 내부에서 처리하는 방식이 다르다 . 변경가능성은 타입에 따라 다르다 . (44p 예제 )

- 변경불가능한 경우 , 레퍼런스 방식으로 인수를 받아도 , 함수 내부에서의 변경이 외부에 영향을 미치지 않는다 .

global : x ->10local ; x->1global : x->10

- 변경이 가능한 경우 : 리스트 , 튜플 .. - 함수 안에서 변경하게 되면 , 외부에 있는 것도 같이 변경하게 된다 . ( 방지하려면 깊은 복사 (46p)

인수 전달3. 함수

Page 39: 빠르게 활용하는 파이썬3 스터디(ch1~4)

이름 공간 : 프로그램에서 쓰이는 이름들이 저장되는 공간

a = [1, 2, 3]

- 1, 2, 3 리스트를 담는 메모리 공간이 생성되고 , 그 메모리를 가리키는 주소를 a 가 가지고 있음 .

- “a” 라는 이름은 이름공간에 저장되게 된다 . - 이름은 미리 생성되지 않고 , 치환될때 , 만들어 지기때문에 이름은 이름공간에서 변경 , 삭제 , 검색이 가능하다 .

함수의 이름 공간

- 함수는 함수만의 이름공간을 별도로 가진다 .- 함수내부의 변수는 함수 내부의 이름공간을 참조한다 . - 만약 , 해당 변수를 함수 내부의 이름공간에서 찾지 못하면 , 상위의 이름 공간에서 찾는다 . - 함수 내부를 지역영역 , 외부를 전역영역 , 파이썬 자체에서 정의한 내용을 내장영역- LGB규칙 : 파이썬에서 이름을 검색하는 순서 - 함수에서 전역변수를 변경하려면 , global 키워드를 사용하면 됨 . (47p)- 내장영역 이름 보기 __builtins__

스코핑 룰3. 함수

Page 40: 빠르게 활용하는 파이썬3 스터디(ch1~4)

파이썬의 4 가지 함수 인수의 모드 : 기본값 인수 , 키워드 인수 , 가변인수 리스트 , 정의되지 않은 인수

기본인수 - 인수에 기본값을 지정하는것 , 인수를 전달하지 않아도 처리됨 (49p), 기본값 인수가 뒤에는 일반인수가 올수 없음 .

키워드 인수 - 인수이름으로 값을 전달 , 인수의 순서에 상관없이 인수의 이름에 맞춰서 전달 (50p), 일반인수 다음에 키워드 인수 사용 .

가변인수 리스트 - 인수의 개수가 정해지지 않은 인수 받기 , 함수 정의시 * 를 인수에 붙여 쓴다 . 해당 인수를 튜플로 처리됨 (51p)

정의되지 않은 인수 -함수 정의시 , ** 을 붙여서 정의후 , 사전 형식으로 전달하면 , 정의하지 않은 인수로 값을 전달 받을수 있다 .(52p)

위의 인수 타입들은 정의시 , 절대 일반인수 다음에 정의될수 없다 .

함수 인수 3. 함수

Page 41: 빠르게 활용하는 파이썬3 스터디(ch1~4)

Lambda 함수

- 함수의 이름이 없고 함수의 객체만 존재하는 익명 함수 (52p) - return 을 적을수 없다 . 여러개의 이수를 받을수 없고 하나의 리턴값을 돌려준다 .

- 한줄의 간단한 함수가 필요시 사용

구성

lambda 인수 : < 구문 > lambda x, y: x*y

재귀적 호출

- 함수내부에서 자기자신을 호출하는 것 (54p)

lambda 함수와 재귀적 호출 3. 함수

Page 42: 빠르게 활용하는 파이썬3 스터디(ch1~4)

Pass- 함수 및 클래스에서 아무런 동작도 수행하지 않는다 .

>>> while True: pass

- 계속 while 문만 실행함 . - 아무것도 하지 않는 함수 , 클래스를 만들경우 사용

>>> class temp:pass

pass 3. 함수

Page 43: 빠르게 활용하는 파이썬3 스터디(ch1~4)

help()

- API 문서를 보여주는 help- help(print), help(globals) 내장함수에 대한 정보를 알수 있다 . - 사용자 정의의 함수도 help 를 통해서 볼 수 있다 .

__doc__속성

- 함수에 특별한 설명을 달고 싶을때 사용 - plus.__doc__=“return the sum of a, b” // 이런 식으로 설정- help(plus) 를 하면 , 해당 내용을 볼 수 있다 .

- 함수 생성시 , 함수 처음 시작 부분에 (: 이후 ) “””, “ 를 이용해서 지정 할 수도 있다 . (58p)

__doc__ 와 help3. 함수

Page 44: 빠르게 활용하는 파이썬3 스터디(ch1~4)

for 문의 동작원리

- 순회가능한 객체 ( 리스트 , 튜플 , 문자열 ) 에서 이터레이터 객체 반환- 이터레이터 객체의 __next()__ 함수를 호출하 , StopIteration 예외를 만날때까지 반복

- 이터레이터는 내부의 반복문을 관리해 주는 역할

it = iterator(s) // 이터레이터 객체 가져오기 next(it) // 현재 이터레이터가 가리키고 있는 값 리턴 , 객체의 다음 요소 가리팀

it.__next()__() //직접실행 가능 .

이터레이터3. 함수

Page 45: 빠르게 활용하는 파이썬3 스터디(ch1~4)

- 함수는 return 후에 , 함수 객체가 스택에서 사라진다 . - return 대신에 yield 를 적어주면 함수를 끝내지 않고 호출한 곳으로 값을 전달함 . (60p)

def abc():data = “abc”for char in data: yield char

- yield 를 사용하면 , 함수의 상태가 그대로 보존 시킬수가 있다 . - 위의 예제에서 yield 이후에 for 문이 초기화 되지 않아서 , a, b, c, 를 차례로 호출 할

수가 있다 .

- 메모리 절약이 가능하다 . 미리 데이터를 만들어 놓을 필요없이 생성이 가능함 .

제너레이터3. 함수