728x90

[Python] 

022.모듈 불러오기 : import? from? 차이

 

▷모듈(Module)이란?◁

누군가 만들어놓은 파이썬 파일(.py)

모듈 안에는 함수 뿐만 아니라, 변수나 클래스도 포함되어 있으며 끌어다 쓸 수 있다

 

패키지(Pakage)란?

모듈(Module)을 모아둔 폴더

 

 

import & from

import 단일 사용 : 모듈명.함수명()

                        (모듈명=파일명=라이브러리)

from + import : 함수명()

※ import는 현재 디렉토리나 파이썬 라이브러리에 저장된 디렉토리에 있는 파일만 불러올 수 있음

 

패키지 사용시에 import

import 패키지명.모듈명

import 패키지명.하위 패키지명

 

 

 

728x90
반응형
728x90

 

libpng warning: iCCP: known incorrect sRGB profile

파이썬에서 pip pygame으로 클론코딩 하던 중 발생한 에러메세지

 

 

나의 경우네는 다른 코드의 문제가 아닌 이미지 파일에 문제가 있어서 새로 만들어서 해결했다

어떤 경우에는 포토샵 이미지 편집에서 일반 이미지 파일과 색상 정보를 다르게 저장해서 경고 메시지가 뜬다고도 한다

   해결 : [편집] - [프로필 할당]을 클릭하고, [이 문서 색상 관리 안 함] 체크

 

 

아래는 스택오버플로우 질문과 답변인데 기술적인게 궁금하다면 참고해보길 바란다(구글번역 이용가능)

https://stackoverflow.com/questions/22745076/libpng-warning-iccp-known-incorrect-srgb-profile

728x90
반응형
728x90

 

 

import os
변수명 = os.path.dirname(__file) 
# 현재 파일의 위치를 반환하는 코드

 

상대경로 지정할 때 사용함

728x90
반응형
728x90

020. 매개변수(parameter) 종류와 순서 

 

 

예를 보자

def personal_info(**kwargs):  # info 뒤 ( ) 안이 매개변수
    for key, value in kwargs.items():
        print(key, ': ', value, sep = '')

y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**y)

결과값
name: 홍길동
age: 30
address: 서울시 용산구 이촌동

*설명

맨 아랫줄 인수 personal_info(**y)에 바로 윗줄 y변수의 정보가 들어가고 **이게 붙어서

키워드 매개변수로써 첫째줄의 def의 매개변수 자리에 들어가서 함수 def personal_info가 작동한다

 

  • def : 함수를 만들 때 사용하는 예약어
  • 매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수
                  함수 이름 뒤 괄호 안의 것
  • 인수(arguements) : 함수를 호출할 때 전달하는 입력값

 

 

사용법

함수를 정의하고 거기에 함수 밖에서 보내올 데이터(변수)를 받을 매개변수 타입을 지정하고, 작성한 함수에 밖에서 변수(인수)를 지정하면 작동된다.

 

종류

세가지는 혼용가능

  1. 고정 매개변수(parameter) : args = 1 or True
  2. 가변 매개변수(parameter) : *args
  3. 키워드 매개변수(parameter) : **kwargs

 

 

1)고정 매개변수(parameter)

매개변수 값을 지정하여 변동이 없게하는 매개변수

여러개 써도 순서는 상관x

ex) a=1, man=True

 

아래에서 a=3,b=7이 매개변수를 지정한 것으로 고정매개변수

def add(a, b):
    return a+b

result = add(a=3, b=7)  # a에 3, b에 7을 전달
print(result)

결과값
10

숫자 뿐 아니라, True나 False도 미리 지정해두고 사용가능

man = True

def say_myself(name, old, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")
        
say_myself("박응용", 27)
say_myself("박응용", 27, True)

결과값
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.

 

 

2)가변 매개변수(parameter)

매개변수 앞에 *을 하나 붙인 것이며, 여러 개의 입력값을 입력가능. 튜플로 출력됨.

값이 몇 개가 될지 모를 때 사용하며, 입력값을 전부 모아서 Tuple로 만듬

def add_many(*args): 
    result = 0 
    for i in args: 
        result = result + i 
    return result
    
