※ 함수

def add(a, b):   #a, b라는 매개변수
    return a+b

print(add(10,14))   # 24출력

 

 

※ 입력값이 몇개가 될 지 모른다면?

def 함수명 (*매개변수):
    수행문장

 

Ex-1)

def adds(*arg):
    sum = 0
    for i in arg:
        sum += i
    return sum


print(adds(1,2,3,3,4,5,6,6,6,77))   # 113 출력

 

Ex-2)

def add_mul(choice, *args):
    if choice == "add":
        result = 0
        for i in args:
            result = result + i

    elif choice == "mul":
        result = 1
        for i in args:
             result = result * i

    return result

print(add_mul("add", 1,2,3,3,4,5,6,6,6,77))   # 113 출력
print(add_mul("mul", 1,2,3,3,4,5,6,6,6,77))   # 5987520 출력

 

 

※ 키워드 파라미터 - feat. 딕셔너리

입력값의 개수를 모르고 딕셔너리로 만들고 싶을 때, **를 이용할 수 있다.

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(name = "V2LLAIN", age = 22)

#--------출력--------#
{'name': 'V2LLAIN', 'age': 22}

 

 

 

 

※ lambda 

함수를 생성 시 사용하는 예약어로 보통 함수를 한줄로 간결하게 만들 때 사용

add = lambda a, b: a+b

print(add(3, 4))

※ lambda 함수는 return 명령이 없어도 결과값을 돌려준다.

 

 

 

 

 

 

 

 

 

 

※ 클래스 

class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()     # 객체 cal1 생성
cal2 = Calculator()     # 객체 cal2 생성

print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))


#----출력----#
3
7
3
10

 

class Calculator:
    def setAddData(self, first, second):
        self.first = first
        self.second = second
        return first+second

cal = Calculator()

print(cal.setAddData(4, 2))     # 6출력

python에서는 this대신 self를 사용한다. 이때, 첫번째 매개변수인 self는 관례적 사용이다.

python은 다른 언어와 달리 self를 명시적으로 구현한다.

출처: https://wikidocs.net/28

 

class Calculator:
    def setData(self, first, second):
        self.first = first
        self.second = second
    def AddData(self):
        result = self.first + self.second
        return result

cal = Calculator()
cal.setData(10, 14)

print(cal.AddData())     # 24출력

 

 

 

※ _ _init_ _  초기화 함수

파이썬 함수이름으로 __init__을 사용하면 이 함수는 생성자가 된다.

class Calculator:
    def __init__(self, first, second):
        self.first = first
        self.second = second

    def setData(self, first, second):
        self.first = first
        self.second = second

    def AddData(self):
        result = self.first + self.second
        return result

cal = Calculator(10, 14)

print(cal.AddData())     # 24출력

 

 

 

 

 

 

 

※ 클래스의 상속 

상속은 기존 클래스를 변경하지 않고 기능을 추가, 변경 시 사용한다.

class Calculator:
    def __init__(self, first, second):
        self.first = first
        self.second = second

    def setData(self, first, second):
        self.first = first
        self.second = second

    def AddData(self):
        result = self.first + self.second
        return result

class CalPower(Calculator):
    def power(self):
        return self.first ** self.second

cal = CalPower(10, 4)

print(cal.power())     # 10000출력

 

 

 

 

 

 

 

 

 

 

 

 

 

※ switch 문

보통 if문 대신 사용하며 case를 나눌 필요가 있을 때, if-else를 여러번 쓰기 힘들 때 사용한다.

switch (n) // n은 정수형 변수로 전달되는 인자정보, n에 지정된 값에 따라 case 영역 실행
{
    case 'M':
        // 조건 입력
        break;
    case 2:
        // 조건입력
        break;
    default:
        // else문과 비슷한 역할
}

이때, break를 하지 않으면 다음 break가 있는 case문까지 같이 실행되기에 적는 것이 좋다.

§ break와 continue

break: 가장 가까운 반복문을 탈출한다.
continue: 실행위치와 상관없이 반복문의 조건검사위치로 이동한다.
          이때, 이후부터는 continue는 생략하고 재실행한다.

 

 

 

※ while 문 vs for 문

보통 while문은 특정 종료조건이 나타나기 전까지의 지속적인 실행을 위해,

보통 for문은 반복횟수가 정해져 있는 경우에 많이 사용된다.

 

