제 1회 D2 대학생 세미나

140분의 Python

소개부터 문법, 실습까지

김태훈 / @carpedm20

Python

Python의 아버지

귀도 반 로섬

1991년 크리스마스에 할거 없어서 만들었다고...

귀도가 평소에 좋아하는 코메디 프로그램 "Monty Python's Flying Circus"에서 유래

파이썬의 가장 큰 특징은

스크립트 언어

컴파일 안한다고 합니다

            
vi pyramid.cpp
g++ pyramid.cpp -o pyramid
./pyramid
          
            
vi pyramid.py
python pyramid.py
          
소스코드가 곧 실행파일

다른 스크립트 언어들

왜 배워야 할까?

스크립트 언어 (?)

  • 빠르게 짜고

  • 빠르게 확인하고

  • 빠르게 고친다

(feat. 파이썬 인터프리터)

컴파일러

코드를 컴퓨터에서 즉시 실행될 수 있는 형태의

실행 파일로 바꾸어 주는 프로그램.


인터프리터

코드를 한 줄씩 읽어들여서 실행하는 프로그램

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          
            
$ python
            
          

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          
            
$ python
>>>
            
          

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          
            
$ python
>>> a = 13
            
          

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          
            
$ python
>>> a = 13
>>> print a
            
          

인터프리터의 두가지 사용법

            
$ python pyramid.py
// 실행됨
            
          
            
$ python
>>> a = 13
>>> print a
13
            
          

한쪽은 에디터 한쪽은 인터프리터

보통은 복사 붙여넣기 (혹은 ipython)

b에 값이 잘 저장되어있는가?

print b 로 쉽게 확인

print b+4 로 쉽게 확인

오류?!

오류의 원인을 찾기

다른 명령어 테스트

개발과 테스트를 동시에

실시간으로 결과를 확인하며 빠른 코딩

피라미드를 만들어 볼까요?

C++

            
#include < iostream>
using namespace std;

int main() {
    int row;
    cout << "row : ";
    cin >> row;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < row - i; j++)
            cout << ' ';

        for (int j = 0; j < 2 * i + 1; j++)
            cout << '*';

        cout << endl;
    }
}
            
          

Python

            
row = int(raw_input("row : "))

for i in range(row):
    print " " * (row - i) + "*" * (2 * i + 1)
            
          

Ruby

            
row = gets.chomp

1.upto(w) { |i| puts " "*(w-i)+"*"*(i*2-1) }
            
          

중요한 것은

줄 수가 아닌 간결함

파이썬의 특징

  1. 코드가 읽기 쉽다
  2. 문법이 간결하다
  3. 개발속도가 빠르다
  4. 프로그래밍이 재밌다

1. 코드가 읽기 쉽다

              
if "검색" is "구글":
    print "개발자"
else:
    print "일반인"

if "여친" not in ["김태희", "천송이", "공효진"]:
    print "여친이 없습니다"
              
            

2. 문법이 간결하다

라고 쓰고 "우아하다" 라고 읽는다
              
langs = ['python', 'c++', 'java']

for lang in langs:
    if lang in ['python']:
        print lang + " is good"
    else:
        print lang + " is not fun"
                
              
              
#include < algorithm>
string langs[3] = ["python","c++","java"];

int size = sizeof(langs)/sizeof(*langs);
for (int i=0; i < size; i++) {
    if (find(nums, nums+size, i) != nums+size) {
        cout << langs[i] << " is good" << endl;
    } else {
        cout << langs[i] << " is not fun\n";
    }
}
              
            

3. 개발속도가 빠르다

Life is too short, you need python.

4. 프로그래밍이 재밌다

나에게 파이썬만큼 프로그래밍을 하는 순간을

즐기게 해준 언어는 없었다

그러면 파이썬은 장점만 있나?

C++은 쓸 필요가 없는건가?

가장 큰 단점

느리다

출처 : 메일 서비스 파이썬 적용 경험 (NAVER 개발자 블로그)

느린 이유

  • 1. 동적 타입
  • 2. 코드 최적화의 부족
              
main() {
    long i;
    double x;

    for( i=0; i<100000; i++) {
        x = sin(.3)
    }

    printf("%ld\n", i);
}
              
            
              
main() {
    long i = 100000;
    printf("%ld\n", i);
}
            
          

그래도 파이썬을 쓰는 이유는?

생산성

상대적으로 쉬운 문법 덕분에, 생각을 코드로 쉽게 표현할 수 있다

출처 : 메일 서비스 파이썬 적용 경험 (NAVER 개발자 블로그)

파이썬으로 무엇을 할 수 있을까?

제가 한 것

  1. 봇 만들기
  2. 웹 만들기
  3. 라이브러리 만들기

라이브러리

파이썬을 즐기는 개발자들이 이미 짠 코드

즉, 내가 만들고 싶은것에만 집중할 수 있다

자동으로 의존성 라이브러리를 설치

Python HTTP Requests for Humans

Beautifulsoup

Quick and Easy web parser

슬쩍 보는 파이썬 문법

Python

C++

            
my_var = 3
            
          
            
int my_var = 3
            
          

Python

C++

            
my_var = 3

my_var += 2
my_var -= 1
            
          
            
int my_var = 3

my_var += 2
my_var -= 1
            
          

Python

C++

            
my_var = 3