result = add_many(1,2,3)
print(result)
결과값 : 6

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)
결과값 : 55

 

3)키워드 매개변수(parameter)

매개변수 앞에 **을  붙인 것이며, 딕셔너리로 출력됨

def print_kwargs(**kwargs):
    print(kwargs)
    
print_kwargs(a=1)

결과값 : {'a': 1}

print_kwargs(name='foo', age=3)
결과값 : {'age': 3, 'name': 'foo'}

 

※  args는 매개변수(arguments)의 약자로, 관례적으로 자주 사용

※ kwargs는 keyword arguments의 약자이며, args와 마찬가지로 관례적으로 사용한다.

 

사용순서

함수에서 매개변수를 종류별로 사용할 때, 순서를 지키지않으면 에러가 발생한다

고정 매개변수 - 가변 매개변수 - 키워드 매개변수

def parameter(args=1, *args, **kwargs)

 

 

728x90
반응형
728x90

019. if __name__ == __main__ 이해

 

출처 : 철린님 블로그

 

점프투 파이썬만으로는 잘 이해가 안되서 자료를 뒤져보다가 이분 글이 가장 이해가 잘되어 가져왔다.

 

if __name__ == __main__ 의미 :

인터프리터에서 직접 실행한 경우에만 if문을 실행시키라는 뜻

import된 경우는 x

모듈을 실행하는 방법은 두가지인데, 인터프리터에서 직접 실행하거나 다른 모듈에 임포트해서 실행하던가이다.

즉, 이 둘중에 후자에서만 발동하도록 지정해주는 것이다

 

if __name__ == __main__ 이 필요한 이유 :

 어떤 py파일의 함수만 쓸려할 때 겹쳐서 다른걸 가져오지 않도록 방지할 수 있다. 

mod1.py 파일의 add와 sub 함수를 사용하기 위해 mod1 모듈을 import할 때, 엉뚱하게도 import mod1을 수행하는 순간 mod1.py가 실행이 되어 결괏값을 출력한다. 우리는 단지 mod1.py 파일의 add와 sub 함수만 사용하려고 했는데 말이다

by 점프투파이썬의 설명

 

__name__이란?

 인터프리터가 실행전에 만들어 둔 글로벌(전역) 변수

728x90
반응형
728x90

018. 출력 : 파일 쓰기 - 하나씩 실험해본 것

 

 

파일 쓰기할 때 사용하는 open() 함수

파일 안에 내용 쓸 때 쓰는 .write() 함수

파일 안에 줄바꿈(enter 키 기능) 하고 싶다면 \n으로 줄바꿈

 

open(파일경로,파일명, 모드,(인코딩종류))에서 'w'나 'a' 같은 모드지정에서 추가모드('a') 사용시에,

불이 안들어오면 경로나 파일명이 잘못 된 것!

 

print()함수를 사용해서도 파일 안에 쓰기가 가능한데, 

print( 입력할 내용 , file = open()가 있는 변수명)하면 된다. 즉, file = 변수명을 지정해주면 그 안에 출력하도록 한다

f = open('새파일.txt','a',encoding='utf-8')
print('출력', file = f)
f.close()

 

 

728x90
반응형
728x90

017. 객체지향 언어란 - 특징 -

 

 

출처 : 위키백과

 

기본 구성요소에 대해 알아봤다면, 각각의 특징에 대해서 알아보자

 

1.자료의 추상화


불필요한 정보는 숨기고 중요한 정보만 표현하여 프로그램을 간결화 하는 것

 

 - 자료 추상화를 통해 정의된 자료형을 추상 자료형이라 함

 - 객체지향 프로그래밍(OOP)에서 일반적으로,

     추상 자료형을 클래스

     추상 자료형의 인스턴스를 객체

     추상 자료형에서 정의된 연산을 메소드

             라고한다. 

 

2.상속

새로운 클래스가 기존 클래스의 데이터와 연산을 이어 받아 사용할 수 있게 하는 기능

상속받는 새 클래스를 부클래스, 파생 클래스, 하위클래스, 자식 클래스 등으로 부르며, 기존 클래스를 기반클래스, 상위 클래스, 부모 클래스 등으로 부른다. 

