본문 바로가기

Python

[Python] Basic Syntax (기본 문법)

파이썬의 문법은 파이썬 프로그램을 작성할 때 사용하는 규칙 집합을 의미한다. 파이썬 프로그래밍 언어 문법은 펄(Perl), C 그리고 자바 프로그래밍 언어와 많이 유사하다. 그러나, 프로그래밍 언어들 사이에 명확한 차이가 존재한다.

첫 파이썬 프로그램

파이썬 "Hello, World!" 프로그램을 다양한 프로그래밍 모드로 실행해 보겠다.

파이썬 - 대화형 모드 프로그래밍

다음과 같이 명령 프롬프트에 파이썬을 입력해서 파이썬 인터프리터(interpreter)를 호출할 수 있다.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6

PS C:\Users\user> python
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

여기서 >>>는 명령을 입력할 수 있는 파이썬 명령 프롬프트를 나타낸다. 파이썬 프램프트에 다음과 같이 텍스트를 입력하고 Enter를 누르면,

>>> print("Hello World!")

만약, 파이썬 2.X버전 같이 오래된 버전의 파이썬을 실행했다면, 괄호 없이 print "Hello, World" 와 같이 사용해야 할 것이다. 그러나 2023년 6월 기준 벌써 python 3.11.버전 이상 나온 상황에서 python 2.X버전을 사용하는 일은 많이 없을 것이다.  그렇다면 다음과 같이 결과가 나올 것이다.

Hello World!

파이썬 - 스크립트 모드 프로그래밍

스크립트를 시작하고 스크립트를 완료할 때까지 계속되는 스크립트 파라미터를 이용해서 python 인터프리터를 호출할 수 있다. 스크립트가 완료되면 인터프리터가 더이상 활성화되지 않는다.
간단한 python 프로그램을 간단한 텍스트 파일인 스크립트로 작성해본다. python 파일의 활장자는 .py이다. test.py 파일에 다음 소스 코드를 입력한다.

print("Hello, World!")

PATH 변수에 python 인터프리터 경로가 설정되어 있다고 가정한다. 이제 다음과 같이 이 프로그램을 실행한다.

$ python test.py

이렇게 하면 다음과 같은 결과가 나온다.

Hellow, World!

 

 

python 스크립트를 실행하는 또 다른 방법을 알아본다. 여기 수정된 test.py 파일이 있다.

#!/usr/bin/python
print("Hellow, World!")

/usr/bin 디렉토리에서 python 인터프리터를 사용할 수 있다고 가정한다. 다음과 같이, 이 프로그램을 실행해보면,

$ chmod +x test.py		# 이것은 파일을 실행가능하게 만든다.
$./test.py

이렇게 하면 다음과 같은 결과가 나온다.

Hellow, World!

파이썬 식별자

python 식별자는 변수, 함수, 클래스, 모듈 또는 기타 object를 식별하는 데 사용하는 이름이다. 식별자는 A~Z, a~z의 문자 또는 밑줄(_)로 시작하고, 뒤에 0개 이상의 문자, 밑줄, 숫자(0~9)가 올 수 있다.
python 은 식별자 내에서 @, $ 및 %와 같은 구두점 문자를 허용하지 않는다.

더보기

python은 대소문자를 구분하는 프로그래밍 언어다. 그렇기 대문에 Manpower와 manpower는 python에서는 서로 다른 식별자이다.

다음은 python 식별자에 대한 명명규칙이다.

python 클래스 이름은 대문자로 시작하고, 다른 모든 식별자는 소문자로 시작한다.
하나의 밑줄로 시작하는 식별자는 개인 식별자이다.
두개의 밑줄로 시작하는 식별자는 강력한 개인 개인 식별자이다.
두개의 밑줄로 끝나는 식별자는 파이썬 언어에서 정의한 특수 이름이다.

파이썬 예약어

다음 목록은 파이썬 예약어들이다. 이 단어들은 예약된 단어이기 때문에 상수, 변수 또는 다른 식별자의 이름으로 사용할 수 없다. 모든 예약어는 소문자만 포함된다.

and as assert
break class continue
def del elif
else except False
finally for from
global if import
in is lambda
None nonlocal not
or pass raise
return True try
while with yield

 

파이썬 라인과 들여쓰기

python 프로그래밍은 클래스 및 함수 정의 또는 흐름 제어를 위한 코드 블록을 위한 교정기를 제공하지 않는다. 코드 블록은 라인 들여쓰기로 표시되며, 이는 엄격하게 적용된다.
들여쓰기의 공백 수는 가변적이지만, 모든 진술은 반드시 동일한 양으로 들여쓰기되어야 한다. 예를 들면,

if True:
	print("True")
else:
	print("False:)

그러나, 다음 블록은 에러를 발생시킨다.

if True:
print("Answer")
print("True")
else:
print("Answer")
print("False")

따라서, python에서는 같은 수의 공백으로 들여쓰기된 모든 연속선이 블록을 형성한다. 다음 예제에는 다양한 진술 블록이 있다.

더보기

이 시점에서 로직을 이해하려 하지 마라. 교정기가 없어도 다양한 블록을 이해했는지 확인하라.

import sys

try:
   # open file stream
   file = open(file_name, "w")
except IOError:
   print "There was an error writing to", file_name
   sys.exit()
print "Enter '", file_finish,
print "' When finished"
while file_text != file_finish:
   file_text = raw_input("Enter text: ")
   if file_text == file_finish:
      # close the file
      file.close
      break
   file.write(file_text)
   file.write("\n")
file.close()
file_name = raw_input("Enter filename: ")
if len(file_name) == 0:
   print "Next time please enter something"
   sys.exit()
try:
   file = open(file_name, "r")
except IOError:
   print "There was an error reading file"
   sys.exit()
file_text = file.read()
file.close()
print file_text

파이썬 다중 행 진술

python에서 진술은 일반적으로 새 행으로 끝난다. 그러나 python은 행 연속 문자(\)를 사용해서 행이 계속됨을 나타내는 것을 허용한다. 예를 들어,

total = item_one + \
	item_two + \
	item_three

[], {}, 또는 () 괄호 안에 포함된 진술은 행 연속 문자(\)를 사용할 필요없다. 예를 들어, 다음 진술은 python에서 잘 작동한다.

days = ['Monday', 'Tuesday', 'Wednesday'
	'Thursday', 'Friday']

파이썬에서의 인용

파이썬에서는 시작과 끝이 동일한 유형의 홑따옴표('), 쌍따옴표(") 그리고 3개의 따옴표(''', """)를 이용해서 문자열 리터럴(literals)를 나타낸다.

3개의 따옴표는 다중 행의 문자열을 표현하기 위해서 사용된다. 예를 들면, 다음 문장들은 모두 파이썬 법칙에 맞다.

word = 'word'

sentence = "This is a sentence."

paragraph = """This is a paragraph. It is
made up of multiple lines and sentences."""

파이썬에서의 주석

주석(Comments)은 파이썬 소스 코드 안에 있는 프로그래머들이 읽을 수 있는 설명이나 주석(annotation)들이다. 주석들은 인간이 소스 코드들을 더 쉽게 이해하기 위해서 쓰이고, 파이썬 인터프리터에게는 무시된다. 

대부분의 현대 프로그래밍 언어들과 같이, 파이썬도 단일행 (또는 행끝까지) 그리고 다중 행 (블록) 주석을 지원한다. 파이썬의 주석은 PHP, BASH, 그리고 Perl 프로그래밍 언어에서 사용할 수 있는 주석과 매우 비슷하다.

문자열 중간에 있지 않는 해쉬 사인(#, 샵)은 주석을 시작한다. # 뒤에 물리적 행 끝까지 오는 모든 글자는 주석의 일부이고, 파이썬 인터프리터는 그것들을 무시한다.

# First comment
print("Hello, World!")	# Second comment

실행한 결과는 다음과 같다.

Hello, World!

주석을 진술이나 표현 뒤에 적는 것도 가능하다.

name = "Madisetti" # This is again comment

주석을 다중 행으로 작성하는 것도 가능하다.

# This is a comment.
# This is a comment, too.
# This is a comment, too.
#I said that already.

삼따옴표안의 문자열도 파이썬 인터프리터에 무시되며, 다중 행 주석으로도 사용할 수 있다.

'''
This is a multiline
comments.
'''

파이썬 프로그램에서 빈 행 사용하기

설명이 포함된 공백만 포함된 줄을 빈 줄이라고 하며 Python은 이를 완전히 무시한다. 

상호작용하는 인터프리터 세션에서, 다중 진술을 끝내기 위해서는 반드시 빈 물리적 행을 입력해야한다.

사용자 기다리기

다음에 주어진 프로그램은 "Press the enter key to exit"라는 진술을 나타내고 표시하고 사용자의 행동을 기다리는 프롬프트이다.

#!/usr/bin/python

raw_input("\n\nPress the enter key to exit.")

"\n\n"는 실제 행을 나타내기 전에 2줄의 새 행을 만들기 위해서 사용되었다. 사용자가 키를 누르면, 프로그램은 종료된다. 이것은 유저가 어플리케이션이 끝날때까지 콘솔창을 열린 채로 둘 수 있는 좋은 속임수이다.

단일 행 다중 진술

세미콜론(;)은 진술을 새로운 코드 블록에 시작하지 않아도 단일 행에 다중 진술을 작성할 수 있도록 허락한다. 세미콜론을 활용한 간단한 코드이다.

import sys; x = 'foo'; sys.stdout.write(x + '\n')

Suite(짝?)로 사용되는 여러 문 그룹

단일 코드 블록을 만드는 개별 문 그룹을 파이썬에서는 Suite라고 한다. if, while, def, 그리고 클래스와 같은 복합문은 머리글과 집합이 필요하다.

머리글 행은 문(키워드)으로 시작하고 콜론(:)으로 끝난다. 그 뒤에 Suite를 구성하는 하나 이상의 행이 이어진다. 예를 들어,

if expression : 
	suite
elif expresseion:
	suite
else :
	suite

파이썬에서의 명령행 인수 

실행 방법에 대한 기본 정보를 제공하기 위해 많은 프로그램을 실행할 수 있다.

$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d     : debug output from parser (also PYTHONDEBUG=x)
-E     : ignore environment variables (such as PYTHONPATH)
-h     : print this help message and exit

[ etc. ]

또한 다양한 옵션을 허용하도록 스크립트를 프로그래밍할 수 있다. 명령줄 인수는 고급 항목이므로 Python의 나머지 개념을 살펴본 후에 다시 알아본다.