※ 비트 연산자

메모리에 할당된 정수값을 bit단위로 논리연산을 실행하기 위해 사용한다.

 

 

 

 

 

 

 

 

※ 함수 선언

[함수 return 타입] [함수 이름] (인자) {
    /*
     * 
     */
}

인자 (argument): 함수 호출 시 전달되는 "값"

매개변수(parameter): 그런 인자를 받는 "변수"

 

 

 

 

 

 

※ 지역변수와 전역변수, static과 block scope

지역변수(local variable): 중괄호에 의해 형성되는 영역안에 존재, "스택"이라는 메모리 영역에 할당
전역변수(global variable): 초기화를 하지 않으면 0으로 초기화되며 많이 사용하면 효율이 떨어진다.

 

§ 지역변수와 Block Scope

특정함수, 명령문의 블록안에 선언된 변수는 블록범위(Block Scope)밖에서는 사용이 불가능하다!

int a = 1;

{
    a = 2; // a는 2로 초기화 됨
}

{
    int a = 5; // 앞선 a와는 전혀 다른 a
    // Block scope가 끝나면 사라짐
}

{
    a++; // 여기까지 a값은 2, 아래줄 실행 시 a=3으로 증가
}

printf("%d", a); // 3 출력

 

 

§ static: "한 함수 내"에서 "지역변수의 전역변수화"를 해주는 tool

선언된 함수내에서만 접근 가능 (지역변수의 특징)
1회만 초기화, 종료전까지 메모리 공간에 저장 (전역변수 특징)
★ 전역변수와 달리 Block Scope 내부에서만 접근 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

※ 입출력 방식

scanf("%d", &num); // 입력
printf("%d", num); // 출력

이때, 입력의 &num은 변수 num에 입력한 내용을 저장한다는 뜻이며

printf에서는 num에 저장된 입력값을 출력한다는 뜻이다.

 

물론 %d이외에 다른 방법으로도 입력받을 data type을 정할 수 있다.

%d // 부호가 있는 "10진수 정수" (int, short, char)
%c // 값에 대응하는 "문자" (char, int, short)
%s // "문자열" (char*)
%p // "포인터 주소값" (void*)

이때, char는 정수형임을 주의!

char는 문자형처럼 보이지만 "실제로는 char형 변수에 저장되는 것은 정수이다."

 

※ 복합대입연산자

a += b  // a = a + b
        // b가 1이면 a++로도 사용

l-value에 저장하는 것! (l-value: https://chan4im.tistory.com/11)

 

this.code(1)_ C++, based by C

※ C++의 입출력 연산자, [>>, (istream&, Coord&);와 ostream& operator (b) ? (a) : (b)) ... int x = 5, y = 0; CALL_MAX(++x, y); // a가 2번 증가 CALL_MAX(++x, y+10); // a가 1번 증가 위의 경우, (++a>b) ? ++a : b 로 해석되기에 a가 2

chan4im.tistory.com

 

 

※ 전위, 후위 증감연산자

전위연산: ++a // a값 1 증가 후 실행         [선증가, 후연산]
후위연산: a++ // 속한문장 진행 후 값 1증가   [선연산, 후증가]

즉, 후위연산의 경우 "다음문장으로 넘어가야만!" 비로소 증감연산이 실행된다.

int a = 5;
a++; // 여기서는 아직 a값은 5
printf("%d", a); // 여기서의 a값은 6이됨

 

 

※ NOT 연산자 (with if문)

a가 3의 배수라면? 과 관련된 코드이다.

if (a%3 == 0)
if (!(a%3))

위의 둘은 같은 뜻인데, if(!(a%3))의 경우 생소할 수 있다. 이에 대한 풀이는 아래와 같다,

a가 3의 배수일 떼 => a%3 == 0 즉, 0이 나온다.
if (!0) 즉, 0(거짓)이 아님이란 뜻으로
if (true)와 같은 뜻이다.

 

 

※ main문의 구조와 return 0; 의 의미

int main(){
    /*
     * 
     */
    return 0;
}

여기서, return 0의 의미는 다음 2가지이다.

1. 실행중인 "함수의 종료"
2. 함수 호출영역으로 "값의 반환"

cf. C언어는 boolean 타입이 없어서 0만! false, 0 이외의 값이 true로 간주된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts