python์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. ์๋ ๋ณธ๋ฌธ์ data type๋ถํฐ ๋ณ์์ ์ฐ์ฐ, if์ ํจ์ ๊ด๋ จ ๋ด์ฉ์ ํฌํจํ๊ณ ์๋ค.
ํ์ด์ฌ์ ์ฌ๋ฌ ๋ฐ์ดํฐ ํ์ ๊ณผ ๋ณ์ ํ ๋น ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ๋ด ๋ณ์๋ฅผ ํฌํจํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์์๋ณด์.
๋ณ์ ๊ฐ์ ์ง์ ํ ๋๋ assignment ๋ถํธ (=
)๋ฅผ ์ฌ์ฉํ๋ค. ์กฐ๊ฑด๋ฌธ์ ์ธ ๋ ๋จ์ํ ์๋ฏธ๋ง ์๊ฐํด์ ์ต๊ด์ ์ผ๋ก =๋ฅผ ์ฐ๊ฒ ๋๋๋ฐ, comparision operator(==
)์ ํท๊ฐ๋ฆฌ์ง ๋ง ๊ฒ!
๐๋ณ์ ์ด๋ฆ์ ๋ฒ์น
Real python ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ๋ฌธ์ฅ์ value๋ฅผ ๋ณด๊ฐ(์๋ ค์ง ๊ฐ ์ฌ์ด์ ์์นํ ๊ฐ์ ์ถ์ )ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๋ฌธ์์ด ์์ %s(string)์ ๋ฃ๊ณ , ๋ฌธ์์ด ๋ฐ์ ํด๋น ์์ญ์ ๋ค์ด์ฌ ๊ฐ์ ๋ณ์๋ก ์ง์ ํด์ค๋ค. ๋ง์ฝ ์ฌ๋ฌ ๋ณ์๋ฅผ ๋ฃ์ด์ผํ ๊ฒฝ์ฐ, ๋ ๋ฒ์งธ ์์์ฒ๋ผ ๋ณ์๋ ํ๋ธ๋ก ๋ง๋ค์ด์ผ ํ๋ค.
name = "Eric"
Hello, %s." % name
'Hello, Eric.'
name = "Eric"
age = 74
"Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
๐๋ฌธ์์ด formatter์ ์ข ๋ฅ
formatter | ๊ธฐ๋ฅ |
---|---|
%d, %x, %o | ์ญ์ง์(decimal), 16์ง์, 8์ง์ |
%f | ์ค์๋ฅผ ์ถ๋ ฅ |
%.์ซ์f | ํ์ํ ์์์ ์๋ ์๋ฆฌ์๋ฅผ ๋ช ์ํ๋ค. |
%s | ๋ฌธ์์ด ์ถ๋ ฅ |
%% | โ%โ ๋ฌธ์ ์์ฒด๋ฅผ ์ถ๋ ฅ |
โ ๋ณต์์๋ ์ถ๋ ฅ์ด ๋์ง ์๋ ์ ์ฐธ๊ณ !
num1 = int(input())
num2 = int(input())
print('๋ํ๊ธฐ: %d' %(num1+num2)) #10์ง์ ์ถ๋ ฅ
print('๋นผ๊ธฐ: %d' %(num1-num2))
print('๋๋๊ธฐ: %0.2f' %(num1/num2)) #์์ ๋๋ฒ์งธ์๋ฆฌ๊น์ง ์ค์ ์ถ๋ ฅ
print('๊ณฑํ๊ธฐ: %d' %(num1*num2))
Python 2.6์์ ๋์
๋ ๋ฐฉ์์ผ๋ก, __format__()
method๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๊ฐ ๋ฌธ์์ด๋ก ์ ํ๋๊ฒ๋ ํ๋ค. ๋ณ์๋ก ๋ณํ๋๋ ๋ถ๋ถ์ {}๋ก ํ์ํ๋ค. ๋ ๋ฒ์งธ ์ค์ฒ๋ผ {} ์์ tuple์ index๋ฅผ ๋ฃ์ด ์ง์ ํ ์๋ ์๋ค.
"Hello, {}. You are {}.".format(name, age)
# ์์์ ๊ด๊ณ ์์ด ํํ์ ์
๋ ฅํ๊ณ , ํํ ๋ด์ ์ธ๋ฑ์ค๋ฅผ {}์ ๋ฃ์ด๋ณด์
"Hello, {1}. You are {0}.".format(age, name)
์ ๋ฐฉ๋ฒ์ผ๋ก๋ {} ์์ ๋ณ์ ์์ฒด๋ฅผ ๋ฃ์ง๋ ๋ชปํ๊ธฐ ๋๋ฌธ์, ๋ณ์๋ฅผ ๋ฃ๊ธฐ ์ํด์๋ ๋์
๋๋ฆฌ๋ฅผ ๋ง๋ ํ **variable_name
์ผ๋ก key์ ๋ํ value๋ฅผ ๊ฐ์ ธ์จ๋ค.
person = {'name': 'Eric', 'age': 74}
"Hello, {name}. You are {age}.".format(**person)
Python 3.6๋ถํฐ ๋์ ๋์์ผ๋ฉฐ ๊ถ์ฅ๋๋ ๋ฐฉ์์ด๋ค. ๋ฌธ์์ด ์์ f๋ฅผ ๋ถ์ด๊ณ (format์ ์ ๊ธ์๋ฅผ ๋ฐ์จ ๊ฒ์ผ๋ก ๋๋ฌธ์๋ก ํํํด๋ ์๊ด ์๋ค.), ๋ฌธ์ฅ ์์ {๋ณ์}๋ฅผ ๋ฃ์ด ์์ฑํ๋ค.
name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
num1 = int(input())
num2 = int(input())
print(f'๋ํ๊ธฐ: {num1+num2}')
print(f'๋นผ๊ธฐ: {num1-num2}')
print(f'๋๋๊ธฐ:{num1/num2}')
print(f'๊ณฑํ๊ธฐ: {num1*num2}')
javascript๋ java๋ ์ค๊ดํธ{} ์ฌ์ฉ์ ํตํด ์ข
์๋ ์ฝ๋๋ฅผ ๋ํ๋ธ๋ด๋ ๋ฐ๋ฉด, ํ์ด์ฌ์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํตํด ์ข
์์ฑ์ ๋ํ๋ธ๋ค. ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋จ๊ตฐ ๊ฐ๋
์ฑ์ ์ํ ๊ฒ์ด ์๋ ์๊ตฌ์ฌํญ
์ธ ๊ฒ์ด๋ค.
๋ค์ฌ์ฐ๊ธฐ๋ ํจ์ ๋ฟ ์๋๋ผ if๋ฌธ, for๋ฌธ, class ๋ฑ ํ์ด์ฌ์ ๋ชจ๋ ๊ฒ์ ์ ์ฉ๋๋ฏ๋ก ์ฌ์ฉ ์ ๋๋ฝ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
//javascript ์์
function func() { // curly bracket ์ผ๋ก ๊ตฌ๋ถ
code block
}
# python ์์
def func(): # colon & indent๋ก ๊ตฌ๋ถ
code block
ํ์ด์ฌ์ ๋ค๋ฅธ ์ธ์ด์ ๋์ผํ๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ํ๊ธฐ(+), ๋นผ๊ธฐ(-), ๋๋๊ธฐ(/), ๊ณฑํ๊ธฐ(*) ๋ฑ์ด ๊ฐ๋ฅํ๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋น๊ต์ ๋ฏ์ ๊ฐ๋ ์ ๋ํด ์์๋ณด์.
๋๋๊ธฐ ๊ฐ์ด ์ ์๋ก ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ, ๋ฐ ๋ด๋ฆผ์ผ๋ก ์ ์ ๊ฐ๋ง ๋ฆฌํดํ๋ค. slicing ์ ์ธ๋ฑ์ค๋ ์ ์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ํฉ์์ ์ ์ฉํ๋ค.
num1 = 7
num2 = 2
num3 = num1 // num2
๐จ๋๋๊ธฐ ์ฃผ์ํ ์ ๐จ
์ ์๋ฅผ ํ์ธํ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋, type(b/a) == <class 'int'>
๋ก ๊ณ์ ์ ์ฉํ๋๋ฐ ์คํจํ๋ค. ์ด์ ๋ ๋ฒ์ 2์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋๊ธฐ๋ฅผ ์คํํ ๋ int๊ฐ์ด ๋์ค์ง๋ง, ๋ฒ์ 3๋ถํฐ๋ ๋๋ ๊ฐ์ type์ด float์ผ๋ก ํ์
๋๊ธฐ ๋๋ฌธ์ด๋ค.... ๐
๋ง์ฝ ์ ์์ธ์ง ํ์ธํ๋ ค๋ฉด b%a == 0
์ผ๋ก ํ์ธํ์. type์ ์ฌ์ฉํ์ง ์๋ ๊ฑธ๋ก...
modulo operator, ๋๋๊ธฐ์ ๋๋จธ์ง ๊ฐ์ ๊ณ์ฐํ ๋ ์ฐ์ธ๋ค. ๋ฐฐ์๋ฅผ ๊ตฌํ ๋, ์ ์์ธ์ง ํ์ธํ ๋ ์ฌ์ฉํ ์ ์๋ค.
+= -= /= *=
๊ฐ์ ๋ณ์์ ๊ฐ์ ๋ํ ๋, ๋ณ์๋ฅผ ๋ ๋ฒ ์ฐ๋ ๋ฒ๊ฑฐ๋ก์์ ํผํ๊ธฐ ์ํด ํํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
num1 = 10
num1 += 1
print(num1) # result: 11
๊ดํธ ์์ ์ฐ์ฐ์ด ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ค.
๋ง์ผ ์คํ๋๋ ์์๊ฐ ๋์ผํ ์ฐ์ฐ๋ค์ด ์์ ๊ฒฝ์ฐ (์๋ฅผ ๋ค์ด ๊ณฑํ๊ธฐ ์ ๋๋๊ธฐ), ๋จผ์ ๋์ค๋ ์ฐ์ฐ์ด ๋จผ์ ์คํ!
์ซ์๋ฟ ์๋๋ผ ๋ฌธ์๋ ๋ํ๊ธฐ ์ฐ์ฐํ ์ ์๋ค. Concatenate๋ ์ฐ์๋ผ๋ ๋ป์ผ๋ก, ํ ์คํธ๋ฅผ ์ฐ๊ฒฐ(์๋ ๊ฒ)์ ์๋ฏธํ๋ค. ๋ํ๊ธฐ ๋ถํธ๋ฟ ์๋๋ผ ์์์ ์ ๋ฆฌํ literal string interpolation๋ก ์ด์ ์ ์๋ค.
์๋์ ๊ฐ์ด ํจ์ ์์ ๋ค์ด์๋ string, ๋ณ์ ์์ string ๋ ํฉ์น ์ ์๋ค.
def my_func():
return 'hi, '
name = 'yeni'
result = my_func() + hi
print(result) # output: 'hi, yeni'
if ๋ค์์ ์ค๋ ๊ตฌ๋ฌธexpression์ด True์ผ ๊ฒฝ์ฐ, code block์ด ์คํ๋๋ค. ์คํํ ์ฝ๋๋ธ๋ญ์ด ๋ฐ๋์ ๋ค์ฌ์ฐ๊ธฐ ๋์ด์์ด์ผ ํ๋ ์ ์ ์์ง ๋ง์.
if expression: # ์ฝ๋ก ์ด ์์ด์
code block # ๋ค์ฌ์ฐ๊ธฐ ํด์ผ๋ผ์
if ๊ตฌ๋ฌธ์ ๋ณด์กฐํ๋ ์ญํ ๋ก, else if์ ์ค์๋ง์ด๋ค. if ๊ตฌ๋ฌธ์ด false์ผ ๋ ์คํ๋๋ค. elif๊ฐ false๋ฉด else๊ฐ ์คํ๋๋ค.
์ฌ๋ฌ ์กฐ๊ฑด์ testingํ ๋ ๊ต์งํฉ ํน์ ํฉ์งํฉ์ผ๋ก ์กฐ๊ฑด์ ๊ตฌ์ฑํ๋ ๊ฒ์ผ๋ก, ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์กฐ๊ฑด์ด ์ฌ๋ฌ๊ฐ๋ฉด ()๊ดํธ ์์ ๋ฃ๋๋ก ํ์.
๋ฐ๋ณต๋๋ ์ปจ๋์ ์ด ์์ ๋, ์ค์ฒฉ๋๋ if๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ ์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๋ค.
๋ฌธ์ ) ax=b ๋ฐฉ์ ์์ x ๊ฐ์ ๊ตฌํด๋ผ. x๊ฐ ์ ์๊ฐ์ด ์๋๋ฉด ๊ฐ์ด ์๋ค๋ก, ๊ฐ์ด ๋ง์ผ๋ฉด ๋ง๋ค๋ก, ํ๋๋ฉด ๊ทธ ๊ฐ์ ํ์ํด๋ผ.
if a==0:
if b==0:
print("Many Solutions")
else:
print("No Solution")
else:
if b==0:
print(0)
elif b%a == 0:
print(b//a) #์ ์๋ก ๋ต์ ๋ด๋ ค๋ฉด b/a๋ ์ฐ๋ฉด ์ ๋ฉ๋๋ค
else:
print("No Solution")
์ฒ์์ case๊ฐ ๋ช ๊ฐ์ง ๊ฐ๋๋ก ๋๋๋์ง ์ดํด๋ณด๊ณ , ์์ธ์ ์ธ ์ํฉ์ ๋จผ์ ์ ๋ ๊ฒ์ด ๋ ผ๋ฆฌ๋ฅผ ํ ๋ ์ข์ ๊ฒ ๊ฐ๋ค. ๋ต์ด ๋์ค์ง ์๋ ์ฌ๋ก๋ค์ ๋ชจ๋ ์๊ฐํ ๋ค์ ๋ง์ง๋ง์ ๋ต์ ๋ด๋ณด๋ด๋ ๊ฒ์ด ํ๋ฆ ์ ์๋ชป๋ ๋ถ๋ถ์ ์ฐพ๊ธฐ ๋ ์ฝ๊ณ ๋จ๊ณ๋ณ๋ก ์๊ฐํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์๋ ์ฝ๊ฒ ๋งํด input์ ๋ฐ์ ๊ณ์ฐ ๋๋ ๊ธฐ๋ฅ
์ ์คํํ๊ณ , ๊ฒฐ๊ณผ ๊ฐ์ธ output์ ์์ฑํ๋ ๊ฒ์ด๋ค.
ํจ์ ์ ์ธ ๋ฐฉ์์ ๋ํด ์์๋ณด์. ์๋ ๋ฐฉ์์ผ๋ก ์ ์ํ๊ณ , ํจ์๋ฅผ ํธ์ถํ๋ฉด ๊ทธ ์ฃผ์ฒด์ ๋ํด ๊ฒฐ๊ณผ๊ฐ(output)์ ๋ณด๋ด์ฃผ๊ฒ ๋๋ค. ํจ์์์ input ์ parameter, output์ return ๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
def def_name(parameter): #parameter๋ ์ต์
๋ฌธ์ฅ1
๋ฌธ์ฅ2
...
๋ฌธ์ฅN
return value #return์ ์ต์
parameter์ argument๋ฅผ ๋ฃ๋ ๋ฐฉ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์๋ ์ฐ๋ฆฌ์ง ๊ณ ์์ด ์บกํด, ๋ง๋ธ์ ๊ท์ฌ์ํ๋ ํจ์์ธ my_cat()์ ์๋ก ๋ค์ด ์ค๋ช ํด๋ณด์.
def my_cat(cat1, cat2):
print(f'์ฒซ์งธ๊ณ ์์ด {cat1} ๋์งธ๊ณ ์์ด {cat2} ๋๋ฌด ๊ท์ฌ์!')
my_cat('์บกํด', '๋ง๋ธ') #ํจ์ ํธ์ถ
# reulst: ์ฒซ์งธ๊ณ ์์ด ์บกํด ๋์งธ๊ณ ์์ด ๋ง๋ธ ๋๋ฌด ๊ท์ฌ์!
์ผ๋ฐ์ ์ธ ํ์์ ์ธ์์ด๋ค. ํจ์๋ cat1, cat2์ input parameter๋ฅผ ๋ฐ์, argument๋ฅผ ํจ์์ ๊ฑด๋ค์ฃผ์ด์(pass) output์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ print ํ๋ค. ํจ์์์ ์ ์ํ ์์น๋๋ก ๋์ ํ๋ ๊ฒ์ด๊ธด ํ๋, ํจ์ ํธ์ถ ์ ์ธ์ ์์๋ฅผ ํท๊ฐ๋ฆด ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
์์์ ๋ง์ถ ํ์ ์์ด parameter ์ด๋ฆ์ ๋ง์ถฐ ๊ฐ์ ์ ๋ฌํ๋ค. ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ ์ฝ๋ ์ฌ๋๋ ์ด๋ค ๊ฐ์ ๋๊ธฐ๋์ง ์ ํํ ์ ์ ์๋ค. ๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ ๋ฐฉ์๊ณผ ํผ์ฉ๋ ๊ฐ๋ฅํ์ง๋ง, ์์๋ฅผ ๋ฐ๊พธ๋ฉด ์ ๋๋ค.
#๋๋ ์
my_cat(cat2='๋ง๋ธ', cat1='์บกํด')
my_cat('์บกํด', cat2='๋ง๋ธ') # positional๊ณผ key๋ฅผ ์์ด ์ฐ๊ธฐ
# ์ ๋๋ ์
my_cat(cat2='๋ง๋ธ', '์บกํด' )
#result: SyntaxError: positional argument follows keyword argument
ํจ์์ parameter์ ๋ํดํธ ๊ฐ์ ์ ์ํด์ฃผ๋ ๊ฒ. ํจ์ ์ ์ธ ์ parameter์ value๋ฅผ ํ ๋นํ๋ค. ๋ง์ผ default value parameter๋ฅผ non-default value parameter ์์ ์ ์ธํ๋ฉด syntax error๊ฐ ๋๋ค. ์์ positional argument์ keyword argument์ ์์๊ฐ ๋ฐ๋๋ฉด ์ ๋๋ ์ด์ ์ ๋์ผํ ์์ธ์ด๋ค.
#๋๋ ์
def my_cat(cat1, cat2="๋ง๋ธ"):
print(f'์ฒซ์งธ๊ณ ์์ด {cat1} ๋์งธ๊ณ ์์ด {cat2} ๋๋ฌด ๊ท์ฌ์!)
print('์บกํด') // reulst: ์ฒซ์งธ๊ณ ์์ด ์บกํด ๋์งธ๊ณ ์์ด ๋ง๋ธ ๋๋ฌด ๊ท์ฌ์
#์ ๋๋ ์
def my_cat(cat1="์บกํด", cat2):
print(f'์ฒซ์งธ๊ณ ์์ด {cat1} ๋์งธ๊ณ ์์ด {cat2} ๋๋ฌด ๊ท์ฌ์!)
#result: SyntaxError: non-default argument follows default argument
ํจ์์ ๋ฃ์ ํ๋ผ๋ฏธํฐ๊ฐ์ด ๋๋ฌด ๋ง๊ณ , ๊ทธ ํ๋ผ๋ฏธํฐ ๊ฐ๋ง์ ์ ๋์ ์ด๋ผ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์๋์ฐจ ์ต์ ์ฌํญ์ด 40๊ฐ ์ ๋ ๋๋ค๊ณ ์๊ฐํด๋ณด์. ์๋์ฐจ์ ์ต์ ์ ์ถ๊ฐํ๋ ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ํ๋ผ๋ฏธํฐ๋ฅผ 40๊ฐ ๊ฐ๋ ์ถ๊ฐํด์ผ ํ ๊ฒ์ด๋ค. ๋ ์๋์ฐจ๊ฐ ์ ๊ทธ๋ ์ด๋ ๋์ด ์ต์ ์ด ์ฌ๋ผ์ง๊ฑฐ๋ ์ถ๊ฐ๋ ์ ์๊ณ , ์ด ๊ฒฝ์ฐ ์ ์๋ ํจ์๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด ์ฌ๋ฐฐํฌ๋ฅผ ํ๋ ๋ฑ ์ ๋์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
๋์ ๋๋ฆฌ๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ๋ง๋ ๋ค์, ํจ์ ๋ฐ์์ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ํจ์์ argument์ ๋์ ๋๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค. ๊ฐ๋จํ๋ค๋ ์ฅ์ ์ ์์ง๋ง, ์ต์ ์ dict๋ก๋ง ๋ฐ์์ผ ํ๋ค๋ ๋จ์ ์ด ์๊ณ ๋ค๋ฅธ ํ์ ์ ๊ฐ์ ๋๊ฒจ์ค ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ์๊ธธ ์ ์๋ค.
def buy_A_car(options):
print(f"๋ค์ ์ฌ์์ ์๋์ฐจ๋ฅผ ๊ตฌ์
ํ์ญ๋๋ค:")
for option in options:
print(f"{option} : {options[option]}")
options = {"seat" : "๊ฐ์ฃฝ", "blackbox" : "์ต์ "}
buy_A_car(options)
#result:
#๋ค์ ์ฌ์์ ์๋์ฐจ๋ฅผ ๊ตฌ์
ํ์ญ๋๋ค:
#seat : ๊ฐ์ฃฝ
#blackbox : ์ต์
keyworded variable length of arguments. ์๊ฐ ์ ํด์ ธ ์์ง ์๊ณ ์ ๋์ ์ผ๋ก ๋ณํ ์ ์๋ keyword arguments. ์๊ฒ ํ๋ผ๋ฏธํฐ์ ๋ค์ด๊ฐ๋ฉด ๋์ ๋๋ฆฌ ํํ์ argument๋ฅผ ๋ฐ๋๋ค.
def buy_A_car(**kwargs):
print(f"๋ค์ ์ฌ์์ ์๋์ฐจ๋ฅผ ๊ตฌ์
ํ์ญ๋๋ค:")
for option in kwargs:
print(f"{option} : {kwargs[option]}")
buy_A_car(seat="๊ฐ์ฃฝ", blackbox="์ต์ ", tint="yes")
# result: {'seat': '๊ฐ์ฃฝ', 'blackbox': '์ต์ ', 'tint': 'yes'}
(Non-keyworded) variable (length of) arguments. keyword๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์๋๋ก ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์. ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์๋๋ก argument๋ฅผ ๋ฐ๋๋ค. ๋ฐ์ ๊ฐ์ ํจ์์์ tuple๋ก pass๋๋ค.
def print_arguments(*args):
print(f'arguments: {args}')
print_arguments(1,2,3) # result: arguments: (1,2,3) 1,2,3 ์ด ์ธ์๋ก ๋ค์ด๊ฐ ํํ๋ก ๋์๋ค
non default argument๋ ์ธ์๋ฅผ ํ์์ ์ผ๋ก ๋ฐ์์ผ ํ๋ ๋ฐ๋ฉด, default argument๋ ์๋ต๋์ด๋ ๋ํดํธ ๊ฐ์ด ์์ด ์ธ์๊ฐ ํ์์ ์ด์ง๊ฐ ์๋ค.
๋๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ interpreter๊ฐ ์ด๋ค parameter์ ์ด๋ค argument์ ๋งค์นญํด์ผ ํ๋์ง
ํผ๋์ ๊ฒช๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
def my_func(a="hi", b="hello", c, d):
print(a,b,c,d)
์์ ๊ฐ์ด ์ฝ์๋ ๊ท์น ์์ด parameter๋ฅผ ์๊ฒ ๋๋ค๋ฉด, ํจ์ ํธ์ถ ์ ๋ํดํธ ๊ฐ์ ๋์ถํ๊ธฐ ์ํด argument๋ฅผ ์๋ตํ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฏธ๊ถ์ ๋น ์ง๊ฒ ๋๋ค.
my_func(1,2,3,4) # ๊ฐ์ด ๋ค๊ฐ๋ผ ํท๊ฐ๋ฆฌ์ง ์๋ค
my_func(1,2,3) # a์ ๋ํดํธ ๊ฐ์ด ์๋ต๋๊ฑฐ์ผ b์ ๋ํดํธ ๊ฐ์ด ์๋ต๋๊ฑฐ์ผ?
my_func('bonjour', 2, 3)
#bonjour๋ a์ ๊ฐ์ ์ค๊ฑฐ์ผ ์ ๊ฐ์ ์ค๊ฑฐ์ผ, ๋ง์ฝ a๋ผ๋ฉด 2๋ b์ ๊ฐ์ธ๊ฑฐ์ผ c์ ๊ฐ์ธ๊ฑฐ์ผ?
์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด parameter๋ฅผ ์ ์ํ๋ ์์๋ฅผ ์ง์ผ์ ๋์ดํด์ผ ํ๋ค. ์๋ ์ด๋ฏธ์ง ์ถ์ฒ๋ getKT์ ๋ธ๋ก๊ทธ์ด๋ค.
(a,b,c)
(a="b",r="j")
(*args)
(**kwargs)
argument์ ์ค์๋ง. ๊ผญ ํด๋น ๋จ์ด๋ฅผ ์ธ ํ์๋ ์๊ณ , *์ด ํ๊ฐ๋ผ๋ ๊ฒ์ด ํฌ์ธํธ๋ค. ํจ์ ํธ์ถ ์ ์ฌ๋ฌ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๊ณ ์ถ์ ๋ ํ๋ผ๋ฏธํฐ์ ์ด๋ค. ์ฌ๋ฌ๊ฐ์ ์ธ์๋ก ํจ์๋ฅผ ํธ์ถํ๋ฉด ํจ์ ๋ด๋ถ์์๋ ์ด๋ฅผ ํํ๋ก ์ธ์ํ๋ค.
keyword argument์ ์ค์๋ง. ๋ง์ฐฌ๊ฐ์ง๋ก *์ด ๋๊ฐ๋ผ๋ ๊ฒ์ด ํฌ์ธํธ. ํจ์์์ ์ธ์๋ฅผ ๋์ ๋๋ฆฌ ํํ๋ก ๋ฐ๊ณ ์ถ์ ๋ ํ๋ผ๋ฏธํฐ์ ์ด๋ค.
์์๋ฅผ ์ฐพ์๋ณด๋ค๊ฐ ์ฐ๋ฆฌ๊ฐ ํํ ์ฐ๋ print๋ ์ฌ์ค keyword argument๋ฅผ ๊ฐ๊ณ ์๋ ํจ์๋ผ๋๊ฑธ ์๊ฒ๋๋ค ๐ฆ
print ํจ์์ parameter end ์ ๋ํดํธ ๊ฐ์ '\n'๋ก ์ค์ ๋์ด ์๋ค. ๊ทธ๋์ print๋ฅผ ์ผ์ ๋ ์๋์ผ๋ก ์ค๋ฐ๊ฟ์ด ๋๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์๋์ ๊ฐ์ด end๊ฐ์ ์ง์ ํ๊ฒ ๋๋ฉด, ์ค๋ฐ๊ฟ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ค.
# ์ผ๋ฐ์ ์ธ print ํจ์
print('์บกํด๋ง๋ธ')
print('๋๋ฌด ๊ท์ฌ์')
'''result
์บกํด๋ง๋ธ
๋๋ฌด ๊ท์ฌ์'''
#keyword argument ์
๋ ฅ
print('์บกํด๋ง๋ธ', end='')
print('๋๋ฌด ๊ท์ฌ์')
'''result
์บกํด๋ง๋ธ ๋๋ฌด ๊ท์ฌ์'''
print('์บกํด๋ง๋ธ', end='์ฌ๋ํด')
print('๋๋ฌด ๊ท์ฌ์')
'''result
์บกํด๋ง๋ธ ์ฌ๋ํด ๋๋ฌด ๊ท์ฌ์'''
stack overflow์์ keyword only argument๋ฅผ ์ง๋ฌธํ ์ฌ๋์ ์์๋ฅผ ๋ณด๋ args, kwars๋ฅผ ์ด๋ป๊ฒ ๋ฐ๋ ๊ฒ์ธ์ง ์กฐ๊ธ ๋ ์ดํด๊ฐ ๋์ด ๊ฐ์ ธ์๋ณด์๋ค.
def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
#result: 166
๋งจ ์๋ซ์ค์์ ํธ์ถ๋ total ํจ์์์ numbers์ ์ธ์๋ (1,2,3)์ ์ซ์ ํํ, keywords ์ ์ธ์๋ key๊ฐ vegetables, fruits value๊ฐ 50, 100์ธ ๋์ ๋๋ฆฌ๋ค.
initial=5๋ก ๋ํดํธ ํ๋ผ๋ฏธํฐ๊ฐ ์๊ธด ํ์ง๋ง, 10์ด initial ํ๋ผ๋ฏธํฐ์๊ฒ ์ค ๊ฒ์ธ์ง, ์๋๋ฉด numbers์ ํฌํจ๋๋์ง๋ ํ ๋์ ์ ์ ์๋ค. ์ ์์์์๋ initial์ 10์ด passํ๊ธด ํ์ง๋ง, ๋ง์ฝ numbers๊ฐ (10, 1, 2, 3)์ธ ํํ์ด๊ณ initial ๊ฐ์ ๋ํดํธ๋ก ์ฃผ๊ณ ์ถ๋ค๋ฉด...?
์ ๋ฌธ์ ์ ๋ํด์๋ ์กฐ๊ธ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ค๋ฅธ ํํ์์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ์ข์ ์์๋ ์๋๋ค!