20/03/24 TIL

Magit·2020년 3월 24일
0

TIL

목록 보기
2/16
post-custom-banner

파이썬

Data Types

  • Integer

    • 정수 값
  • Float

    • 소수점 숫자
  • Complex Numbers

    • 실수와 허수를 포함하고 잇는 복소수. 파이썬에서는 허수를 표현할 때 j를 사용한다.
      • 1+3j
  • String

    • 일반적인 문자열 값
  • Boolean

    • 조건문에 자주 사용되는 값으로 True, False 두가지 값만 갖고 있다.
    • 1 == 1 은 True
    • 2 == 6 은 False
    • 4 == "4" 도 False. Data Type 이 다르기 때문이다.

Varialbes (변수)

Variables For Strings

  • 특정 값을 저장하고 있는 상자라고 생각하면 편하다.
  • name = "이름"
    • name은 Varialbe Name(변수 이름) / = 는 Assignment 부호로 값을 지정해준다 / "이름" 은 변수 값이다.
  • 변수 값은 변할 수 있다.

  • String : 따옴표로 둘러쌓여 있는 값들을 string이라고 한다. 문자열 값을 뜻하며, 보통 텍스트 값을 이야기 한다. 따옴표가 없으면 파이썬은 변수 혹은 함수로 인지하므로 따옴표는 필수적이다.
  • 변수 이름 법칙
    • 영어 알파벳과 숫자, underscore(_) 으로만 구성 가능하다.
    • 첫글자는 알파벳이나 underscore로만 시작해야하며, 숫자 시작은 불가능하다.
    • 영어 알파벳은 대문자 소문자 구분이 된다.