my_var += 2
my_var -= 1

print my_var
            
          
            
int my_var = 3

my_var += 2
my_var -= 1

cout << my_var << endl;
            
          

Python

C++

            
my_var = 1
my_string = "Hello"
            
          
            
int my_var = 1
string my_string = "Hello"
            
          

Python

C++

            
my_var = 1
my_string = "Hello"
my_string2 = ' World!'
            
          
            
int my_var = 1
string my_string = "Hello"
// impossible
            
          

Python

C++

            
my_var = 1
my_string = "Hello"
my_string2 = ' World!'

print my_string + my_string2
            
          
            
int my_var = 1
string my_string = "Hello"
// impossible

cout << my_string << " World!" << endl;
            
          

Python

C++

            
my_var = 1
my_string = "Hello"
my_string2 = ' World!'

print my_string + my_string2

my_var, my_string = my_string, my_var
            
          
            
int my_var = 1
string my_string = "Hello"
// impossible

cout << my_string << " World!" << endl;

// impossible
            
          

Python

C++

            
colors = ["red", "blue", "green"]
            
          
            
string colors[2] = {"red", "blue"};
            
          

Python

C++

            
colors = ["red", "blue", "green"]

colors[0] = "black"
            
          
            
string colors[2] = {"red", "blue"};

colors[0] = "black";
            
          

Python

C++

            
colors = ["red", "blue", "green"]

colors[0] = "black"

print colors[1]
# blue
            
          
            
string colors[2] = {"red", "blue"};

colors[0] = "black";

cout << colors[1] << endl;
// blue
            
          

Python

C++

            


my_dict = {"me": 23, "girlfriend": "20"}
            
          
            
#include < map>

// partially possible
map< string, int> my_dict = {"me": 23};
            
          

Python

C++

            


my_dict = {"me": 23, "girlfriend": "20"}

print my_dict["me"]
# 23
            
          
            
#include < map>

// partially possible
map< string, int> my_dict = {"me": 23};

cout << my_dict["me"] << endl;
// 23
            
          

Python

C++

            
nums = range(10)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
            
          
            
int nums[10];
for (int i=0; i<10; i++)
    nums[i] = i;
            
          

Python

C++

            
nums = range(10)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


for num in nums:
            
          
            
int nums[10];
for (int i=0; i<10; i++)
    nums[i] = i;

int size=sizeof(langs)/sizeof(*langs);
for (int i=0; i < size; i++) {
            
          

Python

C++

            
nums = range(10)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


for num in nums:
    if num in [3, 6, 9]:
        print "3의 배수 입니다"
        break
            
          
            
int nums[10];
for (int i=0; i<10; i++)
    nums[i] = i;

int size=sizeof(langs)/sizeof(*langs);
for (int i=0; i < size; i++) {
    if (i % 3 == 0)
        cout << "3의 배수입니다" << endl;
        break;
            
          

Python

C++

            
nums = range(10)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


for num in nums:
    if num in [3, 6, 9]:
        print "3의 배수 입니다"
        break
    else:
        continue
            
          
            
int nums[10];
for (int i=0; i<10; i++)
    nums[i] = i;

int size=sizeof(langs)/sizeof(*langs);
for (int i=0; i < size; i++) {
    if (i % 3 == 0)
        cout << "3의 배수입니다" << endl;
        break;
    else
        continue
}
            
          

Python

C++

            
nums = range(10)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


for num in nums:
    if num in [3, 6, 9]:
        print "3의 배수 입니다"
        break
    else:
        continue

while nums[1] == 1:
    print "무한 루프"
            
          
            
int nums[10];
for (int i=0; i<10; i++)
    nums[i] = i;

int size=sizeof(langs)/sizeof(*langs);
for (int i=0; i < size; i++) {
    if (i % 3 == 0)
        cout << "3의 배수입니다" << endl;
        break;
    else
        continue
}

while (nums[1] == 1)
    cout << "무한 루프" << endl;
            
          

Python

            
def sum(numbers = [1, 2, 3]):
            
          

Python

            
def sum(numbers = [1, 2, 3]):
    if -1 in numbers:
        return False
            
          

Python

            
def sum(numbers = [1, 2, 3]):
    if -1 in numbers:
        return False
    else:
        ans = 0

        for i in numbers:
            ans += i

        return ans
            
          

Python

            
def sum(numbers = [1, 2, 3]):
    if -1 in numbers:
        return False
    else:
        ans = 0

        for i in numbers:
            ans += i

        return ans

print sum() // 6
            
          

Python

            
def sum(numbers = [1, 2, 3]):
    if -1 in numbers:
        return False
    else:
        ans = 0

        for i in numbers:
            ans += i

        return ans

print sum() // 6
print sum([1, 3, 5, 7, 9]) // 25
            
          

Python

            
def sum(numbers = [1, 2, 3]):
    if -1 in numbers:
        return False
    else:
        ans = 0

        for i in numbers:
            ans += i

        return ans

print sum() // 6
print sum([1, 3, 5, 7, 9]) // 25
if sum([-1, 3]):
    print "나라가 허락한 유일한 마약, 파이썬..."
            
          

파이썬으로 무엇을 할 수 있을까?

파이썬으론 모든것을 할 수 있다!

Life is short, you need Python

THE END

김태훈 / @carpedm20

Reference