본문 바로가기
python/Python으로 웹 스크래퍼 만들기

1. Theory_1

by 2cong 2020. 3. 20.

<노마드코더 - python으로 웹 스크래퍼 만들기>

1.0 Data Types of Python

variable type

  • number : int (정수)
  • string : text 형식 / 큰 따옴표(" ") 또는 작은 따옴표(' ') 로 감싸야함
  • boolean : True 혹은 False (첫문자 대문자)
    • 0 = False
    • 0을 제외한 모든 정수 = True
  • float : 실수
  • None : '존재하지 않음/ 값 없음'
    • javascript의 null에 가까운 데이터 타입
    • <class 'NoneType'>
  • Sequence Types
    • list, tuple, range

1.1 Lists in Python

  • Mutable Sequence Types
  • list = 많은 value들을 열거하는 것
  • [ ] 로 감싸주고 ,를 사용하여 구분

Common Sequence Operations

다음 표의 연산들은 대부분의 가변(list)과 불변 시퀀스(tuple, range)에서 지원

 

표에서 s 와 t 는 같은 형의 시퀀스
n, i, j, k 는 정수
x 는 s 가 요구하는 형과 값 제한을 만족하는 임의의 객체

  • x in s
weekday=["Mon","Tue","Wed","Thur","Fri"]
print ("Mon"in weekday) # True
print ("Monday" in weekday) # False

 

  • s + t
weekday=["Mon","Tue","Wed","Thur","Fri"]
weekend=["Sat","Sun"]
print (weekday+weekend)
# ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']

 

  • s*n
weekend=["Sat","Sun"]
print (weekend*3) # ['Sat', 'Sun', 'Sat', 'Sun', 'Sat', 'Sun']
print (3*weekend) # ['Sat', 'Sun', 'Sat', 'Sun', 'Sat', 'Sun']

 

  • s[i] : 0부터 시작
weekday=["Mon","Tue","Wed","Thur","Fri"]
print (weekday[3]) # Thur

 

  • s[i:j] : i부터 j바로 전 까지
weekday=["Mon","Tue","Wed","Thur","Fri"]
print (weekday[1:4]) # ['Tue', 'Wed', 'Thur']

 

  • s[i:j:k] : i부터 j바로 전 까지 k의 간격으로
num=[1,2,3,4,5,6,7,8,9]
print (num[2:8]) # [3, 4, 5, 6, 7, 8]
print (num[2:8:1]) # [3, 4, 5, 6, 7, 8]
print (num[2:8:2]) # [3, 5, 7]
print (num[2:8:3]) # [3, 6]
print (num[2:8:4]) # [3, 7]

 

  • len(s)
num=[1,2,3,4,5,6,7,8,9]
print (len(num)) # 9

 

  • min(s), max(s)
num=[1,2,3,4,5,6,7,8,9]
print (min(num)) # 1
print (max(num)) # 9

 img ref) https://docs.python.org/ko/3/library/stdtypes.html#sequence-types-list-tuple-range


Mutable Sequence Types

  • s[i]=x
week=["Mon","Tue","Wed","Thur","Fri"]
print (week) # ['Mon', 'Tue', 'Wed', 'Thur', 'Fri']

week[3]="Thurs"
print (week) # ['Mon', 'Tue', 'Wed', 'Thurs', 'Fri']

 

  • s[i:j]=t (t는 iterable)

    • iterable > 반복 가능한 객체

     

 

 

 

num=[1,2,3,4,5,6,7,8,9]
num[3:8]=[100,200,300,400]
print (num) # [1, 2, 3, 100, 200, 300, 400, 9]

 

  • s.append(x)
week=["Mon","Tue","Wed","Thur","Fri"]
print (week) # ['Mon', 'Tue', 'Wed', 'Thur', 'Fri']
week.append("Sat")
print (week) # ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat']

만약 두개를 추가한다면

   

    1 )

