Python 기본 문법

조성철 (JoSworkS)·2020년 8월 16일
0

TIL(Today I Learned)

목록 보기
72/73
post-thumbnail

Hello, World!

  • 출력하기 위해 print() 함수 사용
print("Hello, World!");
  • 파이썬은 블록 스코프를 만들기 위해 중괄호가 아닌 띄어쓰기를 사용
x = 1
if x == 1:
    # indented four spaces
    print("x is 1.")

Variables and Types

  • 파이썬은 완전히 객체 지향적이고 정적 타입의 언어가 아님
  • 변수를 명백하게 할 필요가 없음
  • 모든 변수는 객체

Numbers

  • 숫자 타입의 경우 integers와 floating point numbers를 지원(그 외에도 복잡한 것들도 지원)

1. interger

myint = 7
print(myint)

2. float

myfloat = 7.0
print(myfloat)
myfloat = float(7)
print(myfloat)

Strings

  • 문자열은 홑따옴표 또는 쌍따옴표로 정의
mystring = 'hello'
print(mystring)
mystring = "hello"
print(mystring)
  • 아래와 같이 사용하는 것도 가능
mystring = "Don't worry about apostrophes"
print(mystring)
  • 숫자와 문자열에서 아래와 같이 호출도 가능
one = 1
two = 2
three = one + two
print(three)

hello = "hello"
world = "world"
helloworld = hello + " " + world
print(helloworld)
# change this code
mystring = "hello"
myfloat = 10.0
myint = 20

# testing code
if mystring == "hello":
    print("String: %s" % mystring)
if isinstance(myfloat, float) and myfloat == 10.0:
    print("Float: %f" % myfloat)
if isinstance(myint, int) and myint == 20:
    print("Integer: %d" % myint)

Lists

  • Lists는 배열과 유사
mylist = []
mylist.append(1)
mylist.append(2)
mylist.append(3)
print(mylist[0]) # prints 1
print(mylist[1]) # prints 2
print(mylist[2]) # prints 3

# prints out 1,2,3
for x in mylist:
    print(x)
  • 인덱스의 범위를 넘으면 에러
mylist = [1,2,3]
print(mylist[10])
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
    print(mylist[10])
IndexError: list index out of range

Basic Operators

Arithmetic Operators

number = 1 + 2 * 3 / 4.0
print(number)
  • 나머지 연산자
remainder = 11 % 3
print(remainder)
  • 제곱은 ** 으로 가능
squared = 7 ** 2
cubed = 2 ** 3
print(squared) // 49
print(cubed) // 8

Using Operators with Lists

  • 리스트끼리 조인 가능
even_numbers = [2,4,6,8]
odd_numbers = [1,3,5,7]
all_numbers = odd_numbers + even_numbers
print(all_numbers) // [1, 3, 5, 7, 2, 4, 6, 8]
  • 이런 것도 가능
print([1,2,3] * 3) // [1, 2, 3, 1, 2, 3, 1, 2, 3]

String Formatting

  • %s - String (or any object with a string representation, like numbers)
  • %d - Integers
  • %f - Floating point numbers
  • %.f - Floating point numbers with a fixed amount of digits to the right of the dot.
  • %x/%X - Integers in hex representation (lowercase/uppercase)
# This prints out "Hello, John!"
name = "John"
print("Hello, %s!" % name)
# This prints out "John is 23 years old."
name = "John"
age = 23
print("%s is %d years old." % (name, age))
# This prints out: A list: [1, 2, 3]
mylist = [1,2,3]
print("A list: %s" % mylist)

Basic String Operations

  • 스트링 변순 선언
astring = "Hello world!"
astring2 = 'Hello world!'
  • 쌍따옴표, 홑따옴표 같이 쓸 경우
astring = "Hello world!"
print("single quotes are ' '") // single quotes are ' '
print(len(astring)) // 12
  • 특정 문자의 인덱스 찾기
astring = "Hello world!"
print(astring.index("o")) // 4
  • 특정 인덱스의 범위 찾기
astring = "Hello world!"
print(astring[3:7]) // lo w
  • slice
astring = "Hello world!"
print(astring[3:7:2]) // l 
  • string reserve
astring = "Hello world!"
print(astring[::-1]) // !dlrow olleH
  • 대문자/소문자 변환
astring = "Hello world!"
print(astring.upper()) // HELLO WORLD!
print(astring.lower()) // hello world!
  • 접두어, 접미어 체크
astring = "Hello world!"
print(astring.startswith("Hello")) // True
print(astring.endswith("asdfasdfasdf")) // False
  • split
astring = "Hello world!"
afewwords = astring.split(" ")
print(afewwords) // ['Hello', 'world!']

Conditions

  • 조건을 평가하기 위해 불리언 사용
x = 2
print(x == 2) # prints out True
print(x == 3) # prints out False
print(x < 3) # prints out True
  • AND, OR 연산자
name = "John"
age = 23
if name == "John" and age == 23:
    print("Your name is John, and you are also 23 years old.") // Your name is John, and you are also 23 years old.

if name == "John" or name == "Rick":
    print("Your name is either John or Rick.") // Your name is either John or Rick.

The "in" operator

  • iterable 객체 컨테이너에 특정 객체가 존재하는지 체크할 때 사용될 수 있음
name = "John"
if name in ["John", "Rick"]:
    print("Your name is either John or Rick.") // Your name is either John or Rick.
  • 코드 블록을 위해 중괄호 대신 들여쓰기 사용
statement = False
another_statement = True
if statement is True:
    # do something
    pass
elif another_statement is True: # else if
    # do something else
    pass
else:
    # do another thing
    pass

The 'is' operator

  • ==와 평가방식이 다르며, is 연산자는 변수의 밸류들을 매치x
x = [1,2,3]
y = [1,2,3]
print(x == y) # Prints out True
print(x is y) # Prints out False

The "not" operator

  • 불리언 표현식 앞에 사용
print(not False) # Prints out True
print((not False) == (False)) # Prints out False

Loops

  • 2 종류의 반복문 존재

The "for" loop

primes = [2, 3, 5, 7]
for prime in primes:
    print(prime)
    // 2
    // 3
		// 5
		// 7
# Prints out the numbers 0,1,2,3,4
for x in range(5):
    print(x)

# Prints out 3,4,5
for x in range(3, 6):
    print(x)

# Prints out 3,5,7
for x in range(3, 8, 2):
    print(x)

"while" loops

# Prints out 0,1,2,3,4

count = 0
while count < 5:
    print(count)
    count += 1  # This is the same as count = count + 1

"break" and "continue" statements

# Prints out 0,1,2,3,4

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break

# Prints out only odd numbers - 1,3,5,7,9
for x in range(10):
    # Check if x is even
    if x % 2 == 0:
        continue
    print(x)

Functions

  • 함수 정의 및 호출
# Define our 3 functions
def my_function():
    print("Hello From My Function!")

def my_function_with_args(username, greeting):
    print("Hello, %s , From My Function!, I wish you %s"%(username, greeting))

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

# print(a simple greeting)
my_function()

#prints - "Hello, John Doe, From My Function!, I wish you a great year!"
my_function_with_args("John Doe", "a great year!")

# after this line x will hold the value 3!
x = sum_two_numbers(1,2)

Classes and Objects

  • 클래스 생성 및 호출
class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

print(myobjectx.variable) // blah
class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

myobjectx.function() // This is a message inside the class.

Dictionaries

  • 딕셔너리는 배열과 유사한 데이터 타입
  • 인덱스가 아닌 키/밸류 페어로 작동
  • 각 밸류는 키로 접근가능한 딕셔너리 안에 저장
