- Created : 2016/09/18
- Modified: 2019/05/03
ํ์ด์ฌ์ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ง์ ๋ก์ง์ ํํ์ ํ ์ค๋ก ์ฝ๊ฒ ์์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, URL์์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋์ฝ๋ํด์ผ ํ๋ค๊ณ ์๊ฐํด๋ณด์. ๋ค์ ์์์ ๊ฐ ์ฟผ๋ฆฌ ๋ฌธ์์ด ํ๋ผ๋ฏธํฐ๋ ์ ์ ๊ฐ์ด๋ค.
from urllib.parse import parse_qs
# urllib.parse๋ python 3์ ๋ชจ๋์ด๋ค. 2์ ๊ฒฝ์ฐ์ urlparse ๋ชจ๋์ ์ฌ์ฉํ์.
my_values = parse_qs('red=5&blue=0&green=',keep_blank_values=True)
# parse_qs์์ 'qs'๋ 'query string'์ ์ฝ์์ธ๋ฏ.parse_qs() ์ ์ธ์์ ๋ฐ๋ผ ํน์ ํค์ ๋ํ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ์๋ ์๊ณ , ํ ๊ฐ๋ง ์์ ์๋ ์์ผ๋ฉฐ, ๊ฐ์ด ๋น์ด์์ ์๋ ์๋ค. ๋์ ๋๋ฆฌ์ get ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ๊ฒ์ด๋ค.
print('Red ',my_values.get('red'))
print('Green ',my_values.get('green'))
print('Opacity ',my_values.get('opacity'))
Red ['5']
Green ['']
Opacity Nonemy_values ๋ผ๋ ๋์
๋๋ฆฌ์๋ 'opacity'๋ผ๋ ํค๊ฐ ์๋ค. dict.get ๋ฉ์๋๋ ์๋ ํค๋ฅผ ์๊ตฌ๋ฐ์์ ๋ None์ ๋ฐํํ๋ค.
'green'์ฒ๋ผ ๊ฐ์ด ๋น์ด ์๊ฑฐ๋, 'opacity'์ฒ๋ผ None์ด ๋ฐํ๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 0์ด ํ ๋น๋๋ค๋ฉด ์ข์ ๊ฒ์ด๋ค.
์ด ์์
์ ๋ถ(bool)๋ก ์ฒ๋ฆฌํ ์๋ ์๋ค.
ํ์ด์ฌ์ ๋ฌธ๋ฒ ๋๋ถ์ ๋ถ ํํ์์ผ๋ก๋ ์์ฃผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ ์ฌ์ฉํ๋ ํธ๋ฆญ์ ํ์ด์ฌ์ ์กฐ๊ฑด๋ฌธ์์๋ ๋น ๋ฌธ์์ด, ๋น ๋ฆฌ์คํธ, 0์ด ๋ชจ๋ False๋ก ์ฒ๋ฆฌ๋๋ค๋ ์ ์ด๋ค.
๋ฐ๋ผ์ ๋ค์ ํํ์๋ค์ ๊ฒฐ๊ณผ๋ ์ฒซ ๋ฒ์งธ ์๋ธ ํํ์์ด False์ผ ๋ 'or' ์ฐ์ฐ์ ๋ค์ ์ค๋ ์๋ธ ํํ์์ ํ๊ฐํ ๊ฐ์ด ๋๋ค.
red = my_values.get('red', [''])[0] or 0
green = my_values.get('green', [''])[0] or 0
opacity = my_values.get('opacity', [''])[0] or 0
print('Red : %r' % red)
print('Green : %r' % green)
print('Opacity : %r' % opacity)
Red : '5'
Green : 0
Opacity : 0'red'์ ๊ฒฝ์ฐ๋ ํค๊ฐ my_values ์์ ์๋ค. ๊ฐ์ '5'๋ง ์๋ ๋ฆฌ์คํธ์ด๋ค. ์์์ ์ผ๋ก True๊ฐ ๋๋ฏ๋ก 'red'๋ or ํํ์์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ํ ๋น ๋ฐ๋๋ค.
'green'์ ๊ฒฝ์ฐ๋ ํค๋ ์์ผ๋ ๊ฐ์ด ์กด์ฌํ์ง ์๋๋ค. ๋น ๋ฌธ์์ด์ ์์์ ์ผ๋ก False์ด๋ฏ๋ก or ํํ์์ ๊ฒฐ๊ณผ๋ 0์ด ๋๋ค.
'opacity'์ ๊ฒฝ์ฐ ํค ์์ฒด๊ฐ ์กด์ฌํ์ง ์๋๋ค. get ๋ฉ์๋๋ ๋์ ๋๋ฆฌ์ ํค๊ฐ ์์ผ๋ฉด ๋ ๋ฒ์งธ ์ธ์๋ฅผ ๋ฐํํ๋ค. ์์ ์ฝ๋์์ 'green'๊ณผ 'opacitiy'๊ฐ ๊ฐ์ ๋์์ ํ๋ค.
์ด ํํ์์ ์ฝ๊ธฐ๊ฐ ์ด๋ ค์ธ ๋ฟ๋ง ์๋๋ผ ์ฌ์ ํ ํ์ํ ์์ ์ ๋ค ์ํํ์ง๋ ์๋๋ค. ์์์ ์ซ์ 5๋ '5', ์ฆ ๋ฌธ์ 5๋ก ํํ๋์๋๋ฐ ์ด๋ฅผ ์ ์ํํด์ผ ํ ๊ฒ์ด๋ค.
red = int(my_values.get('red', [''])[0] or 0)์ ์ฝ๋๋ ์ฝ๊ธฐ ๋ฌด์ฒ ์ด๋ ต๋ค. ์๊ฐ์ ๋ฐฉํด ์์๊ฐ ๋๋ฌด ๋ง๋ค. ์ฝ๋๋ฅผ ์ฒ์ ๋ณด๋ ์ฌ๋์ ์์ ์ดํดํ๊ธฐ ์ํด ๊ฐ ๋ถ๋ถ์ ๋ผ์ด๋ด์ ์ดํดํ๋๋ผ ์๊ฐ์ ๋ง์ด ๋บ๊ธธ ๊ฒ์ด๋ค.
์ฝ๋๊ฐ ํ ์ค๋ก ์งง๊ธฐ๋ ํ์ง๋ง, ์ ๋ง ์ค์ํ ๊ฑด ๊ฐ๋ ์ฑ์ด๋ค. ํ ์ค์ ๋ชจ๋ ์ง์ด๋ฃ๋ ๊ฑด ์๋ฏธ๊ฐ ์๋ค.
ํ์ด์ฌ 2.5์ ์ถ๊ฐ๋ if/else ์กฐ๊ฑด์(์ผํญ ์กฐ๊ฑด์)์ ํ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์งง๊ฒ ํ๋ฉด์๋ ๋ ๋ช ํํ๊ฒ ํํํ ์ ์๋ค.
red = my_values.get('red',[''])
red = int(red[0]) if red[0] else 0์ด ์ฝ๋๊ฐ ํ ์ค ๋ ๋์ด๋๊ธด ํ์ง๋ง ํจ์ฌ ๋ซ๋ค. ๋ ๋ณต์กํ ์ํฉ์์๋ if / else ์กฐ๊ฑด์์ ์ฐ๋ฉด ์ฝ๋๋ฅผ ๋ช ํํ๊ฒ ์ดํดํ ์ ์๋ค. ์์ ๋ ํผ์ณ ๋ชจ๋ ๋ก์ง์ ๊ธธ๊ฒ ๋ณด๋ฉด ๋ ์ง๊ด์ ์ด๋ค.
green = my_values.get('green', [''])
if green[0]:
green = int(green[0])
else:
green = 0์ด ๋ก์ง์ ๋ฐ๋ณตํด์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ํฌํผ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ ์ข๋ค.
def get_first_int(values, key, default=0):
found = values.get(key, [''])
if found[0]:
found = int(found[0])
else:
found = default
return found์์ ํฌํผํจ์๋ฅผ ์ฐ๋ฉด or๋ฅผ ์ฌ์ฉํ ๋ณต์กํ ํํ์์ด๋ if/else ์กฐ๊ฑด์์ ์ฌ์ฉํ ๋ ์ค์ง๋ฆฌ ๋ฒ์ ผ์ ์ธ ๋๋ณด๋ค ํธ์ถ ์ฝ๋๊ฐ ๋ ๋ช ํํด์ง๋ค.
green = get_first_int(my_values, 'green')ํํ์์ด ๋ณต์กํด์ง๊ธฐ ์์ํ๋ฉด ์ต๋ํ ๋นจ๋ฆฌ ํด๋น ํํ์์ ์์ ์กฐ๊ฐ์ผ๋ก ๋ถํ ํ๊ณ , ๋ก์ง์ ํฌํผ ํจ์๋ก ์ฎ๊ธฐ๋ ๋ฐฉ์์ ๊ณ ๋ คํด์ผ ํ๋ค. ๋ฌด์กฐ๊ฑด ์งง์ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ๋ณด๋ค๋ ๊ฐ๋ ์ฑ์ ์ ํํ๋ ํธ์ด ๋ซ๋ค. ์ด๋ ๊ฒ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๋ณต์กํ ํํ์์๋ ํ์ด์ฌ์ ํจ์ถ์ ์ธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
- ํ์ด์ฌ์ ๋ฌธ๋ฒ์ ์ด์ฉํ๋ฉด ํ ์ค์ง๋ฆฌ ํํ์์ ์ฝ๊ฒ ์์ฑํ ์ ์์ง๋ง ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ์ฝ๊ธฐ ์ด๋ ค์์ง๋ค.
- ๋ณต์กํ ํํ์์ ํฌํผ ํจ์๋ก ์ฎ๊ธฐ๋ ๊ฒ ์ข๋ค. ํนํ, ๊ฐ์ ๋ก์ง์ ๋ฐ๋ณตํด์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ํฌํผ ํจ์๋ฅผ ์ฌ์ฉํ์.
- if / else ํํ์์ ์ด์ฉํ๋ฉด or๋ and ๊ฐ์ ๋ถ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ์ฝ๊ธฐ ์์ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.