week=["Mon","Tue","Wed","Thur","Fri"]
week.append("Sat","Sun")
print (week) # TypeError: append() takes exactly one argument

  

   2 )

week=["Mon","Tue","Wed","Thur","Fri"]
week.append(["Sat","Sun"])
print (week) # ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', ['Sat', 'Sun']]

 

  • s.reverse()
    week=["Mon","Tue","Wed","Thur","Fri"]
    week.reverse()
    print (week) # ['Fri', 'Thur', 'Wed', 'Tue', 'Mon'] 

img ref) https://docs.python.org/ko/3/library/stdtypes.html#sequence-types-list-tuple-range

 

1.2 Tuples and Dicts

Tuples

  • Immutable Sequence Types
  • 많은 value들을 열거하는 것
  • ( ) 로 감싸주고 ,를 사용하여 구분
week={"Mon","Tue","Wed","Thur","Fri"}

Dicts

  • { } 사용
  • key와 value 사이 : 이용해서 구분 (key:value)
  • , 를 이용하여 쌍을 구분
jina = {"name":"Jina","korean":True,"coffee":"Ice_Americano"}
print (jina["name"]) # Jina

 

  • dictionary에 내용 추가
jina = {"name":"Jina","korean":True,"coffee":"Ice_Americano"}
jina["hungry"]=True
print (jina) # {'name': 'Jina', 'korean': True, 'coffee': 'Ice_Americano', 'hungry': True}

1.3 Built-in Functions

  • Type 바꾸는 함수
    • bool( )
    • int( )
    • float( )
    • str( )

bool() 예시)

print (bool(4)) # True
print (bool(0)) # False

img ref) https://docs.python.org/ko/3/library/functions.html

1.4 Creating a Your First Python Function

  • python : Function define
  • 들여쓰기로 function의 시작과 끝 구분
    (javascript의 { } 가 하는 일을 : 와 들여쓰기가 대신함)
def function():
    <수행할 문장>

1.5 Function Arguments

  • Parameter와 Argument를 크게 구분하지는 않음

  • 매개변수는 변수(variable)로, 전달인자는 값(value)으로 보는 것이 일반적

 

parameter

#    parameter ( 매개변수 )
   
def plus(a, b):
      return a + b
   
#  함수의 정의 부분에 나열되어 있는 변수
#  여기서는 plus 함수 정의시에 사용되는 a, b를 parameter

 

argument

#    argument ( 전달인자 )
   
result = plus(1, 2)
   
#   함수를 호출할때 전달 되는 실제 값
#   여기서는 plus 라는 함수에 넣어주는 값 1, 2를 argument

 

ref) https://wayhome25.github.io/etc/2017/12/31/parameter-argument/

def function(Parameter):
    <수행할 문장>

def hello(who):
    print ("Hello",who)

hello("jina") # Hello jina
hello("world") # Hello world

 

  • 만약 argument에 아무것도 없을 때
def hello(who):
    print ("Hello",who)

hello()
# TypeError: hello() missing 1 required positional argument: 'who'

위와 같이 Error 발생

 

  • parameter에 default value주기
def hello(who="python"):
    print ("Hello",who)

hello() # Hello python

위와 같이 default value를 주면 argument에 아무것도 없을 때 default value 출력

1.6 Returns

function을 호출할 때 function의 결과 주의

예시) 함수의 결과가 print & return 인 경우

 

def p_add(a,b):
     print(a+b)     # 함수의 결과 print

def r_add(a,b):
     return a+b    # 함수의 결과 return

p_result=p_add(2,3)  # 5
r_result=r_add(2,4)

print (p_result)  # None
print (r_result)  # 6

함수는 한 개의 return만 가질 수 있음

def r_add(a,b):
    return a+b
    print ("더하기가 끝났습니다.")

print (r_add(2,3))   # 5 

return아래의 print는 실행되지 않음
python : 하나의 결과를 return하면 그 function은 종료됨

1.7 Keyworded Arguments

Positional Argument

  • 위치에 의존적인 인자

예시 )