Variables For Numbers

  • string과는 다르게 따옴표 사용하면 안된다.

  • 정수뿐만 아니라 부동소수점 숫자 값도 가능하고 음수도 가능하다.

  • 기본적인 사칙연산은 모두 가능하지만 주의할 점들이 몇 가지 있다.

    • 정수 나누기
      - 나누기 값이 정수로 떨어지지 않으면 반내림으로 정수값만 리턴된다. 나누기 심볼을 2번 연속 사용하면 된다 (//)
      - 7 // 2 -> 3
      - 정수 나누기는 꼭 정수가 필요한 상황에서 사용하게 된다.
      - slicing에서 인덱스에는 정수만 사용하므로 정수 나누기가 유용할때가 있다.

      파이썬에서 string 과 number를 같이 연산하려고 하면 에러가 뜬다.

      ```
      num1 = int(input())
      num2 = int(input())
      print("더하기: " + (num1+num2))
      에러메세지 [TypeError: can only concatenate str (not "int") to str]
      ```

      그러므로 자료형을 주의해가면서 사용해야한다.

  • 파이썬은 기본적인 연산외에도 % += -+ *= /= 같은 연산 표현도 지원한다.

    • % 는 나누기의 나머지 값을 계살할 때 사용된다.
    • +=, -=, *=, /= 는 변수를 재작성하지 않아도 되기에 자주 이용된다.
    • ** 는 제곱을 구할 때 사용된다.
  • 파이썬의 연산 순서는 1순위 (), 2순위 ** , 3순위 , /, %, 4순위 +와 - 이다.

Concatenating Text Strings

파이썬 f-스트링 참조 페이지

  • 숫자와 마찬가지로 string도 더할 수 있다.(string concatenation)
print("Hello, " + "World")
  • 특정 문자열만 변수에 저장되어 있을 때 사용하면 편리하다.
name = input()
print("Hello, " + name)
  • +를 쓰는것보다 편리한 방법이 literal string interpolation이다.
name = input()
print(f"Hello, {name}")
  • 이 방법을 사용하려면 지켜야 할 부분이 있다.
    • 따옴표앞에 f를 붙여야 한다. f를 붙이면 파이썬은 다음에 오는 string값을 literal string interpolation이라고 인식하고서 string 안에 있는 변수들을 실제 값으로 치환한다.
    • 치환하고 싶은 변수, 함수 등이 중괄호를 사용해서 표시한다.
  • 만약 여러줄을 처리해야한다면 f""" """ 이런식으로 처리하면 된다.

Significant Whitespace

  • whitespace란 들여쓰기(indention)을 이야기한다.
  • 다른 언어는 들여쓰기가 필수가 아니고 가독성을 위해 쓰지만 파이썬에서는 요구사항이다.
  • 들여쓰기를 통해서 종속성을 나타내기 때문이다. 보통 중괄호 {} 를 통해서 종속성을 표현하는데, 파이썬에서는 들여쓰기가 그 역할을 한다.
def func():
	a=7
    	if a>5:
    		print("a is greater than 5")
    	else:
    		print("a is less than or equal to 5")
  • 들여쓰기 칸 수는 일반적으로 4칸이지만 2칸을 쓰는 개발자도 있다. 대부분 tab 사이즈인 4칸을 사용하긴 한다.
  • 들여쓰기는 함수뿐 아니라 if문, for문, 클래스 등 파이썬의 모든 것에 적용된다.

IF Statement

if name == "차은우":
	print(f"Hello {name}")
  • == 는 equality 라고 하며 2개의 값이 동일한지 확인하는 역할을 한다. 만약 값이 동일하면 True 값을 리턴하고 아니면 False 값을 리턴한다.
if expression:
	codes to execute
  • if 구문 다음에 오는 expression 값이 True이면 codes to execute 부분의 코드들이 실행된다. 만약 expression이 False이면 실행되지 않는다.
  • expression 옆에 : 가 없으면 문법 오류가 나므로 조심하자.
  • if 구문에는 string 외에도 다른 값들을 test할 수 있다.

Indents

  • 앞서 본 if 구문에서 expression 부분이 True일 때 실행되야 하는 코드들이 if 구문 보다 더 안으로 시작 간격이 들어와있다.
if condition:
	print("if statement code 1")
    	print("if statement code 2")
print("Not if statement code")
  • 위의 코드에서 if구문보다 간격이 안으로 들어와 있는 첫번째 두번째 print 구문이 if 구문과 연결되있는 코드이다.

elif and else

  • elif
    • if구문을 보조하는 역할이다. elif는 else if의 줄임말이다.
    • elif는 if 구문과 연결되어 사용되며 if 구문이 먼저 선행되고 그 다음에 위치하게 된다.
    • elif는 if 구문이 False 이면 실행되는데, elif의 condition을 테스트 한 후 실행된다.
  • else
    • else는 if 구문의 condition이 False 인 경우 default로 실행된다.
    • else는 if 구문과 elif 구문이 먼저 선행되고 마지막에 위치하게 되며, if/elif 구문의 코드가 실행되지 않으면 마지막에 실행된다.

Testing Set Of Conditions

  • 실제로 사용되는 조건문들은 더 복잡한 케이스들이 많다.
  • and구문
    • and 구문을 사용 할 때 염두해야 될 점은 and 구문을 사용하여 테스트 하는 모든 조건이 True 일때만 if 구문 코드가 실행된다는 점이다. 조건문들 중 하나라도 False이면 실행이 안된다.
  • or 구문
    • and 구문과 반대인데, 조건들 중 하나라도 True이여도 if 구문의 코드가 실행된다.
  • and 와 or
if (age > 19 and age < 30) or (married == True and income < 100000000):	
	print("WeCode 은행의 전세대출 우대자 이십니다")
  • 위와 같이 조건이 다양해지면 가독성이 좋지 않으므로 괄호를 적절히 사용해야한다.
    #월(month)와 일(day), 이 2가지를 input 값으로 받았을때,
    #2019년의 해당 월과 일의 다음 날의 월과 일을 출력해주세요.
    #예를 들어, month 는 3이고 일은 31이면 2019년 3월 31일의 다음날은
    #4월 1일 임으로 다음과 같이 출력이 되면 됩니다 (월 과 일을 각각 다른 줄에 출력 해주세요).
    month = int(input())
    day = int(input())
    if day == 31:
    	day = 1
    	print(month+1)
    	print(day)
    elif day == 30 and (month == 4 or 6 or 9 or 11):
    	day = 1
    	print(month+1)
    	print(day)
    elif day == 28 and month == 2:
    	day = 1
    	print(month+1)
    	print(day)
    else:
    	print(month)
    	print(day+1)
  • 파이썬에서 반복되는 컨디션이 많으면 가독성이 급격히 떨어진다. 그럴때는 중첩 if문을 사용하면 된다.
  • 그러다 중첩 if 문도 2단계 이상은 잘 사용하지 않는다. 오히려 2단계 이상 중첩을 하면 해당 코드에 문제가 있다고 여겨질 수 있다. 대부분은 2단계도 아니고 1단계로 중첩한다.

파이썬 일정 버젼 이상에서는 나누기를 했을 때, 산수적으로 나누어떨어지는 값이라도 실수형으로 반환한다.

다음의 방정식을 해결하는 프로그램을 구현 하세요. x값을 구해야 합니다.
ax = b
결과 출력물은 다음과 같아야 합니다.
1. Input 으로 주어진 a 와 b 값으로 위의 방정식을 충족하는 단 하나의 정수가 존재한다면 해당 정수를 출력하면 됩니다.
2. 만일 a 와 b 값으로 위의 방정식을 충족하는 정수가 없다면 "No Solution"을 출력해주세요.
3. a 와 b 값으로 위의 방정식을 충족하는 정수가 많다면 "Many Solutions"을 출력해주세요.
Hint: a 나 b 는 0이 될 수 있습니다.
Examples:만일 a = 1, b = -2 라면 결과값으로 -2가 출력이 되어야 합니다.
만일 a = 2, b = -1 라면 결과값으로 "No Solution"이 출력이 되어야 합니다.

```
a = int(input())
b = int(input())
#x = b / a
if b == 0:
	if a == 0:
    	print("Many Solutions")
    else:
    	x=0
        print(x)
# b가 0이면 기본적으로 x 값은 0이 되지만, a가 같이 0일수 있으므로 나눠준다.    
elif a == 0:
	  print("No Solution")
# b가 0이 아닌데 a가 0인 경우 정수를 0으로 나누게되므로 No Solution    
elif b % a == 0:
	x = b / a
    print(int(x))
# a와 b 둘 다 0이 아니고 정수인데 b / a 가 딱 떨어지는 값일 때 x를 출력해준다.
# 난 파이썬에서 정수 / 정수 도 실수로 계산되어서 나오므로 정수형으로 형변환해준다.
else:
	print("No Solution")
# 남은 경우의 수는 둘 다 0이 아니면서 딱 나눠떨어지지 않는 값들이다.
# 그럴경우는 No Solution
```

Function

  • 함수는 반복되어 계속 사용되는 코드들을 함수로 정의하여 효과적으로 사용하고 가독성을 높이기 위해서 사용한다.
  • 개념적으로 수학의 함수와 동일한데, Input을 받아서 기능을 실행하고 Output을 생성한다.
  • 파이썬 함수에서 Input을 parameter라고 하며 Output은 return 값이라고 한다.
def 함수명(parameter):
	문장1
    문장2
    ...
    문장N
    return 리턴값
  • parameter와 return값은 optional이다. 둘 중 하나 혹은 둘 다 없을수도 있다.

  • return 값은 함수에서 해당 함수를 호출한 주체(invoker)에게 결과값(output)을 보내준다.

    Function Parameters

    • 함수의 parameter에는 여러 형태가 있다.
    def 함수명(parameter1, parameter2):
    	print(f"{parameter1} and {parameter2}")
    
    함수명("욥", "얍")
    -> 욥 얍
    • 위 처럼 순서대로 값이 함수에 전해지는 경우가 가장 기본적이다.

    • 순서에 맞춰서 parameter값을 전해주지 않을경우도 있는데, 이를 keyword arguments라고 한다.

    #keyword arguments
    def 함수명(my_name, your_name):
    	print(f"{my_name} and {your_name}")
    
    함수명(your_name = "욥", my_name = "얍")
    -> 욥 얍
    • 순서가 바뀌어도 괜찮고 가독성이 높다는 이점도 있다.

    • 순서를 맞춰서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용해서 사용도 가능하다.
    #Mixing positional arguments and keyword arguments
    def 함수명(my_name, your_name):
    	print(f"{my_name} and {your_name}")
    
    함수명("욥", your_name = "얍")
    -> 욥 얍
    • 다만 여기서 keyword arguments는 순서가 바뀌어도 되지만 positional arguments 부분은 순서를 지켜줘야 한다.

    • 함수의 parameter 값에 default 값을 정의해줄 수도 있다.
    • 다만 default 값이 정의된 parameter가 default 값이 정의되지 않은 parameter 보다 먼저 위치해 있으면 안된다.
    • 만약 default value parameter가 non-default value parameter 보다 앞에 선언되면 syntax error가 난다.


default value parameter를 non-default value parameter 앞에 정의하면 안되는 이유는?

함수를 호출할 때 positional argument 를 이용해 호출하는게 일반적인데, 이때 필수적으로 순서를 지켜야한다.

```
def exam(a="hi", b="예얍", c, d):
print(a, b, c, d)
```

라는 함수가 있다고 할 때
exam("abc", "def") 라고 함수를 호출하면 syntax error가 난다.
이유는 파이썬이 입력받은 "abc", "def"를 a, b, c, d 중 어디에 저장해야하는지 판단 할 수 없기때문이다.
호출은 positional argument 방식으로 호출을 했는데, a와 b에 저장하라는 건지, 디폴트 값이 없는 c, d에 저장하라는 건지 파이썬이 판단할 수 없게되기 때문이다.
이런것을 방지하고자 함수를 선언할 때, 디폴트값이 없는 파라미터부터 선언하기로 한것이다.


Function arguments에 대한 추가 정리

  • 파이썬에서 함수를 호출하는데 사용하는 function artuments(함수 매개변수)의 종류는 4가지 유형이 있다.
    • 위치 매개변수 (Position Arguments)
    • 키워드 매개변수 (Keyword Arguments)
    • 기본값 매개변수 (Default Arguments)
    • 가변 매개변수 (Arbitray Arguments, variable-length arguments)
  • 위치 매개변수는 함수 내 매개변수 위치별 순서와 데이터 타입에 맞게 정확히 입력해줘야하는 매개변수이다.
  • 키워드 매개변수는 함수 호출과 관련이 있는데 매개변수의 이름(parameter name)으로 매개변수를 지정한다. 키워드 매개변수는 매개변수의 입력 순서를 바꿔서 호출할 수 있고 가독성도 높다.
  • 기본값 매개변수는 함수를 호출할 때 매개변수 입력이 없을 경우에 함수를 정의할 때 먼저 입력한 기본값을 사용할 수 있게해준다. 기본값 설정이 안되어 있는데 함수 호출 시 매개변수 값 입력을 빼먹으면 TypeError가 나는데, 기본값 매개변수를 사용하면 에러가 나지않는다.
  • 가변 매개변수는 매개변수의 수가 상황에 따라 변화하는 경우에 사용된다. 가변 매개변수는 두가지가 있다.
    • 1) *args_tuple : Positional 매개변수이며 Tuple로 저장된다.
    • 2) **args_dict : Keyword 매개변수이며 Dictionary로 저장된다.
    • 두 가지 유형의 가변 매개변수를 같이 사용하고 싶다면 순서가 중요한데, *args_tuple이 먼저고 **args_dict가 나중이다.

  • argument 나열 순서는 기본적으로 일반 > 디폴트 > 가변형(*) > 키워드(**) 이다.

    답변받은 내용 : (포지셔널, 디폴트벨류, args, 키워드온리, 디폴트키워드온리,*kwargs)이순서라고 보시면됩니다. 재밌는건 키워드온리 아규먼트도 디폴트 값은 뒤에 와야하는거죠)

더 자세히 알아볼 수 있도록 그림을 참조해보자.
모든 종류 arguments들이 적합한 위치가 어디인지 알 수 있다. 위에서는 파이썬이 판단할 수 없다고 표현했지만, 이 순서들은 말그대로 정해져있는 문법으로 봐야된다. 지켜지지 않으면 error가 나므로 주의해야한다.

매개변수 위치에 대해서 도움받을 만한 좋은 사이트 및 블로그가 있어서 공유.
Python keyword only arguments 참조 사이트
가변 매개변수의 위치에 따른 keyword 매개변수 호출시 error 종류

profile
이제 막 배우기 시작한 개발자입니다.
post-custom-banner

0개의 댓글