빅데이터 프로그래밍/Python

[Python] 26. [Scraping] 재귀 호출 함수, Lamda 함수 이용 , random 난수 발생, LX

밍글링글링 2017. 8. 5.
728x90
01. 재귀 호출 함수
- 자기자신을 계속 호출하는 로직으로 일반적으로 1000회 이상 반복하면 에러가 발생함으로
   재귀호출을 중지하는 제어문이 필용함.
 
PyDev setting
project name: crawler
 
1. 모든 처리를하고 재귀함수를 호출하는 경우
 
[실행 화면]
recursionLevel: 5
recursionLevel: 4
recursionLevel: 3
recursionLevel: 2
recursionLevel: 1
recursionLevel: 0
 
▷ /basic/recursion1.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

def process(recursionLevel):
    print('recursionLevel: ' + str(recursionLevel))
    
    recursionLevel = recursionLevel - 1
    
    if (recursionLevel < 0):
        return
    
    process(recursionLevel) # 자기 자신 호출
    

if __name__ == '__main__':
    process(5)
    
    

-------------------------------------------------------------------------------------
 
 

2. 재귀호출을 먼저하고 로직을 처리하는 경우

 
[실행 화면]
recursionLevel: 0
recursionLevel: 1
recursionLevel: 2
recursionLevel: 3
recursionLevel: 4
 
▷ /basic/recursion2.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

def process(recursionLevel):
    recursionLevel = recursionLevel - 1
    if (recursionLevel < 0):
        return
    process(recursionLevel)
    print('recursionLevel: ' + str(recursionLevel))    

if __name__ == '__main__':
    process(5)

-------------------------------------------------------------------------------------
 
 

02. 람다 표현식(익명 함수(lambda function))

- 한줄로 표현하는 함수
- lambda 라는 키워드로 익명 함수를 정의할 수 있다.
- 형식: lambda 인자1,인자2, … : 표현식
- map: list의 요소를 순차적으로 가져올 수 있는 Iterator 객체 생성 
 
[실행 화면]
람다 함수 실습
3
-----------------------------------
<class 'list'>
10
15
20
25
30
-----------------------------------
8
12
16
20
24
-----------------------------------
6
9
12
15
18
 
-----------------------------------
 
 
▷ /basic/lamdaExam.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

print('람다 함수 실습')
add = lambda a, b : a+b # 람다 함수 선언
print(add(1,2))
print('-----------------------------------')

x = [2, 3, 4, 5, 6]  # list
y = []  # list
for v in x : # list 요소 순차적 추출 2, 3, 4, 5, 6
    y = y + [v * 5]

print(type(y)) # <class 'list'>

for i in y:
    print(i)

print('-----------------------------------')
x = [2, 3, 4, 5, 6]
y = [v * 4 for v in x]
    
for i in y:
    print(i)
    
print('-----------------------------------')
data = [2, 3, 4, 5, 6]
# map: list의 요소를 순차적으로 가져올 수 있는 Iterator 객체 생성 
# data list에서 su 변수로 원소를 꺼낸후 3을 곱해 map의 요소로 사용
mapresult = map(lambda su : su * 3, data)
    
# print(str(list(mapresult)))

for i in mapresult: # map
    print(i)
     

-------------------------------------------------------------------------------------
 
 
 
03. random 난수 발생
 
[실행 화면]
0.8792920747978517
0.8925141487274022
0.41608222846384024
0.9763061019930674
0.5175325632759177
-----------------------------
6
7
4
2
7
-----------------------------
7
9
7
9
9
-----------------------------
7
8
7
9
7
-----------------------------
-4
4
3
5
-2
-----------------------------
 
 
▷ /basic/randomExam.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import random

for i in range(5): # 0 ~ 4
    print(random.random())  # 0.0 ~ 1.0 미만
print('-----------------------------')

for i in range(5):
    print(random.randint(1, 10))  # 1 ~ 10 
print('-----------------------------')

for i in range(5):
    print(random.randint(0, 5)+5)  # 5 ~ 10 
print('-----------------------------')

for i in range(5):
    print(random.randint(1, 5)+5)  # 6 ~ 10 
print('-----------------------------')

for i in range(5):
    print(random.randint(-80, 0)+40)  # -40 ~ +40 
print('-----------------------------')



-------------------------------------------------------------------------------------
 
 
04. LXML 설치
whl(휠): 파이썬 패키지 파일(Eclipse Plugin과 비슷함)
pip: 파이썬 패키지 관리 툴, 설치 및 삭제, update 지원
- Python에서 XML parser로서 주로 이용되는 패키지
 
1. 다운로드
- lxml-3.7.3-cp36-cp36m-win_amd64.whl (md5)  다운로드
 
2. 설치
F:\201701_python\setup>pip install lxml-3.7.3-cp36-cp36m-win_amd64.whl
Processing f:\201701_python\setup\lxml-3.7.3-cp36-cp36m-win_amd64.whl
Installing collected packages: lxml
Successfully installed lxml-3.7.3
 
F:\201701_python\setup>pip list
DEPRECATION: The default format will switch to columns in the future. You can us
e --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.con
f under the [list] section) to disable this warning.
beautifulsoup4 (4.5.3)
lxml (3.7.3)
pip (9.0.1)
setuptools (28.8.0)
six (1.10.0)
wxPython-Phoenix (3.0.3.dev2902+a79cd32)
 
 
3. 패키지 인식이 안될시 Eclipse 재시작

 

 

728x90

댓글