공부/파이썬 2021. 10. 31. 16:18

20211031 점프 투 파이썬 - 05-3

05-3

패키지

도트(.) 를 사용해서 디렉터리와 모듈을 간략하게(???) 사용하는 방법

import 관련 알아야 할것

도트(.)의 마지막은 모듈이어야 한다.

import a.b.c 에서 c는 함수가 될 수 없다는거.

 

__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 파일이지만 파이선3.3 부터는 없어도 인식된다.

하위버젼 호환을 위해 만들어두자.

 

__init__.py 파일에 

__all__ 변수를 사용해서 import * 할때 import 되는 모듈을 지정해놓을 수 있다.

__all__ = ['모듈명1']

 

form 디렉터리1.디렉터리2 import *

모듈명1.함수1 #이렇게 모듈명1 사용 가능

 

from ..디렉터리1.디렉터리2.모듈명 import 함수명

이렇게 하면 디렉터리1 의 앞에 있는 ".." 이 상대 경로의 부모 디렉터리를 의미한다. "."하나만 쓰면 자기 자신.

상대경로 사용시엔 모듈 안에서만 사용해야한다.

 

이거 파이썬으로 할 일의 범위가 늘어나고 프로젝트 작업인원이 늘어나면

꼭 알아야할 사용법들인듯

공부/파이썬 2021. 10. 24. 15:56

20211024 점프 투 파이썬 - 05-2 모듈

05-2 모듈 

요거도 사실 별거 없다.

대화형 인터프리터로 작성한게 아니라 

py 파일로 작성한 파이썬 코드를 다른 파일에서 사용할수 있는 방법

 

#모듈이름은 미리 작성한 py파일에서 확장자인 .py를 제거하고 쓴다.

import  모듈이름

#모듈이름 뒤에 .을 붙이면 특정 함수만 가져온다?

#mod.py에 있는 testShow 함수를 가져오고 싶다면 

import mod.testShow

#. 안쓰고 특정 함수만 가져다 쓰고 싶으면

from 모듈이름 import 모듈의함수이름

#mod1.py 파일에 있는 add랑 sub라는 함수를 가져다 쓰고 싶으면

from mod1 import add, sub

#mod2.py  파일에 있는 모든 함수를 가져다 쓰고 싶으면

from mod2 import *

 

import 시 문제점중 하나가

해당 py 파일에 작성한 모든 코드가 import // c로 얘기하면 include 되는거랑 같다.

import 한 코드가 원래의 py파일에서 실행된건지 아닌지 구분해서 실행하는 방법

if __name__ == "__main__" :

으로 __name__이란 파이썬 내부에서 사용하는 변수를 검사하면

현재 실행된 파일이 import 된건지 원래의 코드인지 알 수 있다.

 

물론 import 로 모듈을 불러온 경우 함수만이 아니라 변수나 클래스도 사용 가능하다.

 

파일 import 는 기본적으로 같은 디랙토리 내에서 가능하지만 os환경변수를 사용해서 path를 설정하거나

import sys 를 통해 파이썬이 설치, 연관 되어 있는 디렉토리를 한번에 설정하고 import 할 수도 있다

import sys

import mod

이런식.

공부/파이썬 2021. 10. 11. 16:52

20211011 점프 투 파이썬 - 05-1클래스

05-1 클래스

이건 별거 없다. 그냥 C++에서의 클래스랑 비슷

클래스란건 결국 변수저장+전용함수 가 합쳐진 개체의 틀

 

class 클래스명 :

    def 함수명( 변수1, 변수2, 변수3...) :

        함수내용

        함수내용

    def __init__(변수1) : #클래스 초기화 함수는 이름 고정

        초기화 함수

 

함수명에서 첫 변수1 은 자기자신을 의미한다.

 

class test_class :

    def test_func( self, bbb ) :

        self.aaa = bbb

    def test_func_2(self) :

        print(self.aaa)

a = test_class()

b = test_class()

a.test_func( 20 )

b.test_func( 30 )

a.test_func_2()

b.test_func_2()

#20

#30

 

상속이나 매서드 오버라이딩은 그냥 쓰면 된다

 

class 부모클래스 :

    내용1

class 자식클래스(부모클래스):

    내용2

 

클래스 변수는 클래스 자체에서 공용으로 쓰는 변수

클래스 변수도 공용으로 쓰다가 개별로 쓰면 개별 영역이 됩니다

class AAA :

    gBBB = 10000

a = AAA()

b = AAA()

print(a.gBBB, b.gBBB)

AAA.gBBB = 10

print(a.gBBB, b.gBBB)

a,gBBB = 100

print(a.gBBB, b.gBBB)

 

# 10000 10000

# 10 10

# 100 10

공부/파이썬 2021. 10. 4. 14:01

20211004 점프 투 파이썬

04-2 사용자 입력과 출력

 

#input 콘솔 입력

# num2 는 input 내 스트링 출력 후 프롬프트 표시

num = input()

num2 = input("숫자를 입력하시오 : ")

 

#print 용법 추가 큰따옴표

#띄어쓰기는 콤마로

#print 시 맨뒤에 자동으로 붙는 줄바꿈은 end = "스트링" 으로 변경가능

print( "aa" "bb" "cc")

print( "aa", "bb", "cc")

print( "aa" , end= "--")

print( "bb" , end= "--")

# aabbcc

# aa bb cc

# aa--bb--

 

04-3 파일 읽고 쓰기

 

#기본순서는 (새로 생성하거나 기존의) 파일을 열고, 파일에 읽거나 쓰고, 파일을 닫는다.

#open 옵션은 'w' - 쓰기만, 'r' - 읽기만, 'a' - 기존파일의 맨뒤에 추가

#새로 파일이 생성되더라도 파일 경로를 생성해 주진 않는다.

f = open("드라이브경로/경로/경로.../파일명.확장자", 'w')

f.close()

 

#파일에 내용 쓰기, 읽기 1

# write, readline 한줄씩 읽기 #문제는 줄바꿈 문자까지 포함해서 읽는다.
file_test = open("c:/python/file/새파일.txt", 'w') #경로 생성은 안한다.
for i in range(3):
    data = "%d 번째 줄입니다.\n" % i
    file_test.write( data )
file_test.close()
file_r = open("c:/python/file/새파일.txt", 'r')
while True:
    line = file_r.readline()
    if not line : break    # 무한루프로 돌면서 더이상 읽을 라인이 없으면 break로 루프 탈출
    print(line , end=" ")
file_r.close()
#0 번째 줄입니다.
#1 번째 줄입니다.
#2 번째 줄입니다.

 

#파일에 내용 쓰기, 읽기2

# writelines, readlines 리스트 통째로 쓰고 읽을때도 리스트에 한번에 넣기

file_test = open("c:/python/file/새파일.txt", 'w') #경로 생성은 안한다.
data_lines = ["0번째 줄입니다.\n","1번째 줄입니다.\n","2번째 줄입니다.\n"]
file_test.writelines( data )
file_test.close()
file_r = open("c:/python/file/새파일.txt", 'r')
lines = file_r.readlines()
for line in lines  :
    print( line , end="   a ")
file_r.close()
#0 번째 줄입니다.
#  a 1 번째 줄입니다.
#  a 2 번째 줄입니다.
#  a

 

#파일에 내용 쓰기, 읽기3

# read 파일 통째로 읽기.

# with as 문을 사용하면 with 블록을 벗어나는 순간 자동으로 파일변수가 close 된다


file_r = open("c:/python/file/새파일.txt", 'r')
data = file_r.read()
print( data )
file_r.close()
#####################################
with open("c:/python/file/새파일.txt", 'r') as file_r:
    data = file_r.read()
    print( data )

#위의 두 문단은 거의 동일한 결과 출력

 

#완전 번외

#sys 모듈을 사용해서 python 파일명.py 에 매개 변수 추가하기

import sys
args = sys.argv[1:]
for i in args:
    print(i)

# python 파일명.py aa bb cc dd
# aa
# bb
# cc

공부/파이썬 2021. 9. 26. 19:12

20210926 점프 투 파이썬

04-1 함수

 

def 함수이름( 매개변수 ) :

    수행할 문장1

    수행할 문장2

....

 

def add(a,b,c):

    return a+b+c

def add_print(a,b,c):

    print("%d, %d, %d 의 합은 %d입니다" % ( a,b,c,a+b+c) )

def say():

    return 'hi world'

def test_func(a,b)

    return a-b

test_func(4,1) = 3

test_func(b=3, a=10) = 7

 

매개변수 갯수를 모르는 경우 *매개변수 로 한번에 받을 수 있다.

def add_all( *num )

    result = 0

    for i in num:

        result = result + i

    return result

매개변수 갯수를 모르는 경우2  *매개변수 앞에 추가로 매개변수 넣을 수도 있음

def add_choice( choice, *num )

    if choice == "add" :

        result = 0

        for i in num :

             result = result + i

    elif choice == "mul":       

        result = 1

        for i in num :

             result = result * i

    return result 

매개변수를 키워드포함으로 받을 수도 있다. 딕셔너리화 가능

def print_kwargs(**kwargs):

    print(kwargs)

print_kwargs( a=1 ) -> {'a':1}

print_kwargs( name='test', a=2) -> {'name':'test', 'a':2}

 

함수의 결과값은 언제나 하나지만 여러개를 반환하려고 할 경우 튜플로 반환해준다

def ttt(a,b):

    return a+b, a*b, a-b

print( ttt(2,3) )-> (5, 6, -1)

 

매개변수에 미리 초기값을 넣어서 입력을 생략하게 할 수도 있다. c랑 동일

def tttt( a,b=3)

    return a+b

print( tttt(6) ) -> 9

 

함수내의 변수는 함수 내에서만 쓸수 있지만

global 가능

 

a = 1

def test() :

    global a

    a = a+1

test()

print(a)

 

def 말고 간결하게 함수 선언시 사용하는 lambda 

add = lambda a, b : a+b

print( add( 3,4 ) ) ----> 7

def add2(a,b):

    return a+b

print( add2(3,4) ) -----> 7

한줄짜리 간결한 함수 만들때 쓴다.