상속개념을 통해 상위 클래스에서 이어받은 하위 클래스를 이용해 필요에 따라 클래스 수정이나 클래스 간 종속 관계를 형성해 객체를 조직화 할 수 있다

 

 

3.다중 상속

클래스가 2개 이상의 클래스로부터 상속 받을 수 있는 기능

 클래스들의 기능이 동시에 필요할 때 사용하나 상속관계에 혼란을 줄 수 있으니 주의가 필요하고 언어마다 가능유무가 다르니 확인이 필요하다

 

4.다형성 개념

어떤 한 요소에 여러 개념을 넣어 놓는 것

 보통 오버라이딩이나 오버로딩을 의미한다

 - 오버라이딩 : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것

 - 오버로딩 : 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것

 

5.동적 바인딩

실행 시간 중에 일어나거나 실행과정에서 변경될 수 있는 바인딩

바인딩 : 프로그램의 기본 단위에 해당 기본 단위가 가질 수 있는 속성 중에서 일부 필요한 속성만을 선택하여 연결해 주는 것

 ex) 변수를 구성하는 식별자(이름), 자료형 속성, 하나 이상의 주소(참조), 자료값에 구체적인 값을 확정하는 것

 

컴파일 시간에 완료되어 변하지 않는 정적 바인딩과는 반대 개념이다

 

 

728x90
반응형
728x90

017. 객체지향 언어(OOP, Object-Oriented Programming)란?  - 기본 구성 요소 -

 

 

출처 : 위키백과

 

 

일단 구성요소에 대해 알아보기 전에 객체지향(Object-Oriented)에 대해 한번 알아보자.

 

객체지향이라는 개념이 나타나기 이전의 프로그래밍 방법에서는 사람이 컴퓨터에게 프로그램이 뭘하고 그 다음에 뭘하고 명령을 주는 식으로 컴퓨터가 하는 일을 하나씩 알려주기 바빴다고 한다. 그러나 객체지향 프로그래밍(OOP)이 등장하고부터 프로그램을 작성할 대상이 되는 실제 세계의 사물(객체)을 그대로 표현하고, 그것들이 어떻게 움직이는지 정해주고 나서 그 객체들에게 일을 시킨다고 한다.

 객체지향 프로그래밍을 잘 사용하면 보다 좋은 프로그램을 빨리 만들 수 있고, 나중에 수정하기도 편해진다고 하며, 프로그래밍 언어들이 모두 객체지향적인 것은 아니지만 요즘에 주로 사용되는 것들은 객체지향을 제공하는 것이 많다고 합니다. 객체지향을 개념을 몰라도 간단한 프로그램을 짤 수 있지만, 윈도우나 복잡한 프로그램을 짤 때는 큰 도움이 된다고 한다.
(출처:https://wikidocs.net/84)

 

파이썬은 객체지향적 언어라고 한다. 다만 데이터분석이나 통계 쪽으로 많이 활용되고 있어

객체 간의 작용하는 프로그래밍보다는 사용자정의 함수들을 많이쓰므로 그리 느껴지지 않을 수 있다고한다.

 


 

이제 '객체지향(Object-Oriented)  언어'가 무엇인지 이해하기 위해서는 먼저 기본 구성요소를 알아보자

 

객체지향 언어의 3가지 기본 구성요소는 

클래스(class), 객체(object), 메소드(method)이다

 

1.클래스(class)

같은 타입의 그룹에 속하는 속성(attribute)과 동작(behavior)을 정의한 것

 

2.객체(object)

클래스의 인스턴스가 실제로 메모리에 할당된 것
 - 클래스에서 정의된 내용을 실행하며 객체 자체의 속성을 가지고 있다

 

3.메소드(method)

클래스로부터 생성된 객체를 사용하는 방법

 - 객체의 속성을 조작하는데 사용되며, 객체간의 통신은 메세지를 통해 이루어진다.

 

 

*개념 자체들이 한마디로 정의되기 어렵고, 내용이 복잡하고 방대하여 일단 간단하게 다루고

추후에 차차 계속 다뤄보기로 하자. 기초튼튼하게!!

728x90
반응형
728x90

016. 객체란?

 

출처 : 위키백과

 

처음 기초 교재나 수업을 들어보면 객체라는 말을 안들어 볼 수가 없을 수가 없을정도 여러번 나오는 단어인데 정작 이 의미를 정확히 몰라서 해당 내용이 이해가 안되는 경우가 종종 있었다. 구글링해보면 객체에 대해서 여러 글들이 존재했지만 그나마 가장 이해가 됬던게 위키여서 자료로 남겨두었다.

 

객체란 아주 심플하게 한마디로 정리하면,

프로그램에서 사용되는 '데이터' 또는 식별자에 의해 참조되는 '공간(주소)'이다.

구체적으로 객체는 변수, 자료구조, 함수 또는 메소드가 될 수 있다.

 

객체란?

1)프로그램에서 사용되는 '데이터'이며, 프로그램을 구성하는 단위 중 하나