phonebook = {}
phonebook["John"] = 938477566
phonebook["Jack"] = 938377264
phonebook["Jill"] = 947662781
print(phonebook) // {'Jack': 938377264, 'Jill': 947662781, 'John': 938477566}
phonebook = {
    "John" : 938477566,
    "Jack" : 938377264,
    "Jill" : 947662781
}
print(phonebook) // {'Jack': 938377264, 'Jill': 947662781, 'John': 938477566}

Iterating over dictionaries

phonebook = {"John" : 938477566,"Jack" : 938377264,"Jill" : 947662781}
for name, number in phonebook.items():
    print("Phone number of %s is %d" % (name, number))
    
    // Phone number of Jack is 938377264
		// Phone number of Jill is 947662781
		// Phone number of John is 938477566

Removing a value

phonebook = {
   "John" : 938477566,
   "Jack" : 938377264,
   "Jill" : 947662781
}
del phonebook["John"]
print(phonebook) // {'Jack': 938377264, 'Jill': 947662781}
phonebook = {
   "John" : 938477566,
   "Jack" : 938377264,
   "Jill" : 947662781
}
phonebook.pop("John")
print(phonebook) // {'Jack': 938377264, 'Jill': 947662781}

Modules and Packages

  • 파이썬에서 모듈은 py 확장자 사용
  • 모듈의 이름 = 파일의 이름
# game.py
# import the draw module
import draw

def play_game():
    ...

def main():
    result = play_game()
    draw.draw_game(result)

# this means that if this script is executed, then 
# main() will be executed
if __name__ == '__main__':
    main()
# draw.py

def draw_game():
    ...

def clear_screen(screen):
    ...

Importing module objects to the current namespace

  • 모듈의 특정 객체만 임포트
# game.py
# import the draw module
from draw import draw_game

def main():
    result = play_game()
    draw_game(result)

Importing all objects from a module

  • 모듈의 모든 객체 임포트
# game.py
# import the draw module
from draw import *

def main():
    result = play_game()
    draw_game(result)

Custom import name

  • 원하는 이름으로 모듈 임포트 가능
# game.py
# import the draw module
if visual_mode:
    # in visual mode, we draw using graphics
    import draw_visual as draw
else:
    # in textual mode, we print out text
    import draw_textual as draw

def main():
    result = play_game()
    # this can either be visual or textual depending on visual_mode
    draw.draw_game(result)

Module initialization

  • 같은 모듈을 두 번 임포트하면 singleton 규칙에 의해 오직 한 번만 로드
# draw.py

def draw_game():
    # when clearing the screen we can use the main screen object initialized in this module
    clear_screen(main_screen)
    ...

def clear_screen(screen):
    ...

class Screen():
    ...

# initialize main_screen as a singleton
main_screen = Screen()

Extending module load path

  • 특정 디렉토리인 환경변수 PYTHONPATH를 이용가능
PYTHONPATH=/foo python game.py
  • 아래는 로컬 디렉토리 만큼 foo 디렉토리로 부터 모듈을 로드 가능
sys.path.append("/foo")

Exploring built-in modules

# import the library
import urllib

# use it
urllib.urlopen(...)
  • 사용하길 워하는 모듈의 함수를 찾을 때 help함수를 이용하여 사용법을 알 수 있음
help(urllib.urlopen)

Writing packages

  • 패키지는 복수의 패키지들이나 모듈 자체에 포함된 네임 스페이스
  • 각 패키지의 디렉토리는 반드시 'init.py' 라는 특별한 파일이 포함되어야 함
  • 이 파일은 빈 파일 일수도 있으며, 디렉토리를 가리킴
  • 모듈을 임포트 하는 방법과 똑같이 임포트할 수 있음
  • 패키지 이름을 표시하는 foo라는 디렉토리를 만들면 bar라는 패키지 안에 모듈을 만들 수 있음
  • 그리고 foo 디렉토리 안에 init.py를 추가하는 것을 잊지 말아야 함
import foo.bar

// or 

from foo import bar
__init__.py:

__all__ = ["bar"]

참고자료

0개의 댓글