def sub(a,b):
    return a-b

print (sub(2,3)) # -1

위 예시를 보면 두개의 인자는 순서에 의해서 구분됨 (a=2, b=3으로)

 

만약 인자의 순서를 신경쓰고 싶지 않은 경우에는 Keyword argument 사용

Keyword Argument

  • 위치에 따라서 정해지는 것이 아니라 argument의 이름으로 쌍을 지어주는 것

예시 )

def sub(a,b):
    return a-b

result=sub(b=100,a=300) 
print (result) # 200

print (sub(b=20,a=30)) # 10

위와 같이 인자에 값을 지정해주면 순서와 상관없이 인자 구분 가능

 

def say_hello(name, lang):
       return "Hello i am " + name+ ". I am studying " + lang

hello_1 = say_hello ("jina", "python")
hello_2 = say_hello (lang="python", name="jina")

print (hello_1)  # Hello i am jina. I am studying python
print (hello_2)  # Hello i am jina. I am studying python

hello_1 : positional argument
hello_2 : keyword argument


format ( )

" 문자열 ". formtat( ) 형식 사용

 

  • 문자열 대입

    apple = "I eat { } apples".format("five")
    print (apple) # I eat five apples

 

 

  • format()을 function에 적용

def say_hello(name, lang):
       return "Hello i am { }. I am studying { } ".format(name,lang)
       
hello=say_hello("jina","python")
print (hello)  # Hello i am jina. I am studying python

 

{ } 에 숫자를 넣어서 순서 지정 가능 / 숫자는 0부터 시작

 

def say_hello(name, lang):
       return "Hello i am {0}. I am studying {1} ".format(name,lang)
       
hello=say_hello("jina","python")
print (hello)  # Hello i am jina. I am studying python

 

def say_hello(name, lang):
       return "Hello i am {1}. I am studying {0} ".format(name,lang)
       
hello=say_hello("jina","python")
print (hello) #  Hello i am python. I am studying jina

 

 

  • format() + keyword argument
def say_hello(name, lang):
       return "Hello i am { }. I am studying { } ".format(name,lang)
       
hello_1=say_hello(name="jina", lang="python")
hello_2=say_hello(lang="jina", name="python")
       
print (hello_1)  #  Hello i am jina. I am studying python
print (hello_2)  #  Hello i am python. I am studying jina

f 문자열 포매팅

파이썬 3.6 버전부터 사용할 수 있는 기능

다음과 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능 사용 가능

  • f 문자열 포매팅은 아래와 같이 변수 값을 생성한 후에 그 값을 참조할 수 있음

    name = '홍길동'
    age = 30
    ex=f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
    print (ex) # 나의 이름은 홍길동입니다. 나이는 30입니다.

 

  • f 문자열 포매팅은 표현식을 지원
    표현식 : 문자열 안에서 변수와 +, -와 같은 수식을 함께 사용하는 것

    age = 30
    ex=f'나는 내년이면 {age+1}살이 된다.'
    print (ex) # 나는 내년이면 31살이 된다.

ref ) https://wikidocs.net/13#_16

 

  • f 문자열 포매팅을 function에 적용

def say_hello(name, lang):
       return f"Hello i am {name}. I am studying {lang} "
       
hello=say_hello("jina","python")
print (hello)  # Hello i am jina. I am studying python

 

  • f 문자열 포매팅 + keyword argument
def say_hello(name, lang):
       return f"Hello i am {name}. I am studying {lang} "
       
hello=say_hello(lang="python", name="jina")
print (hello)  #  Hello i am jina. I am studying python

'python > Python으로 웹 스크래퍼 만들기' 카테고리의 다른 글

2. Building a Job Scrapper_4  (0) 2020.03.25
2. Building a Job Scrapper_3  (0) 2020.03.25
2. Building a Job Scrapper_2  (0) 2020.03.24
2. Building a Job Scrapper_1  (0) 2020.03.24
1. Theory_2  (0) 2020.03.24

댓글