2)식별자(identifier)에 의해 참조되는 '공간' or '주소'

 

위의 설명을 파이썬에서 예를들면, 

a = 1

변수 a를 설정하면 이 a의 값이 직접적으로 메모리 저장되는 것이라 이 a가 있는 주소를 메모리에 저장한다고 한다. 이게 식별자(identifier)에 의해 참조되는 공간이다.

이는 객체지향 프로그램(OOP)과 연관이 있다고 하는데 더가면 너무 복잡하므로 일단 여기까지만 알도록 하자.

 

728x90
반응형
728x90

015. 함수 filter, lambda

 

 

일단 필터함수랑 람다함수 각각 먼저 알아보자

 

1.filter()

  • 걸러낸다는 뜻. 함수도 동일한 의미
  • 두번째 인수(반복 가능한 자료형) 첫 번째 인수(함수명)에 입력되었을 때,  '반환 값이 참인 것만 걸러 내서 돌려준다.'

 

1)형태

filter(function, iterable)
filter(함수명, 반복가능한 자료형)

 

2)세부 내용

filter(함수명, 반복가능한 자료형)

  • 함수명(function) : True or False로만 반환
  • 반복가능한 자료형(iterable) : 함수에 차례로 들어갈 반복 가능한(iterable) 인수(instance)
instance
클래스로 만든 객체

 - 객체와 구분, 어떤 클래스의 객체인지 관련지어 얘기할 때 인스턴스라고 부른

 

3)특징

  • 여러 데이터 중에 일부만 추려낼 때 사용
  • 따라서, 보통 list,tuple을 대상으로 주로 사용함
  • filter()는 filter값으로만 리턴함
  • 결과값이 참인 것만 결과값을 돌려줌. False는 다 버리고 True만 줌
  • filter() 함수의 결과값을 list로 변환하는 가장 쉬운 방법은 list() 내장 함수를 사용하는 것.
  • 마찬가지로 tuple도 내장함수 tuple() 사용

 

이제 직접해보자

보다시피 filter()가 filter값으로 낸다는 의미를 알것이다. 이상한 숫자와 알파벳이 섞여있다

이를 사람이 알기 쉽게 변환할 수 있도록 하는게 list나 tuple로 바꿔주는 것이다. 그래서 아래에서 list()를 추가하였고, 

0보다 큰 [1,2] 값을 리턴한 것.

 

filter() 함수를 쉽게 한마디로 설명하자면 def 함수와 연계하여 함수의 조건을 충분하는 True값만 걸러서 추출한다고 생각하면 되겠다

 


2.lambda

def와 동일한 역할을 하는 녀석

1)형태

lambda 매개변수1,매개변수2... : 매개변수를 이용한 표현식

 

* 매개변수(parameter)와 인자(arguement)란?

def add(x,y):  # (x,y)가 매개변수(parameter)
	return x + y
    
z = add(4,-5)  # (4,-5)가 인자(argument)
print(z)

위의 def 함수를 lambda 함수로 전환해보면,

# lambda 함수로 변환

add = lambda x,y : x + y
z = add(4,-5)
print(z)

실제로 해보면, 결과값 또한 똑같게 잘나온다

 

2)특징

언제 사용하는가?

def를 사용할 필요없이 간단하거나, def를 사용할 수 없는 곳에 주로 사용

위의 filter() 함수식은 람다함수를 사용하면 더 간편하게 코드 작성가능

 

 

 

728x90
반응형

+ Recent posts