Python 퀵 가이드

Python은 높은 수준의 해석 된 대화 형 개체 지향 스크립팅 언어입니다. Python은 가독성이 높도록 설계되었습니다. 다른 언어가 구두점을 사용하는 경우 영어 키워드를 자주 사용하고 다른 언어보다 구문 구조가 적습니다.

  • Python is Interpreted− Python은 인터프리터가 런타임에 처리합니다. 프로그램을 실행하기 전에 컴파일 할 필요가 없습니다. 이것은 PERL 및 PHP와 유사합니다.

  • Python is Interactive − 실제로 Python 프롬프트에 앉아 인터프리터와 직접 상호 작용하여 프로그램을 작성할 수 있습니다.

  • Python is Object-Oriented − Python은 객체 내 코드를 캡슐화하는 객체 지향 스타일 또는 프로그래밍 기술을 지원합니다.

  • Python is a Beginner's Language − Python은 초급 프로그래머에게 훌륭한 언어이며 간단한 텍스트 처리에서 WWW 브라우저, 게임에 이르기까지 광범위한 응용 프로그램의 개발을 지원합니다.

파이썬의 역사

Python은 네덜란드의 수학과 컴퓨터 과학을위한 국립 연구소에서 80 년대 후반과 90 년대 초에 Guido van Rossum에 의해 개발되었습니다.

Python은 ABC, Modula-3, C, C ++, Algol-68, SmallTalk, Unix 셸 및 기타 스크립팅 언어를 비롯한 많은 다른 언어에서 파생됩니다.

Python은 저작권이 있습니다. Perl과 마찬가지로 Python 소스 코드는 이제 GNU GPL (General Public License)에 따라 사용할 수 있습니다.

Python은 현재 연구소의 핵심 개발 팀에서 유지 관리하지만 Guido van Rossum은 여전히 ​​진행 상황을 지시하는 데 중요한 역할을하고 있습니다.

Python 기능

Python의 기능은 다음과 같습니다.

  • Easy-to-learn− Python은 키워드가 적고 구조가 단순하며 구문이 명확하게 정의되어 있습니다. 이를 통해 학생은 언어를 빠르게 습득 할 수 있습니다.

  • Easy-to-read − Python 코드가 더 명확하게 정의되어 눈에 보입니다.

  • Easy-to-maintain − Python의 소스 코드는 유지 관리가 매우 쉽습니다.

  • A broad standard library − Python의 라이브러리 대부분은 UNIX, Windows 및 Macintosh에서 매우 이식 가능하며 플랫폼 간 호환이 가능합니다.

  • Interactive Mode − Python은 코드 조각의 대화 형 테스트 및 디버깅을 허용하는 대화 형 모드를 지원합니다.

  • Portable − Python은 다양한 하드웨어 플랫폼에서 실행될 수 있으며 모든 플랫폼에서 동일한 인터페이스를 가지고 있습니다.

  • Extendable− Python 인터프리터에 저수준 모듈을 추가 할 수 있습니다. 이러한 모듈을 통해 프로그래머는 도구를 추가하거나 사용자 정의하여보다 효율적으로 사용할 수 있습니다.

  • Databases − Python은 모든 주요 상용 데이터베이스에 대한 인터페이스를 제공합니다.

  • GUI Programming − Python은 Windows MFC, Macintosh 및 Unix의 X Window 시스템과 같은 많은 시스템 호출, 라이브러리 및 Windows 시스템에 생성 및 이식 할 수있는 GUI 응용 프로그램을 지원합니다.

  • Scalable − Python은 쉘 스크립팅보다 큰 프로그램에 대해 더 나은 구조와 지원을 제공합니다.

위에서 언급 한 기능 외에도 Python에는 좋은 기능의 큰 목록이 있으며 아래에 나열된 기능은 거의 없습니다.

  • 기능적이고 구조화 된 프로그래밍 방법과 OOP를 지원합니다.

  • 스크립팅 언어로 사용하거나 대규모 응용 프로그램을 빌드하기 위해 바이트 코드로 컴파일 할 수 있습니다.

  • 매우 높은 수준의 동적 데이터 유형을 제공하고 동적 유형 검사를 지원합니다.

  • 자동 가비지 수집을 지원합니다.

  • C, C ++, COM, ActiveX, CORBA 및 Java와 쉽게 통합 할 수 있습니다.

Python은 Linux 및 Mac OS X를 포함한 다양한 플랫폼에서 사용할 수 있습니다. Python 환경을 설정하는 방법을 이해하겠습니다.

지역 환경 설정

터미널 창을 열고 "python"을 입력하여 이미 설치되어 있고 어떤 버전이 설치되어 있는지 확인하십시오.

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX 등)
  • Win 9x / NT / 2000
  • Macintosh (Intel, PPC, 68K)
  • OS/2
  • DOS (여러 버전)
  • PalmOS
  • Nokia 휴대폰
  • Windows CE
  • 도토리 / RISC OS
  • BeOS
  • Amiga
  • VMS/OpenVMS
  • QNX
  • VxWorks
  • Psion
  • Python은 또한 Java 및 .NET 가상 머신으로 이식되었습니다.

Python 얻기

최신 최신 소스 코드, 바이너리, 문서, 뉴스 등은 Python의 공식 웹 사이트에서 확인할 수 있습니다. https://www.python.org/

다음에서 Python 문서를 다운로드 할 수 있습니다. https://www.python.org/doc/. 문서는 HTML, PDF 및 PostScript 형식으로 제공됩니다.

Python 설치

Python 배포는 다양한 플랫폼에서 사용할 수 있습니다. 플랫폼에 적용 가능한 바이너리 코드 만 다운로드하고 Python을 설치하면됩니다.

플랫폼의 바이너리 코드를 사용할 수없는 경우 소스 코드를 수동으로 컴파일하려면 C 컴파일러가 필요합니다. 소스 코드를 컴파일하면 설치에 필요한 기능 선택 측면에서 더 많은 유연성을 제공합니다.

다음은 다양한 플랫폼에 Python을 설치하는 간단한 개요입니다.

Unix 및 Linux 설치

다음은 Unix / Linux 컴퓨터에 Python을 설치하는 간단한 단계입니다.

  • 웹 브라우저를 열고 https://www.python.org/downloads/.

  • 링크를 따라 Unix / Linux에서 사용할 수있는 압축 된 소스 코드를 다운로드하십시오.

  • 파일을 다운로드하고 추출합니다.

  • 일부 옵션을 사용자 정의 하려면 모듈 / 설정 파일을 편집하십시오 .

  • ./configure 스크립트 실행

  • make

  • 설치하다

그러면 표준 위치 / usr / local / bin에 Python이 설치 되고 / usr / local / lib / pythonXX에 해당 라이브러리가 설치됩니다. 여기서 XX는 Python의 버전입니다.

Windows 설치

Windows 컴퓨터에 Python을 설치하는 단계는 다음과 같습니다.

  • 웹 브라우저를 열고 https://www.python.org/downloads/.

  • Windows 설치 프로그램 python-XYZ.msi 파일에 대한 링크를 따르십시오. 여기서 XYZ는 설치해야하는 버전입니다.

  • 이 설치 프로그램 python-XYZ.msi 를 사용하려면 Windows 시스템이 Microsoft Installer 2.0을 지원해야합니다. 설치 프로그램 파일을 로컬 컴퓨터에 저장 한 다음 실행하여 컴퓨터가 MSI를 지원하는지 확인합니다.

  • 다운로드 한 파일을 실행합니다. 이렇게하면 정말 사용하기 쉬운 Python 설치 마법사가 나타납니다. 기본 설정을 수락하고 설치가 완료 될 때까지 기다리면 완료됩니다.

Macintosh 설치

최근 Mac은 Python이 설치된 상태로 제공되지만 몇 년이 지났을 수 있습니다. 보다http://www.python.org/download/mac/Mac에서 개발을 지원하는 추가 도구와 함께 현재 버전을 얻는 방법에 대한 지침을 참조하십시오. Mac OS X 10.3 (2003 년 출시) 이전의 구형 Mac OS의 경우 MacPython을 사용할 수 있습니다.

Jack Jansen은이를 유지하며 그의 웹 사이트에서 전체 문서에 대한 전체 액세스 권한을 가질 수 있습니다. http://www.cwi.nl/~jack/macpython.html. Mac OS 설치에 대한 전체 설치 세부 정보를 찾을 수 있습니다.

PATH 설정

프로그램 및 기타 실행 파일은 여러 디렉토리에있을 수 있으므로 운영 체제는 OS가 실행 파일을 검색하는 디렉토리를 나열하는 검색 경로를 제공합니다.

경로는 운영 체제에서 유지 관리하는 명명 된 문자열 인 환경 변수에 저장됩니다. 이 변수는 명령 셸 및 기타 프로그램에서 사용할 수있는 정보를 포함합니다.

그만큼 path 변수는 Unix에서 PATH 또는 Windows에서 Path로 이름이 지정됩니다 (Unix는 대소 문자를 구분하지만 Windows는 그렇지 않습니다).

Mac OS에서는 설치 프로그램이 경로 세부 정보를 처리합니다. 특정 디렉터리에서 Python 인터프리터를 호출하려면 Python 디렉터리를 경로에 추가해야합니다.

Unix / Linux에서 경로 설정

유닉스에서 특정 세션의 경로에 파이썬 디렉토리를 추가하려면-

  • In the csh shell − setenv PATH "$ PATH : / usr / local / bin / python"을 입력하고 Enter 키를 누릅니다.

  • In the bash shell (Linux) − export PATH = "$ PATH : / usr / local / bin / python"을 입력하고 Enter 키를 누릅니다.

  • In the sh or ksh shell − PATH = "$ PATH : / usr / local / bin / python"을 입력하고 Enter 키를 누릅니다.

  • Note − / usr / local / bin / python은 Python 디렉토리의 경로입니다.

Windows에서 경로 설정

Windows에서 특정 세션의 경로에 Python 디렉토리를 추가하려면-

At the command prompt − path % path %; C : \ Python을 입력하고 Enter 키를 누릅니다.

Note − C : \ Python은 Python 디렉토리의 경로입니다.

Python 환경 변수

다음은 Python에서 인식 할 수있는 중요한 환경 변수입니다.

Sr. 아니. 변수 및 설명
1

PYTHONPATH

PATH와 유사한 역할이 있습니다. 이 변수는 프로그램으로 가져온 모듈 파일의 위치를 ​​Python 인터프리터에 알려줍니다. 여기에는 Python 소스 라이브러리 디렉토리와 Python 소스 코드가 포함 된 디렉토리가 포함되어야합니다. PYTHONPATH는 때때로 Python 설치 프로그램에 의해 사전 설정됩니다.

2

PYTHONSTARTUP

여기에는 Python 소스 코드를 포함하는 초기화 파일의 경로가 포함됩니다. 인터프리터를 시작할 때마다 실행됩니다. Unix에서는 .pythonrc.py로 이름이 지정되며 유틸리티를로드하거나 PYTHONPATH를 수정하는 명령이 포함되어 있습니다.

PYTHONCASEOK

Windows에서 가져 오기 문에서 대소 문자를 구분하지 않는 첫 번째 일치 항목을 찾도록 Python에 지시하는 데 사용됩니다. 이 변수를 활성화하려면 임의의 값으로 설정하십시오.

4

PYTHONHOME

대체 모듈 검색 경로입니다. 일반적으로 모듈 라이브러리를 쉽게 전환 할 수 있도록 PYTHONSTARTUP 또는 PYTHONPATH 디렉토리에 포함됩니다.

Python 실행

Python을 시작하는 방법에는 세 가지가 있습니다.

대화 형 통역사

Unix, DOS 또는 명령 줄 인터프리터 또는 셸 창을 제공하는 다른 시스템에서 Python을 시작할 수 있습니다.

시작하다 python 명령 줄.

대화 형 인터프리터에서 즉시 코딩을 시작하십시오.

$python # Unix/Linux
or
python% # Unix/Linux
or
C:> python # Windows/DOS

다음은 사용 가능한 모든 명령 줄 옵션 목록입니다.

Sr. 아니. 옵션 및 설명
1

-d

디버그 출력을 제공합니다.

2

-O

최적화 된 바이트 코드를 생성합니다 (결과적으로 .pyo 파일).

-S

시작시 Python 경로를 찾기 위해 가져 오기 사이트를 실행하지 마십시오.

4

-v

자세한 출력 (import 문에 대한 자세한 추적).

5

-X

클래스 기반 내장 예외를 비활성화합니다 (문자열 만 사용). 버전 1.6부터 사용되지 않습니다.

6

-c cmd

cmd 문자열로 전송 된 Python 스크립트 실행

7

file

주어진 파일에서 Python 스크립트 실행

명령 줄에서 스크립트

Python 스크립트는 다음과 같이 애플리케이션에서 인터프리터를 호출하여 명령 줄에서 실행할 수 있습니다.

$python script.py # Unix/Linux

or

python% script.py # Unix/Linux

or 

C: >python script.py # Windows/DOS

Note − 파일 권한 모드가 실행을 허용하는지 확인하십시오.

통합 개발 환경

Python을 지원하는 시스템에 GUI 애플리케이션이있는 경우 GUI (그래픽 사용자 인터페이스) 환경에서도 Python을 실행할 수 있습니다.

  • Unix − IDLE은 최초의 Python 용 Unix IDE입니다.

  • Windows − PythonWin은 Python을위한 최초의 Windows 인터페이스이며 GUI가있는 IDE입니다.

  • Macintosh − IDLE IDE와 함께 Python의 Macintosh 버전은 MacBinary 또는 BinHex'd 파일로 다운로드 할 수있는 메인 웹 사이트에서 구할 수 있습니다.

환경을 올바르게 설정할 수없는 경우 시스템 관리자의 도움을받을 수 있습니다. Python 환경이 올바르게 설정되고 완벽하게 작동하는지 확인하십시오.

Note − 이후 장에서 제공되는 모든 예제는 Linux의 CentOS 버전에서 사용 가능한 Python 2.4.3 버전으로 실행됩니다.

우리는 이미 온라인으로 파이썬 프로그래밍 환경을 설정 했으므로 이론을 배우는 동시에 사용 가능한 모든 예제를 온라인으로 실행할 수 있습니다. 모든 예제를 자유롭게 수정하고 온라인에서 실행하십시오.

Python 언어는 Perl, C 및 Java와 많은 유사점이 있습니다. 그러나 언어 간에는 몇 가지 확실한 차이점이 있습니다.

첫 번째 Python 프로그램

다양한 프로그래밍 모드에서 프로그램을 실행 해 보겠습니다.

대화 형 모드 프로그래밍

스크립트 파일을 매개 변수로 전달하지 않고 인터프리터를 호출하면 다음과 같은 프롬프트가 나타납니다.

$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python 프롬프트에 다음 텍스트를 입력하고 Enter 키를 누릅니다.

>>> print "Hello, Python!"

새 버전의 Python을 실행하는 경우 다음과 같이 괄호가있는 print 문을 사용해야합니다. print ("Hello, Python!");. 그러나 Python 버전 2.4.3에서는 다음과 같은 결과가 생성됩니다.

Hello, Python!

스크립트 모드 프로그래밍

스크립트 매개 변수로 인터프리터를 호출하면 스크립트 실행이 시작되고 스크립트가 완료 될 때까지 계속됩니다. 스크립트가 완료되면 인터프리터가 더 이상 활성화되지 않습니다.

간단한 Python 프로그램을 스크립트로 작성해 보겠습니다. Python 파일에는 확장자가 있습니다..py. test.py 파일에 다음 소스 코드를 입력하십시오-

print "Hello, Python!"

PATH 변수에 Python 인터프리터가 설정되어 있다고 가정합니다. 이제 다음과 같이이 프로그램을 실행 해보십시오.

$ python test.py

이것은 다음 결과를 생성합니다-

Hello, Python!

Python 스크립트를 실행하는 다른 방법을 시도해 보겠습니다. 다음은 수정 된 test.py 파일입니다.

#!/usr/bin/python

print "Hello, Python!"

/ usr / bin 디렉토리에 Python 인터프리터가 있다고 가정합니다. 이제 다음과 같이이 프로그램을 실행 해보십시오.

$ chmod +x test.py     # This is to make file executable
$./test.py

이것은 다음 결과를 생성합니다-

Hello, Python!

Python 식별자

Python 식별자는 변수, 함수, 클래스, 모듈 또는 기타 개체를 식별하는 데 사용되는 이름입니다. 식별자는 A에서 Z까지의 문자 또는 a에서 z까지의 문자 또는 밑줄 (_)로 시작하여 0 개 이상의 문자, 밑줄 및 숫자 (0에서 9)가 이어집니다.

Python은 식별자 내에서 @, $ 및 %와 같은 구두점 문자를 허용하지 않습니다. Python은 대소 문자를 구분하는 프로그래밍 언어입니다. 그러므로,Manpowermanpower 파이썬에서 두 개의 다른 식별자입니다.

다음은 파이썬 식별자에 대한 명명 규칙입니다.

  • 클래스 이름은 대문자로 시작합니다. 다른 모든 식별자는 소문자로 시작합니다.

  • 단일 선행 밑줄로 시작하는 식별자는 식별자가 비공개임을 나타냅니다.

  • 두 개의 밑줄로 시작하는 식별자는 강력한 개인 식별자를 나타냅니다.

  • 식별자가 두 개의 후행 밑줄로 끝나는 경우 식별자는 언어 정의 특수 이름입니다.

예약어

다음 목록은 Python 키워드를 보여줍니다. 이는 예약어이며 상수, 변수 또는 기타 식별자 이름으로 사용할 수 없습니다. 모든 Python 키워드에는 소문자 만 포함됩니다.

임원 아니
주장하다 드디어 또는
단절 ...에 대한 통과하다
수업 ...에서 인쇄
계속하다 글로벌 올리다
데프 만약 반환
del 수입 시험
엘리 프 동안
그밖에 이다
람다 수율

줄과 들여 쓰기

Python은 클래스 및 함수 정의 또는 흐름 제어를위한 코드 블록을 나타내는 중괄호를 제공하지 않습니다. 코드 블록은 엄격하게 적용되는 줄 들여 쓰기로 표시됩니다.

들여 쓰기의 공백 수는 가변적이지만 블록 내의 모든 명령문은 동일한 양으로 들여 쓰기되어야합니다. 예를 들면-

if True:
   print "True"
else:
   print "False"

그러나 다음 블록은 오류를 생성합니다.

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

따라서 Python에서 동일한 수의 공백으로 들여 쓰기 된 모든 연속 행은 블록을 형성합니다. 다음 예제에는 다양한 문 블록이 있습니다.

Note−이 시점에서 논리를 이해하려고하지 마십시오. 중괄호가 없어도 다양한 블록을 이해했는지 확인하십시오.

#!/usr/bin/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의 문은 일반적으로 새 줄로 끝납니다. 그러나 파이썬은 줄이 계속되어야 함을 나타 내기 위해 줄 연속 문자 (\)의 사용을 허용합니다. 예를 들면-

total = item_one + \
        item_two + \
        item_three

[], {} 또는 () 대괄호 안에 포함 된 명령문은 줄 연속 문자를 사용할 필요가 없습니다. 예를 들면-

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

파이썬의 인용문

Python은 동일한 유형의 따옴표가 문자열을 시작하고 종료하는 한, 문자열 리터럴을 표시하기 위해 작은 따옴표 ( '), 이중 ( ") 및 삼중 (' ''또는" "") 따옴표를 허용합니다.

삼중 따옴표는 문자열을 여러 줄로 확장하는 데 사용됩니다. 예를 들어, 다음은 모두 합법적입니다.

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

Python의 주석

문자열 리터럴 안에없는 해시 기호 (#)는 주석을 시작합니다. # 뒤와 실제 줄 끝까지의 모든 문자는 주석의 일부이며 Python 인터프리터는이를 무시합니다.

#!/usr/bin/python

# First comment
print "Hello, Python!" # second comment

이것은 다음 결과를 생성합니다-

Hello, Python!

문장이나 표현식 뒤에 같은 줄에 주석을 입력 할 수 있습니다.

name = "Madisetti" # This is again comment

다음과 같이 여러 줄에 주석을 달 수 있습니다.

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

빈 줄 사용

공백 만 포함하고 주석이있는 줄은 빈 줄이라고하며 Python은이를 완전히 무시합니다.

대화 형 인터프리터 세션에서 여러 줄 문을 종료하려면 빈 실제 줄을 입력해야합니다.

사용자를 기다리는 중

프로그램의 다음 줄은 "종료하려면 Enter 키를 누르십시오"라는 프롬프트를 표시하고 사용자가 조치를 취할 때까지 기다립니다.

#!/usr/bin/python

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

여기서 "\ n \ n"은 실제 줄을 표시하기 전에 두 개의 새 줄을 만드는 데 사용됩니다. 사용자가 키를 누르면 프로그램이 종료됩니다. 이것은 사용자가 응용 프로그램을 다 사용할 때까지 콘솔 창을 열어 두는 좋은 방법입니다.

한 줄에 여러 문

세미콜론 (;)은 어느 문도 새 코드 블록을 시작하지 않는 경우 한 줄에 여러 문을 허용합니다. 다음은 세미콜론을 사용한 샘플 캡처입니다.

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

스위트로 여러 명령문 그룹

단일 코드 블록을 만드는 개별 명령문 그룹이 호출됩니다. suites파이썬에서. if, while, def 및 class와 같은 복합 또는 복합 명령문에는 헤더 행과 스위트가 필요합니다.

헤더 행은 명령문 (키워드 사용)을 시작하고 콜론 (:)으로 끝나고 그 뒤에 스위트를 구성하는 하나 이상의 행이옵니다. 예를 들면-

if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

명령 줄 인수

실행 방법에 대한 몇 가지 기본 정보를 제공하기 위해 많은 프로그램을 실행할 수 있습니다. 파이썬은 -h로 이것을 할 수 있습니다-

$ 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. ]

다양한 옵션을 허용하는 방식으로 스크립트를 프로그래밍 할 수도 있습니다. Command Line Arguments 는 고급 주제이며 Python 개념의 나머지 부분을 살펴보면 잠시 후에 연구해야합니다.

변수는 값을 저장하기 위해 예약 된 메모리 위치 일뿐입니다. 이것은 변수를 만들 때 메모리에 약간의 공간을 예약한다는 것을 의미합니다.

변수의 데이터 유형에 따라 인터프리터는 메모리를 할당하고 예약 된 메모리에 저장할 수있는 항목을 결정합니다. 따라서 변수에 다른 데이터 유형을 할당하여 이러한 변수에 정수, 소수 또는 문자를 저장할 수 있습니다.

변수에 값 할당

파이썬 변수는 메모리 공간을 예약하기 위해 명시적인 선언이 필요하지 않습니다. 변수에 값을 할당하면 선언이 자동으로 발생합니다. 등호 (=)는 변수에 값을 할당하는 데 사용됩니다.

= 연산자의 왼쪽에있는 피연산자는 변수의 이름이고 = 연산자의 오른쪽에있는 피연산자는 변수에 저장된 값입니다. 예를 들면-

#!/usr/bin/python

counter = 100          # An integer assignment
miles   = 1000.0       # A floating point
name    = "John"       # A string

print counter
print miles
print name

여기서 100, 1000.0 및 "John"은 각각 counter , milesname 변수에 할당 된 값 입니다. 이것은 다음 결과를 생성합니다-

100
1000.0
John

다중 할당

Python을 사용하면 단일 값을 여러 변수에 동시에 할당 할 수 있습니다. 예를 들면-

a = b = c = 1

여기서는 값이 1 인 정수 객체가 생성되고 세 변수가 모두 동일한 메모리 위치에 할당됩니다. 여러 변수에 여러 개체를 할당 할 수도 있습니다. 예를 들면-

a,b,c = 1,2,"john"

여기서 값이 1과 2 인 정수 개체 두 개가 각각 변수 a와 b에 할당되고 값이 "john"인 문자열 개체 하나가 변수 c에 할당됩니다.

표준 데이터 유형

메모리에 저장된 데이터는 다양한 유형이 될 수 있습니다. 예를 들어, 사람의 나이는 숫자 값으로 저장되고 주소는 영숫자로 저장됩니다. 파이썬에는 가능한 작업과 각각의 저장 방법을 정의하는 데 사용되는 다양한 표준 데이터 유형이 있습니다.

파이썬에는 5 가지 표준 데이터 유형이 있습니다.

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

파이썬 숫자

숫자 데이터 유형은 숫자 값을 저장합니다. 숫자 개체는 값을 할당 할 때 만들어집니다. 예를 들면-

var1 = 1
var2 = 10

del 문을 사용하여 숫자 개체에 대한 참조를 삭제할 수도 있습니다. del 문의 구문은 다음과 같습니다.

del var1[,var2[,var3[....,varN]]]]

del 문을 사용하여 단일 개체 또는 여러 개체를 삭제할 수 있습니다. 예를 들면-

del var
del var_a, var_b

파이썬은 네 가지 숫자 유형을 지원합니다-

  • int (부호있는 정수)
  • long (long 정수, 8 진수 및 16 진수로도 표현 가능)
  • float (부동 소수점 실제 값)
  • 복소수 (복소수)

다음은 숫자의 몇 가지 예입니다.

int 흙손 복잡한
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEl 32.3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • 파이썬에서는 long과 함께 소문자 l을 사용할 수 있지만 숫자 1과의 혼동을 피하기 위해 대문자 L 만 사용하는 것이 좋습니다. 파이썬은 대문자 L로 long 정수를 표시합니다.

  • 복소수는 x + yj로 표시되는 순서가 지정된 실수 부동 소수점 숫자 쌍으로 구성됩니다. 여기서 x와 y는 실수이고 j는 허수 단위입니다.

파이썬 문자열

Python의 문자열은 따옴표로 표시된 연속적인 문자 집합으로 식별됩니다. Python은 작은 따옴표 또는 큰 따옴표 쌍을 허용합니다. 문자열의 일부는 슬라이스 연산자 ([] 및 [:])를 사용하여 가져올 수 있습니다. 인덱스는 문자열 시작 부분에서 0으로 시작하고 끝 부분에서 -1부터 작동합니다.

더하기 (+) 기호는 문자열 연결 연산자이고 별표 (*)는 반복 연산자입니다. 예를 들면-

#!/usr/bin/python

str = 'Hello World!'

print str          # Prints complete string
print str[0]       # Prints first character of the string
print str[2:5]     # Prints characters starting from 3rd to 5th
print str[2:]      # Prints string starting from 3rd character
print str * 2      # Prints string two times
print str + "TEST" # Prints concatenated string

이것은 다음 결과를 생성합니다-

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

파이썬 목록

목록은 Python의 복합 데이터 유형 중 가장 다재다능합니다. 목록에는 쉼표로 구분되고 대괄호 ([])로 묶인 항목이 포함됩니다. 목록은 C의 배열과 어느 정도 유사합니다. 목록의 한 가지 차이점은 목록에 속하는 모든 항목이 다른 데이터 유형일 수 있다는 것입니다.

목록에 저장된 값은 목록의 시작 부분에서 0부터 시작하고 끝 -1까지 작동하는 인덱스와 함께 슬라이스 연산자 ([] 및 [:])를 사용하여 액세스 할 수 있습니다. 더하기 (+) 기호는 목록 연결 연산자이고 별표 (*)는 반복 연산자입니다. 예를 들면-

#!/usr/bin/python

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print list          # Prints complete list
print list[0]       # Prints first element of the list
print list[1:3]     # Prints elements starting from 2nd till 3rd 
print list[2:]      # Prints elements starting from 3rd element
print tinylist * 2  # Prints list two times
print list + tinylist # Prints concatenated lists

이것은 다음 결과를 생성합니다-

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

Python 튜플

튜플은 목록과 유사한 또 다른 시퀀스 데이터 유형입니다. 튜플은 쉼표로 구분 된 여러 값으로 구성됩니다. 그러나 목록과 달리 튜플은 괄호로 묶여 있습니다.

목록과 튜플의 주요 차이점은 다음과 같습니다. 목록은 대괄호 ([])로 묶여 있고 요소와 크기를 변경할 수 있지만 튜플은 괄호 (())로 묶어서 업데이트 할 수 없습니다. 튜플은 다음과 같이 생각할 수 있습니다.read-only기울기. 예를 들면-

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print tuple               # Prints the complete tuple
print tuple[0]            # Prints first element of the tuple
print tuple[1:3]          # Prints elements of the tuple starting from 2nd till 3rd 
print tuple[2:]           # Prints elements of the tuple starting from 3rd element
print tinytuple * 2       # Prints the contents of the tuple twice
print tuple + tinytuple   # Prints concatenated tuples

이것은 다음 결과를 생성합니다-

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

다음 코드는 허용되지 않는 튜플을 업데이트하려고했기 때문에 튜플에 유효하지 않습니다. 목록에서도 비슷한 경우가 가능합니다.

#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

파이썬 사전

파이썬의 사전은 일종의 해시 테이블 유형입니다. 그들은 Perl에서 발견되는 연관 배열 또는 해시처럼 작동하며 키-값 쌍으로 구성됩니다. 사전 키는 거의 모든 Python 유형이 될 수 있지만 일반적으로 숫자 또는 문자열입니다. 반면에 값은 임의의 Python 객체가 될 수 있습니다.

사전은 중괄호 ({})로 묶여 있으며 값은 대괄호 ([])를 사용하여 할당 및 액세스 할 수 있습니다. 예를 들면-

#!/usr/bin/python

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print dict['one']       # Prints value for 'one' key
print dict[2]           # Prints value for 2 key
print tinydict          # Prints complete dictionary
print tinydict.keys()   # Prints all the keys
print tinydict.values() # Prints all the values

이것은 다음 결과를 생성합니다-

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

사전에는 요소 간의 순서 개념이 없습니다. 요소가 "불 순서"라고 말하는 것은 올바르지 않습니다. 그들은 단순히 순서가 없습니다.

데이터 유형 변환

경우에 따라 내장 유형간에 변환을 수행해야 할 수도 있습니다. 유형간에 변환하려면 유형 이름을 함수로 사용하면됩니다.

한 데이터 유형에서 다른 데이터 유형으로 변환을 수행하는 몇 가지 내장 함수가 있습니다. 이러한 함수는 변환 된 값을 나타내는 새 개체를 반환합니다.

Sr. 아니. 기능 및 설명
1

int(x [,base])

x를 정수로 변환합니다. base는 x가 문자열 인 경우 기본을 지정합니다.

2

long(x [,base] )

x를 긴 정수로 변환합니다. base는 x가 문자열 인 경우 기본을 지정합니다.

float(x)

x를 부동 소수점 숫자로 변환합니다.

4

complex(real [,imag])

복소수를 만듭니다.

5

str(x)

객체 x를 문자열 표현으로 변환합니다.

6

repr(x)

개체 x를 식 문자열로 변환합니다.

7

eval(str)

문자열을 평가하고 객체를 반환합니다.

8

tuple(s)

s를 튜플로 변환합니다.

9

list(s)

s를 목록으로 변환합니다.

10

set(s)

s를 집합으로 변환합니다.

11

dict(d)

사전을 만듭니다. d는 (키, 값) 튜플의 시퀀스 여야합니다.

12

frozenset(s)

s를 고정 된 집합으로 변환합니다.

13

chr(x)

정수를 문자로 변환합니다.

14

unichr(x)

정수를 유니 코드 문자로 변환합니다.

15

ord(x)

단일 문자를 정수 값으로 변환합니다.

16

hex(x)

정수를 16 진수 문자열로 변환합니다.

17

oct(x)

정수를 8 진수 문자열로 변환합니다.

연산자는 피연산자의 값을 조작 할 수있는 구조입니다.

식 4 + 5 = 9를 고려하십시오. 여기서 4와 5는 피연산자, +는 연산자라고합니다.

연산자 유형

Python 언어는 다음 유형의 연산자를 지원합니다.

  • 산술 연산자
  • 비교 (관계형) 연산자
  • 할당 연산자
  • 논리 연산자
  • 비트 연산자
  • 회원 운영자
  • ID 연산자

모든 연산자를 하나씩 살펴 보겠습니다.

파이썬 산술 연산자

변수 a가 10을 보유하고 변수 b가 20을 보유한다고 가정하면-

[ 보기 예 ]

운영자 기술
+ 추가 연산자의 양쪽에 값을 추가합니다. a + b = 30
-빼기 왼손 피연산자에서 오른손 피연산자를 뺍니다. a – b = -10
* 곱셈 연산자의 양쪽에 값을 곱합니다. a * b = 200
/ 부문 왼손 피연산자를 오른손 피연산자로 나눕니다. b / a = 2
% 계수 왼손 피연산자를 오른손 피연산자로 나누고 나머지를 반환합니다. b % a = 0
** 지수 연산자에 대한 지수 (승수) 계산을 수행합니다. a ** b = 10의 20 제곱
// Floor Division-결과가 소수점 뒤의 숫자가 제거되는 몫인 피연산자의 분할입니다. 그러나 피연산자 중 하나가 음수이면 결과는 내림됩니다. 즉, 0에서 멀어지게 반올림됩니다 (음의 무한대쪽으로). 9 // 2 = 4 및 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11.0 // 3 = -4.0

파이썬 비교 연산자

이 연산자는 양쪽의 값을 비교하고 이들 간의 관계를 결정합니다. 관계 연산자라고도합니다.

변수 a가 10을 보유하고 변수 b가 20을 보유한다고 가정하면-

[ 보기 예 ]

운영자 기술
== 두 피연산자의 값이 같으면 조건이 참이됩니다. (a == b)는 사실이 아닙니다.
! = 두 피연산자의 값이 같지 않으면 조건이 참이됩니다. (a! = b)는 참입니다.
<> 두 피연산자의 값이 같지 않으면 조건이 참이됩니다. (a <> b)가 참입니다. 이것은! = 연산자와 유사합니다.
> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크면 조건이 참이됩니다. (a> b)는 사실이 아닙니다.
< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작 으면 조건이 참이됩니다. (a <b)는 참입니다.
> = 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같으면 조건이 참이됩니다. (a> = b)는 사실이 아닙니다.
<= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같으면 조건이 참이됩니다. (a <= b)는 참입니다.

Python 할당 연산자

변수 a가 10을 보유하고 변수 b가 20을 보유한다고 가정하면-

[ 보기 예 ]

운영자 기술
= 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다. c = a + b는 a + b의 값을 c에 할당합니다.
+ = AND 추가 왼쪽 피연산자에 오른쪽 피연산자를 추가하고 결과를 왼쪽 피연산자에 할당합니다. c + = a는 c = c + a와 같습니다.
-= 빼기 AND 왼쪽 피연산자에서 오른쪽 피연산자를 빼고 결과를 왼쪽 피연산자에 할당합니다. c-= a는 c = c-a와 같습니다.
* = 곱하기 AND 오른쪽 피연산자와 왼쪽 피연산자를 곱하고 결과를 왼쪽 피연산자에 할당합니다. c * = a는 c = c * a와 같습니다.
/ = 나누기 AND 왼쪽 피연산자를 오른쪽 피연산자로 나누고 결과를 왼쪽 피연산자에 할당합니다. c / = a는 c = c / a와 같습니다.
% = 계수 AND 두 개의 피연산자를 사용하여 모듈러스를 취하고 결과를 왼쪽 피연산자에 할당합니다. c % = a는 c = c % a와 같습니다.
** = 지수 AND 연산자에 대한 지수 (승수) 계산을 수행하고 왼쪽 피연산자에 값을 할당합니다. c ** = a는 c = c ** a와 같습니다.
// = 층 구분 연산자에 대해 바닥 분할을 수행하고 왼쪽 피연산자에 값을 할당합니다. c // = a는 c = c // a와 같습니다.

Python 비트 연산자

비트 연산자는 비트에서 작동하고 비트 단위로 작동합니다. a = 60이라고 가정합니다. 그리고 b = 13; 이제 바이너리 형식에서 값은 각각 0011 1100 및 0000 1101이됩니다. 다음 표에는 Python 언어에서 지원하는 비트 연산자가 각각 예제와 함께 나열되어 있으며 위의 두 변수 (a 및 b)를 피연산자로 사용합니다.

a = 0011 1100

b = 0000 1101

-----------------

a & b = 0000 1100

a | b = 0011 1101

a ^ b = 0011 0001

~ a = 1100 0011

Python 언어에서 지원하는 다음과 같은 Bitwise 연산자가 있습니다.

[ 보기 예 ]

운영자 기술
& 바이너리 AND 연산자는 두 피연산자에 모두 존재하는 경우 결과에 비트를 복사합니다. (a & b) (0000 1100을 의미)
| 바이너리 OR 피연산자 중 하나에 있으면 비트를 복사합니다. (a | b) = 61 (0011 1101을 의미)
^ 바이너리 XOR 하나의 피연산자에 설정된 경우 비트를 복사합니다. (a ^ b) = 49 (0011 0001을 의미)
~ 바이너리 1 보완 단항이며 비트를 '플립 핑'하는 효과가 있습니다. (~ a) = -61 (부호있는 이진수로 인해 2의 보수 형태로 1100 0011을 의미합니다.
<< 이진 왼쪽 시프트 왼쪽 피연산자 값은 오른쪽 피연산자에 지정된 비트 수만큼 왼쪽으로 이동합니다. a << 2 = 240 (1111 0000을 의미 함)
>> 이진 오른쪽 시프트 왼쪽 피연산자 값은 오른쪽 피연산자에 지정된 비트 수만큼 오른쪽으로 이동합니다. a >> 2 = 15 (0000 1111을 의미)

Python 논리 연산자

Python 언어에서 지원하는 다음과 같은 논리 연산자가 있습니다. 변수 a가 10을 보유하고 변수 b가 20을 보유한다고 가정하면

[ 보기 예 ]

운영자 기술
및 논리적 AND 두 피연산자가 모두 참이면 조건이 참이됩니다. (a와 b)는 사실입니다.
또는 논리적 OR 두 피연산자 중 하나가 0이 아니면 조건이 참이됩니다. (a 또는 b)가 참입니다.
논리적이 아님 피연산자의 논리적 상태를 반전하는 데 사용됩니다. Not (a 및 b)는 거짓입니다.

Python 멤버십 연산자

Python의 멤버 자격 연산자는 문자열, 목록 또는 튜플과 같은 시퀀스의 멤버 자격을 테스트합니다. 아래에 설명 된대로 두 명의 멤버십 운영자가 있습니다

[ 보기 예 ]

운영자 기술
지정된 시퀀스에서 변수를 찾으면 true로 평가하고 그렇지 않으면 false로 평가합니다. x가 y에서 x가 시퀀스 y의 구성원이면 1이됩니다.
아니 지정된 시퀀스에서 변수를 찾지 못하면 true로 평가하고 그렇지 않으면 false로 평가합니다. x가 y가 아닌 경우 x가 시퀀스 y의 구성원이 아닌 경우 1이됩니다.

Python ID 연산자

ID 연산자는 두 개체의 메모리 위치를 비교합니다. 아래에 설명 된 두 가지 ID 연산자가 있습니다.

[ 보기 예 ]

운영자 기술
이다 연산자의 양쪽에있는 변수가 동일한 객체를 가리키면 true로 평가되고 그렇지 않으면 false로 평가됩니다. 여기에서 x는 y입니다. is id (x)가 id (y)와 같으면 1이됩니다.
아니다 연산자의 양쪽에있는 변수가 동일한 객체를 가리키면 false로 평가되고 그렇지 않으면 true로 평가됩니다. x는 y가 아닙니다. is not id (x)가 id (y)와 같지 않으면 1이됩니다.

Python 연산자 우선 순위

다음 표에는 가장 높은 우선 순위부터 가장 낮은 순위까지 ​​모든 연산자가 나열되어 있습니다.

[ 보기 예 ]

Sr. 아니. 연산자 및 설명
1

**

지수 (제곱으로 올림)

2

~ + -

보완, 단항 더하기 및 빼기 (마지막 두 개의 메서드 이름은 + @ 및-@ 임)

* / % //

곱하기, 나누기, 모듈로 및 바닥 나누기

4

+ -

더하기와 빼기

5

>> <<

오른쪽 및 왼쪽 비트 시프트

6

&

비트 'AND'

7

^ |

비트 배타적`OR '및 일반`OR'

8

<= < > >=

비교 연산자

9

<> == !=

평등 연산자

10

= %= /= //= -= += *= **=

할당 연산자

11

is is not

ID 연산자

12

in not in

회원 운영자

13

not or and

논리 연산자

의사 결정은 프로그램을 실행하는 동안 발생하는 조건을 예상하고 조건에 따라 수행되는 작업을 지정합니다.

결정 구조는 결과로 TRUE 또는 FALSE를 생성하는 여러 표현식을 평가합니다. 결과가 TRUE 또는 FALSE 인 경우 수행 할 작업과 실행할 문을 결정해야합니다.

다음은 대부분의 프로그래밍 언어에서 발견되는 일반적인 의사 결정 구조의 일반적인 형태입니다.

Python 프로그래밍 언어는 non-zeronon-null 값은 TRUE이고 둘 중 하나이면 zero 또는 null이면 FALSE 값으로 간주됩니다.

Python 프로그래밍 언어는 다음 유형의 의사 결정 문을 제공합니다. 세부 사항을 확인하려면 다음 링크를 클릭하십시오.

Sr. 아니. 성명 및 설명
1 if 문

if statement 부울 표현식과 하나 이상의 문으로 구성됩니다.

2 if ... else 문

if statement 뒤에 선택 사항이 올 수 있습니다. else statement, 부울 표현식이 FALSE 일 때 실행됩니다.

중첩 된 if 문

하나를 사용할 수 있습니다 if 또는 else if 다른 내부의 진술 if 또는 else if 진술 (들).

각 의사 결정을 간략하게 살펴 보겠습니다.

단일 문 스위트

스위트의 경우 if 절은 한 줄로만 구성되며 헤더 문과 같은 줄에 올 수 있습니다.

다음은 one-line if 조항-

#!/usr/bin/python

var = 100
if ( var == 100 ) : print "Value of expression is 100"
print "Good bye!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Value of expression is 100
Good bye!

일반적으로 명령문은 순차적으로 실행됩니다. 함수의 첫 번째 명령문이 먼저 실행되고 두 번째 명령문이 실행되는 식입니다. 코드 블록을 여러 번 실행해야하는 상황이있을 수 있습니다.

프로그래밍 언어는보다 복잡한 실행 경로를 허용하는 다양한 제어 구조를 제공합니다.

루프 문을 사용하면 문 또는 문 그룹을 여러 번 실행할 수 있습니다. 다음 다이어그램은 루프 문을 보여줍니다-

Python 프로그래밍 언어는 루핑 요구 사항을 처리하기 위해 다음 유형의 루프를 제공합니다.

Sr. 아니. 루프 유형 및 설명
1 while 루프

주어진 조건이 TRUE 인 동안 명령문 또는 명령문 그룹을 반복합니다. 루프 본문을 실행하기 전에 조건을 테스트합니다.

2 for 루프

일련의 명령문을 여러 번 실행하고 루프 변수를 관리하는 코드를 축약합니다.

중첩 된 루프

while, for 또는 do..while 루프 내에서 하나 이상의 루프를 사용할 수 있습니다.

루프 제어문

루프 제어문은 정상적인 순서에서 실행을 변경합니다. 실행이 범위를 벗어나면 해당 범위에서 생성 된 모든 자동 개체가 삭제됩니다.

Python은 다음 제어문을 지원합니다. 세부 사항을 확인하려면 다음 링크를 클릭하십시오.

루프 제어문을 간단히 살펴 보겠습니다.

Sr. 아니. 제어문 및 설명
1 break 문

루프 문을 종료하고 루프 바로 다음 문으로 실행을 전송합니다.

2 계속 진술

루프가 본문의 나머지 부분을 건너 뛰고 반복하기 전에 즉시 상태를 다시 테스트하도록합니다.

pass 문

Python의 pass 문은 구문이 필요하지만 명령이나 코드를 실행하지 않으려는 경우에 사용됩니다.

숫자 데이터 유형은 숫자 값을 저장합니다. 변경 불가능한 데이터 유형이므로 숫자 데이터 유형의 값을 변경하면 새로 할당 된 객체가 생성됩니다.

숫자 개체는 값을 할당 할 때 만들어집니다. 예를 들면-

var1 = 1
var2 = 10

다음을 사용하여 숫자 개체에 대한 참조를 삭제할 수도 있습니다. del성명서. del 문의 구문은 다음과 같습니다.

del var1[,var2[,var3[....,varN]]]]

다음을 사용하여 단일 개체 또는 여러 개체를 삭제할 수 있습니다. del성명서. 예를 들면-

del var
del var_a, var_b

파이썬은 네 가지 숫자 유형을 지원합니다-

  • int (signed integers) − 정수 또는 정수라고도하며 소수점이없는 양수 또는 음수입니다.

  • long (long integers ) − long이라고도하며 크기가 무제한 인 정수로, 정수처럼 작성되고 그 뒤에 대문자 또는 소문자 L이옵니다.

  • float (floating point real values)− 실수라고도하며 실수를 나타내며 정수와 분수를 나눈 소수점으로 작성됩니다. Floats는 과학적 표기법으로도 사용할 수 있으며 E 또는 e는 10의 거듭 제곱을 나타냅니다 (2.5e2 = 2.5 x 10 2 = 250).

  • complex (complex numbers)−는 a + bJ 형식입니다. 여기서 a와 b는 부동 소수점이고 J (또는 j)는 -1 (허수)의 제곱근을 나타냅니다. 숫자의 실수 부분은 a이고 허수 부분은 b입니다. 복소수는 파이썬 프로그래밍에서 많이 사용되지 않습니다.

다음은 숫자의 몇 가지 예입니다.

int 흙손 복잡한
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEL 32.3 + e18 .876j
-0490 535633629843L -90. -.6545 + 0J
-0x260 -052318172735L -32.54e100 3e + 26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • 파이썬에서는 long과 함께 소문자 L을 사용할 수 있지만 숫자 1과의 혼동을 피하기 위해 대문자 L 만 사용하는 것이 좋습니다. 파이썬은 대문자 L로 long 정수를 표시합니다.

  • 복소수는 a + bj로 표시되는 순서가 지정된 실수 부동 소수점 숫자 쌍으로 구성됩니다. 여기서 a는 실수 부분이고 b는 복소수의 허수 부분입니다.

숫자 유형 변환

Python은 혼합 된 유형을 포함하는 표현식의 내부적으로 숫자를 평가를 위해 공통 유형으로 변환합니다. 그러나 때로는 연산자 또는 함수 매개 변수의 요구 사항을 충족하기 위해 한 유형에서 다른 유형으로 명시 적으로 숫자를 강제 변환해야합니다.

  • 유형 int(x) x를 일반 정수로 변환합니다.

  • 유형 long(x) x를 긴 정수로 변환합니다.

  • 유형 float(x) x를 부동 소수점 숫자로 변환합니다.

  • 유형 complex(x) x를 실수 부 x와 허수 부 0으로 복소수로 변환합니다.

  • 유형 complex(x, y)x와 y를 실수 부 x와 허수 부 y로 복소수로 변환합니다. x 및 y는 숫자 표현식입니다.

수학 함수

Python에는 수학적 계산을 수행하는 다음 함수가 포함되어 있습니다.

Sr. 아니. 기능 및 반환 (설명)
1 abs (x)

x의 절대 값 : x와 0 사이의 (양수) 거리.

2 ceil (x)

x의 상한선 : x보다 작지 않은 가장 작은 정수

cmp (x, y)

x <y이면 -1, x == y이면 0, x> y이면 1

4 exp (x)

x의 지수 : e x

5 팹 (x)

x의 절대 값입니다.

6 층 (x)

x의 바닥 : x보다 크지 않은 가장 큰 정수

7 로그 (x)

x> 0에 대한 x의 자연 로그

8 log10 (x)

x> 0에 대한 x의 밑이 10 인 로그입니다.

9 최대 (x1, x2, ...)

가장 큰 인수 : 양의 무한대에 가장 가까운 값

10 최소 (x1, x2, ...)

가장 작은 인수 : 음의 무한대에 가장 가까운 값

11 modf (x)

2 개 항목 튜플에서 x의 분수 및 정수 부분입니다. 두 부분 모두 x와 같은 부호를 갖습니다. 정수 부분은 부동 소수점으로 반환됩니다.

12 pow (x, y)

x ** y의 값입니다.

13 round (x [, n])

x소수점에서 n 자리로 반올림됩니다. 파이썬은 0에서 멀어지게 반올림합니다. round (0.5)는 1.0이고 round (-0.5)는 -1.0입니다.

14 sqrt (x)

x> 0에 대한 x의 제곱근

난수 함수

난수는 게임, 시뮬레이션, 테스트, 보안 및 개인 정보 보호 응용 프로그램에 사용됩니다. Python에는 일반적으로 사용되는 다음 함수가 포함되어 있습니다.

Sr. 아니. 기능 및 설명
1 선택 (seq)

목록, 튜플 또는 문자열의 임의 항목입니다.

2 randrange ([시작,] 중지 [, 단계])

범위 (시작, 중지, 단계)에서 임의로 선택된 요소

랜덤 ()

0이 r보다 작거나 같고 r이 1보다 작은 임의의 부동 소수점 r

4 씨 ([x])

난수 생성에 사용되는 정수 시작 값을 설정합니다. 다른 임의의 모듈 함수를 호출하기 전에이 함수를 호출하십시오. 없음을 반환합니다.

5 셔플 (lst)

목록의 항목을 무작위로 지정합니다. 없음을 반환합니다.

6 제복 (x, y)

x가 r보다 작거나 같고 r이 y보다 작은 임의의 부동 소수점 r

삼각 함수

Python에는 삼각 계산을 수행하는 다음 함수가 포함되어 있습니다.

Sr. 아니. 기능 및 설명
1 acos (x)

라디안 단위로 x의 아크 코사인을 반환합니다.

2 asin (x)

라디안 단위로 x의 아크 사인을 반환합니다.

atan (x)

x의 아크 탄젠트를 라디안으로 반환합니다.

4 atan2 (y, x)

라디안 단위로 atan (y / x)을 반환합니다.

5 cos (x)

x 라디안의 코사인을 반환합니다.

6 hypot (x, y)

유클리드 노름 sqrt (x * x + y * y)를 반환합니다.

7 sin (x)

x 라디안의 사인을 반환합니다.

8 tan (x)

x 라디안의 탄젠트를 반환합니다.

9 도 (x)

각도 x를 라디안에서 도로 변환합니다.

10 라디안 (x)

각도 x를도에서 라디안으로 변환합니다.

수학 상수

모듈은 또한 두 개의 수학 상수를 정의합니다-

Sr. 아니. 상수 및 설명
1

pi

수학 상수 파이.

2

e

수학 상수 e.

문자열은 Python에서 가장 많이 사용되는 유형 중 하나입니다. 문자를 따옴표로 묶어 간단하게 만들 수 있습니다. 파이썬은 작은 따옴표를 큰 따옴표와 동일하게 취급합니다. 문자열을 만드는 것은 변수에 값을 할당하는 것만 큼 간단합니다. 예를 들면-

var1 = 'Hello World!'
var2 = "Python Programming"

문자열의 값에 액세스

Python은 문자 유형을 지원하지 않습니다. 이들은 길이가 1 인 문자열로 취급되므로 하위 문자열로도 간주됩니다.

하위 문자열에 액세스하려면 색인 또는 색인과 함께 분할 할 때 대괄호를 사용하여 하위 문자열을 얻습니다. 예를 들면-

#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

var1[0]:  H
var2[1:5]:  ytho

문자열 업데이트

변수를 다른 문자열에 (재) 할당하여 기존 문자열을 "업데이트"할 수 있습니다. 새 값은 이전 값 또는 완전히 다른 문자열과 관련 될 수 있습니다. 예를 들면-

#!/usr/bin/python

var1 = 'Hello World!'
print "Updated String :- ", var1[:6] + 'Python'

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Updated String :-  Hello Python

이스케이프 문자

다음 표는 백 슬래시 표기법으로 표시 할 수있는 이스케이프 또는 인쇄 할 수없는 문자 목록입니다.

이스케이프 문자가 해석됩니다. 작은 따옴표 및 큰 따옴표로 묶인 문자열.

백 슬래시 표기법 16 진수 문자 기술
\ㅏ 0x07 벨 또는 경고
\비 0x08 역행 키이
\ cx   Control-x
\ Cx   Control-x
\이자형 0x1b 탈출
\에프 0x0c Formfeed
\ M- \ Cx   Meta-Control-x
\엔 0x0a 개행
\ nnn   8 진법 (n은 0.7 범위에 있음)
\아르 자형 0x0d 캐리지 리턴
\에스 0x20 우주
\티 0x09
\V 0x0b 수직 탭
\엑스   문자 x
\ xnn   16 진수 표기법, 여기서 n은 0.9, af 또는 AF 범위에 있습니다.

문자열 특수 연산자

문자열 변수 가정 a 'Hello'및 변수 보유 b 'Python'을 보유한 다음-

운영자 기술
+ 연결-연산자의 양쪽에 값을 추가합니다. a + b는 HelloPython을 제공합니다.
* 반복-동일한 문자열의 여러 복사본을 연결하여 새 문자열을 만듭니다. a * 2는 -HelloHello를 줄 것입니다.
[] 슬라이스-주어진 색인에서 문자를 제공합니다. a [1]은 e를 줄 것입니다
[:] Range Slice-주어진 범위의 문자를 제공합니다. a [1 : 4]는 ell을 줄 것입니다.
Membership-주어진 문자열에 문자가 있으면 true를 반환합니다. H는 1을 줄 것이다
아니 Membership-주어진 문자열에 문자가 없으면 참을 반환합니다. M이 아닌 1
r / R 원시 문자열-이스케이프 문자의 실제 의미를 억제합니다. 원시 문자열의 구문은 따옴표 앞에 오는 원시 문자열 연산자 인 "r"문자를 제외하고는 일반 문자열의 구문과 정확히 동일합니다. "r"은 소문자 (r) 또는 대문자 (R) 일 수 있으며 첫 번째 따옴표 바로 앞에 위치해야합니다. print r '\ n'인쇄 \ n 및 인쇄 R '\ n'인쇄 \ n
% 형식-문자열 형식화를 수행합니다. 다음 섹션 참조

문자열 형식화 연산자

Python의 가장 멋진 기능 중 하나는 문자열 형식 연산자 %입니다. 이 연산자는 문자열에 고유하며 C의 printf () 계열의 함수를 포함하는 팩을 구성합니다. 다음은 간단한 예입니다.

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21)

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

My name is Zara and weight is 21 kg!

다음은 %와 함께 사용할 수있는 전체 기호 목록입니다.

형식 기호 변환
%씨 캐릭터
%에스 포맷하기 전에 str ()을 통한 문자열 변환
%나는 부호있는 10 진수 정수
%디 부호있는 10 진수 정수
%유 부호없는 십진 정수
%영형 8 진 정수
%엑스 16 진 정수 (소문자)
%엑스 16 진 정수 (대문자)
%이자형 지수 표기법 (소문자 'e'사용)
%이자형 지수 표기법 (대문자 'E'사용)
%에프 부동 소수점 실수
%지 % f 및 % e 중 더 짧은
%지 % f 및 % E 중 더 짧은

기타 지원되는 기호 및 기능은 다음 표에 나열되어 있습니다.

상징 기능성
* 인수는 너비 또는 정밀도를 지정합니다.
- 왼쪽 정렬
+ 표시를 표시
<sp> 양수 앞에 공백을 두십시오
# 'x'또는 'X'가 사용되었는지 여부에 따라 8 진수 선행 0 ( '0') 또는 16 진수 선행 '0x'또는 '0X'를 추가합니다.
0 공백 대신 0으로 왼쪽부터 채우기
% '%%'는 단일 리터럴 '%'를 남깁니다.
(var) 매핑 변수 (사전 인수)
백만 m은 최소 총 너비이고 n은 소수점 뒤에 표시 할 자릿수입니다 (해당하는 경우).

트리플 따옴표

파이썬의 삼중 따옴표는 문자열이 축 어적 NEWLINEs, TAB 및 기타 특수 문자를 포함하여 여러 줄에 걸쳐 있도록 허용함으로써 구출됩니다.

삼중 따옴표 구문은 연속 된 세 개의 single or double 인용 부호.

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. 모든 특수 문자가 "up"사이의 문자열 끝에있는 마지막 NEWLINE까지 인쇄 된 형태로 어떻게 변환되었는지 확인하십시오. 삼중 따옴표를 닫습니다. 또한 NEWLINEs는 행 끝이나 이스케이프 코드 (\ n)에 명시적인 캐리지 리턴으로 발생합니다.

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

원시 문자열은 백 슬래시를 특수 문자로 전혀 처리하지 않습니다. 원시 문자열에 입력 한 모든 문자는 작성한 그대로 유지됩니다.

#!/usr/bin/python

print 'C:\\nowhere'

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

C:\nowhere

이제 원시 문자열을 사용합시다. 우리는 표현을 넣을 것입니다r'expression' 다음과 같이-

#!/usr/bin/python

print r'C:\\nowhere'

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

C:\\nowhere

유니 코드 문자열

Python의 일반 문자열은 내부적으로 8 비트 ASCII로 저장되는 반면 유니 코드 문자열은 16 비트 유니 코드로 저장됩니다. 이를 통해 전 세계 대부분의 언어의 특수 문자를 포함하여보다 다양한 문자 집합을 사용할 수 있습니다. 유니 코드 문자열 처리를 다음과 같이 제한하겠습니다.

#!/usr/bin/python

print u'Hello, world!'

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Hello, world!

보시다시피 유니 코드 문자열은 원시 문자열이 접두사 r을 사용하는 것처럼 접두사 u를 사용합니다.

내장 문자열 메소드

파이썬에는 문자열을 조작하는 다음과 같은 내장 메소드가 포함되어 있습니다.

Sr. 아니. 설명이있는 방법
1 자본화 ()

문자열의 첫 글자를 대문자로 표시

2 center (너비, fillchar)

전체 너비 열의 중앙에 원래 문자열이있는 공백으로 채워진 문자열을 반환합니다.

count (str, beg = 0, end = len (string))

시작 인덱스 beg 및 끝 인덱스 끝이 제공되는 경우 str이 string 또는 string의 하위 문자열에서 발생하는 횟수를 계산합니다.

4 디코드 (encoding = 'UTF-8', errors = 'strict')

인코딩을 위해 등록 된 코덱을 사용하여 문자열을 디코딩합니다. 인코딩의 기본값은 기본 문자열 인코딩입니다.

5 encode (encoding = 'UTF-8', errors = 'strict')

문자열의 인코딩 된 문자열 버전을 반환합니다. 오류 발생시 기본값은 '무시'또는 '대체'와 함께 오류가 제공되지 않는 한 ValueError를 발생시키는 것입니다.

6 endswith (접미사, beg = 0, end = len (문자열))

문자열 또는 문자열의 하위 문자열 (시작 인덱스 beg 및 끝 인덱스 끝이 제공되는 경우)이 접미사로 끝나는 지 결정합니다. 그렇다면 true를 반환하고 그렇지 않으면 false를 반환합니다.

7 expandtabs (tabsize = 8)

문자열의 탭을 여러 공백으로 확장합니다. tabsize가 제공되지 않은 경우 기본값은 탭당 8 개의 공백입니다.

8 find (str, beg = 0 end = len (string))

시작 인덱스 beg와 끝 인덱스 끝이 주어지면 str이 string에서 발생하는지 또는 string의 하위 문자열에서 발생하는지 결정합니다. 발견되면 index를 반환하고 그렇지 않으면 -1을 반환합니다.

9 index (str, beg = 0, end = len (string))

find ()와 같지만 str이 없으면 예외가 발생합니다.

10 isalnum ()

문자열이 1 자 이상이고 모든 문자가 영숫자이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

11 isalpha ()

문자열에 최소 1 개의 문자가 있고 모든 문자가 알파벳이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

12 isdigit ()

문자열에 숫자 만 포함되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

13 islower ()

문자열에 최소 1 개의 케이스 문자가 있고 모든 케이스 문자가 소문자이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

14 isnumeric ()

유니 코드 문자열에 숫자 만 포함되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

15 isspace ()

문자열에 공백 문자 만 포함되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

16 istitle ()

문자열이 적절하게 "제목"이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

17 isupper ()

문자열에 하나 이상의 대소 문자 문자가 있고 모든 대소 문자가 대문자이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

18 결합 (seq)

시퀀스 seq에있는 요소의 문자열 표현을 구분자 문자열을 사용하여 문자열로 병합 (연결)합니다.

19 len (문자열)

문자열의 길이를 반환

20 ljust (너비 [, fillchar])

전체 너비 열에 대해 왼쪽 정렬 된 원래 문자열이있는 공백으로 채워진 문자열을 반환합니다.

21 보다 낮은()

문자열의 모든 대문자를 소문자로 변환합니다.

22 lstrip ()

문자열의 모든 선행 공백을 제거합니다.

23 maketrans ()

번역 기능에 사용할 번역 테이블을 반환합니다.

24 최대 (str)

문자열 str에서 최대 알파벳 문자를 반환합니다.

25 min (str)

문자열 str에서 최소 알파벳 문자를 반환합니다.

26 바꾸기 (이전, 새 [, 최대])

string의 모든 old 항목을 new 또는 max가 주어진 경우 최대 max 항목으로 바꿉니다.

27 rfind (str, beg = 0, end = len (문자열))

find ()와 같지만 문자열에서 뒤로 검색합니다.

28 rindex (str, beg = 0, end = len (문자열))

index ()와 동일하지만 문자열에서 역방향으로 검색합니다.

29 rjust (너비, [, fillchar])

전체 너비 열에 대해 오른쪽 정렬 된 원래 문자열이있는 공백으로 채워진 문자열을 반환합니다.

30 rstrip ()

문자열의 모든 후행 공백을 제거합니다.

31 split (str = "", num = string.count (str))

구분 기호 str (제공되지 않은 경우 공백)에 따라 문자열을 분할하고 하위 문자열 목록을 반환합니다. 주어진 경우 최대 num 개의 하위 문자열로 분할됩니다.

32 분할 선 (num = string.count ( '\ n'))

문자열을 모두 (또는 num) NEWLINEs 분할하고 NEWLINEs가 제거 된 각 줄의 목록을 반환합니다.

33 startswith (str, beg = 0, end = len (문자열))

문자열 또는 문자열의 하위 문자열 (시작 색인 beg 및 종료 색인 끝이 제공되는 경우)이 하위 문자열 str으로 시작하는지 판별합니다. 그렇다면 true를 반환하고 그렇지 않으면 false를 반환합니다.

34 스트립 ([문자])

문자열에 대해 lstrip () 및 rstrip ()을 모두 수행합니다.

35 스왑 케이스 ()

문자열의 모든 문자에 대해 대소 문자를 반전합니다.

36 표제()

문자열의 "제목"버전을 반환합니다. 즉, 모든 단어는 대문자로 시작하고 나머지는 소문자입니다.

37 번역 (테이블, deletechars = "")

번역 테이블 str (256 자)에 따라 문자열을 번역하여 del 문자열에서 제거합니다.

38 높은()

문자열의 소문자를 대문자로 변환합니다.

39 zfill (너비)

전체 너비 문자에 대해 0으로 왼쪽 패딩 된 원래 문자열을 반환합니다. 숫자를 위해 zfill ()은 주어진 부호를 유지합니다 (0 미만).

40 isdecimal ()

유니 코드 문자열에 10 진수 문자 만 포함되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

Python에서 가장 기본적인 데이터 구조는 sequence. 시퀀스의 각 요소에는 번호 (위치 또는 인덱스)가 할당됩니다. 첫 번째 색인은 0이고 두 번째 색인은 1입니다.

파이썬에는 6 개의 내장형 시퀀스가 ​​있지만 가장 일반적인 시퀀스는 목록과 튜플이며이 튜토리얼에서 볼 수 있습니다.

모든 시퀀스 유형으로 수행 할 수있는 특정 작업이 있습니다. 이러한 작업에는 인덱싱, 슬라이스, 추가, 곱하기 및 구성원 확인이 포함됩니다. 또한 Python에는 시퀀스의 길이를 찾고 가장 크고 가장 작은 요소를 찾는 함수가 내장되어 있습니다.

파이썬 목록

이 목록은 Python에서 사용할 수있는 가장 다재다능한 데이터 유형으로 대괄호 사이에 쉼표로 구분 된 값 (항목) 목록으로 작성할 수 있습니다. 목록에서 중요한 점은 목록의 항목이 동일한 유형일 필요가 없다는 것입니다.

목록을 만드는 것은 대괄호 사이에 다른 쉼표로 구분 된 값을 넣는 것만 큼 간단합니다. 예를 들면-

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]

문자열 인덱스와 유사하게 목록 인덱스는 0에서 시작하고 목록은 분할, 연결 등을 할 수 있습니다.

목록의 값에 액세스

목록의 값에 액세스하려면 해당 인덱스에서 사용할 수있는 값을 얻기 위해 인덱스와 함께 분할 할 때 대괄호를 사용합니다. 예를 들면-

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]

목록 업데이트

할당 연산자의 왼쪽에 슬라이스를 제공하여 목록의 단일 또는 여러 요소를 업데이트 할 수 있으며 append () 메서드를 사용하여 목록의 요소에 추가 할 수 있습니다. 예를 들면-

#!/usr/bin/python

list = ['physics', 'chemistry', 1997, 2000];
print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

Note − append () 메서드는 다음 섹션에서 설명합니다.

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Value available at index 2 :
1997
New value available at index 2 :
2001

목록 요소 삭제

목록 요소를 제거하려면 삭제할 요소를 정확히 알고있는 경우 del 문을 사용하고 모르는 경우 remove () 메서드를 사용할 수 있습니다. 예를 들면-

#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

Note − remove () 메서드는 다음 섹션에서 설명합니다.

기본 목록 작업

목록은 문자열과 매우 유사하게 + 및 * 연산자에 응답합니다. 결과가 문자열이 아니라 새로운 목록이라는 점을 제외하면 여기에서도 연결과 반복을 의미합니다.

사실리스트는 이전 장에서 문자열에 대해 사용한 모든 일반적인 시퀀스 연산에 응답합니다.

파이썬 표현식 결과 기술
len ([1, 2, 3]) 길이
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 연쇄
[ '안녕!'] * 4 [ '안녕!', '안녕!', '안녕!', '안녕!'] 되풀이
3 인치 [1, 2, 3] 진실 멤버십
[1, 2, 3]의 x : print x, 1 2 3 되풀이

인덱싱, 슬라이싱 및 매트릭스

목록은 시퀀스이기 때문에 인덱싱과 슬라이싱은 목록에 대해 문자열과 동일한 방식으로 작동합니다.

다음 입력을 가정-

L = ['spam', 'Spam', 'SPAM!']

파이썬 표현식 결과 기술
L [2] 스팸! 오프셋은 0에서 시작합니다.
L [-2] 스팸 음수 : 오른쪽부터 계산
L [1 :] [ '스팸', '스팸!'] 가져 오기 섹션 분할

내장 목록 기능 및 방법

파이썬은 다음과 같은 목록 함수를 포함합니다-

Sr. 아니. 설명이있는 기능
1 cmp (목록 1, 목록 2)

두 목록의 요소를 비교합니다.

2 len (목록)

목록의 전체 길이를 제공합니다.

최대 (목록)

목록에서 최대 값을 가진 항목을 반환합니다.

4 min (목록)

최소값으로 목록에서 항목을 반환합니다.

5 목록 (seq)

튜플을 목록으로 변환합니다.

Python에는 다음 목록 메서드가 포함됩니다.

Sr. 아니. 설명이있는 방법
1 list.append (obj)

객체 obj를 목록에 추가합니다.

2 list.count (obj)

obj가 목록에서 발생하는 횟수를 반환합니다.

list.extend (seq)

목록에 seq의 내용을 추가합니다.

4 list.index (obj)

obj가 나타나는 목록에서 가장 낮은 인덱스를 반환합니다.

5 list.insert (인덱스, obj)

개체 obj를 오프셋 인덱스의 목록에 삽입합니다.

6 list.pop (obj = list [-1])

목록에서 마지막 개체 또는 개체를 제거하고 반환합니다.

7 list.remove (obj)

목록에서 객체 obj를 제거합니다.

8 list.reverse ()

목록의 개체를 제자리에서 되돌립니다.

9 list.sort ([func])

목록의 개체를 정렬하고 주어진 경우 비교 함수를 사용합니다.

튜플은 파이썬 객체의 불변의 시퀀스입니다. 튜플은 목록과 마찬가지로 시퀀스입니다. 튜플과 목록의 차이점은 튜플은 목록과 달리 변경할 수 없으며 튜플은 괄호를 사용하는 반면 목록은 대괄호를 사용한다는 것입니다.

튜플을 만드는 것은 다른 쉼표로 구분 된 값을 입력하는 것만 큼 간단합니다. 선택적으로 이러한 쉼표로 구분 된 값을 괄호 안에 넣을 수도 있습니다. 예를 들면-

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

빈 튜플은 아무것도 포함하지 않는 두 개의 괄호로 작성됩니다.

tup1 = ();

단일 값을 포함하는 튜플을 작성하려면 값이 하나만 있더라도 쉼표를 포함해야합니다.

tup1 = (50,);

문자열 인덱스와 마찬가지로 튜플 인덱스는 0에서 시작하며 슬라이스, 연결 등을 할 수 있습니다.

튜플의 값에 액세스

튜플의 값에 액세스하려면 해당 인덱스에서 사용할 수있는 값을 얻기 위해 인덱스와 함께 분할하기 위해 대괄호를 사용합니다. 예를 들면-

#!/usr/bin/python

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );
print "tup1[0]: ", tup1[0];
print "tup2[1:5]: ", tup2[1:5];

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

tup1[0]:  physics
tup2[1:5]:  [2, 3, 4, 5]

튜플 업데이트

튜플은 불변이므로 튜플 요소의 값을 업데이트하거나 변경할 수 없습니다. 다음 예제와 같이 기존 튜플의 일부를 가져와 새 튜플을 만들 수 있습니다.

#!/usr/bin/python

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');

# Following action is not valid for tuples
# tup1[0] = 100;

# So let's create a new tuple as follows
tup3 = tup1 + tup2;
print tup3;

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

(12, 34.56, 'abc', 'xyz')

튜플 요소 삭제

개별 튜플 요소를 제거 할 수 없습니다. 물론, 원치 않는 요소를 버리고 다른 튜플을 조합하는 것은 잘못된 것이 아닙니다.

전체 튜플을 명시 적으로 제거하려면 del성명서. 예를 들면-

#!/usr/bin/python

tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : ";
print tup;

이것은 다음과 같은 결과를 생성합니다. 발생한 예외에 유의하십시오.del tup 튜플이 더 이상 존재하지 않습니다-

('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
   File "test.py", line 9, in <module>
      print tup;
NameError: name 'tup' is not defined

기본 튜플 연산

튜플은 문자열처럼 + 및 * 연산자에 응답합니다. 결과가 문자열이 아니라 새로운 튜플이라는 점을 제외하면 여기에서도 연결과 반복을 의미합니다.

사실, 튜플은 이전 장에서 문자열에 대해 사용한 모든 일반적인 시퀀스 연산에 응답합니다.

파이썬 표현식 결과 기술
len ((1, 2, 3)) 길이
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 연쇄
( '안녕!',) * 4 ( '안녕!', '안녕!', '안녕!', '안녕!') 되풀이
3 인치 (1, 2, 3) 진실 멤버십
x in (1, 2, 3) : print x, 1 2 3 되풀이

인덱싱, 슬라이싱 및 매트릭스

튜플은 시퀀스이기 때문에 인덱싱 및 슬라이싱은 튜플에 대해 문자열과 동일한 방식으로 작동합니다. 다음 입력을 가정-

L = ('spam', 'Spam', 'SPAM!')

 

파이썬 표현식 결과 기술
L [2] '스팸!' 오프셋은 0에서 시작합니다.
L [-2] '스팸' 음수 : 오른쪽부터 계산
L [1 :] [ '스팸', '스팸!'] 가져 오기 섹션 분할

둘러싸는 구분 기호 없음

쉼표로 구분되고 식별 기호없이 작성된 여러 개체 집합 (예 : 목록의 대괄호, 튜플의 괄호 등)은이 짧은 예제에 표시된대로 기본적으로 튜플입니다.

#!/usr/bin/python

print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x,y;

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2

내장 튜플 함수

파이썬은 다음과 같은 튜플 함수를 포함합니다.

Sr. 아니. 설명이있는 기능
1 cmp (tuple1, tuple2)

두 튜플의 요소를 비교합니다.

2 len (튜플)

튜플의 총 길이를 제공합니다.

최대 (튜플)

최대 값을 가진 튜플에서 항목을 반환합니다.

4 최소 (튜플)

최소값으로 튜플에서 항목을 반환합니다.

5 튜플 (seq)

목록을 튜플로 변환합니다.

각 키는 콜론 (:)으로 값과 구분되고 항목은 쉼표로 구분되며 전체는 중괄호로 묶여 있습니다. 항목이없는 빈 사전은 {}와 같이 중괄호 두 개만 사용하여 작성됩니다.

키는 사전 내에서 고유하지만 값은 그렇지 않을 수 있습니다. 사전의 값은 모든 유형이 될 수 있지만 키는 문자열, 숫자 또는 튜플과 같은 변경 불가능한 데이터 유형이어야합니다.

사전의 값에 액세스

사전 요소에 액세스하려면 키와 함께 익숙한 대괄호를 사용하여 값을 얻을 수 있습니다. 다음은 간단한 예입니다.

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

dict['Name']:  Zara
dict['Age']:  7

딕셔너리의 일부가 아닌 키로 데이터 항목에 액세스하려고하면 다음과 같은 오류가 발생합니다.

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Alice']: ", dict['Alice']

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

dict['Alice']:
Traceback (most recent call last):
   File "test.py", line 4, in <module>
      print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

사전 업데이트

아래의 간단한 예제와 같이 새 항목 또는 키-값 쌍을 추가하거나 기존 항목을 수정하거나 기존 항목을 삭제하여 사전을 업데이트 할 수 있습니다.

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

dict['Age']:  8
dict['School']:  DPS School

사전 요소 삭제

개별 사전 요소를 제거하거나 사전의 전체 내용을 지울 수 있습니다. 한 번의 작업으로 전체 사전을 삭제할 수도 있습니다.

전체 사전을 명시 적으로 제거하려면 del성명서. 다음은 간단한 예입니다.

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name']; # remove entry with key 'Name'
dict.clear();     # remove all entries in dict
del dict ;        # delete entire dictionary

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

이것은 다음과 같은 결과를 생성합니다. 예외가 발생합니다.del dict 사전이 더 이상 존재하지 않습니다-

dict['Age']:
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

Note − del () 메서드는 다음 섹션에서 설명합니다.

사전 키의 속성

사전 값에는 제한이 없습니다. 임의의 Python 개체, 표준 개체 또는 사용자 정의 개체 일 수 있습니다. 그러나 키도 마찬가지입니다.

사전 키에 대해 기억해야 할 두 가지 중요한 사항이 있습니다.

(a)키당 하나 이상의 항목이 허용되지 않습니다. 이는 중복 키가 허용되지 않음을 의미합니다. 할당 중에 중복 키가 발견되면 마지막 할당이 우선합니다. 예를 들면-

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print "dict['Name']: ", dict['Name']

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

dict['Name']:  Manni

(b)키는 변경 불가능해야합니다. 즉, 문자열, 숫자 또는 튜플을 사전 키로 사용할 수 있지만 [ 'key']와 같은 것은 허용되지 않습니다. 다음은 간단한 예입니다.

#!/usr/bin/python

dict = {['Name']: 'Zara', 'Age': 7}
print "dict['Name']: ", dict['Name']

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      dict = {['Name']: 'Zara', 'Age': 7};
TypeError: unhashable type: 'list'

내장 사전 함수 및 방법

파이썬은 다음과 같은 사전 함수를 포함합니다-

Sr. 아니. 설명이있는 기능
1 cmp (dict1, dict2)

두 dict의 요소를 비교합니다.

2 len (dict)

사전의 전체 길이를 제공합니다. 이것은 사전의 항목 수와 같습니다.

str (dict)

사전의 인쇄 가능한 문자열 표현을 생성합니다.

4 유형 (변수)

전달 된 변수의 유형을 반환합니다. 전달 된 변수가 사전이면 사전 유형을 반환합니다.

파이썬은 다음과 같은 사전 메소드를 포함합니다-

Sr. 아니. 설명이있는 방법
1 dict.clear ()

사전 dict의 모든 요소를 ​​제거합니다.

2 dict.copy ()

사전 dict 의 얕은 사본을 반환합니다.

dict.fromkeys ()

서열에서 키와 값이 새 사전 만들기 설정값을 .

4 dict.get (키, 기본값 = 없음)

를 들어 키 키가 아닌 사전의 경우 값이나 기본값을 반환

5 dict.has_key (키)

반환 사실 사전에 키의 경우 DICT , 거짓 , 그렇지 않으면

6 dict.items ()

dict 의 (키, 값) 튜플 쌍 목록을 반환합니다.

7 dict.keys ()

사전 사전의 키 목록을 반환합니다.

8 dict.setdefault (키, 기본값 = 없음)

get ()과 유사하지만 가 dict에없는 경우 dict [key] = default로 설정됩니다.

9 dict.update (dict2)

사전 dict2 의 키-값 쌍을 dict에 추가합니다.

10 dict.values ​​()

사전 dict 값 목록을 반환 합니다.

Python 프로그램은 여러 가지 방법으로 날짜와 시간을 처리 할 수 ​​있습니다. 날짜 형식 간 변환은 컴퓨터의 일반적인 작업입니다. Python의 시간 및 달력 모듈은 날짜와 시간을 추적하는 데 도움이됩니다.

Tick은 무엇입니까?

시간 간격은 초 단위의 부동 소수점 숫자입니다. 시간의 특정 순간은 1970 년 1 월 1 일 (기원) 00:00:00 이후부터 초 단위로 표시됩니다.

인기가 있습니다 time시간 작업 및 표현 간 변환을위한 함수를 제공하는 Python에서 사용할 수있는 모듈입니다. 함수 로 time.time ()는 0시 0분 0초 시간는 1970 년 1 월 1 일 (시대) 이후 틱의 현재 시스템 시간을 반환합니다.

#!/usr/bin/python
import time;  # This is required to include time module.

ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks

이것은 다음과 같은 결과를 생성합니다.

Number of ticks since 12:00am, January 1, 1970: 7186862.73399

날짜 산술은 틱으로 쉽게 할 수 있습니다. 그러나 시대 이전의 날짜는이 형식으로 표현할 수 없습니다. 먼 미래의 날짜도 이런 식으로 표현할 수 없습니다. UNIX 및 Windows의 경우 마감 시점은 2038 년입니다.

TimeTuple은 무엇입니까?

많은 Python의 시간 함수는 아래와 같이 시간을 9 개 숫자의 튜플로 처리합니다.

인덱스 가치
0 4 자리 연도 2008 년
1 1에서 12
2 1에서 31
0에서 23
4 0에서 59
5 둘째 0 ~ 61 (60 또는 61은 윤초)
6 요일 0 ~ 6 (0은 월요일)
7 연중 일 1 ~ 366 (줄리안 데이)
8 일광 절약 -1, 0, 1, -1은 라이브러리가 DST를 결정 함을 의미합니다.

위의 튜플은 다음과 같습니다. struct_time구조. 이 구조에는 다음과 같은 속성이 있습니다.

인덱스 속성 가치
0 tm_year 2008
1 tm_mon 1 to 12
2 tm_mday 1 to 31
3 tm_hour 0 to 23
4 tm_min 0 to 59
5 tm_sec 0 to 61 (60 or 61 are leap-seconds)
6 tm_wday 0 to 6 (0 is Monday)
7 tm_yday 1 to 366 (Julian day)
8 tm_isdst -1, 0, 1, -1 means library determines DST

Getting current time

To translate a time instant from a seconds since the epoch floating-point value into a time-tuple, pass the floating-point value to a function (e.g., localtime) that returns a time-tuple with all nine items valid.

#!/usr/bin/python
import time;

localtime = time.localtime(time.time())
print "Local current time :", localtime

This would produce the following result, which could be formatted in any other presentable form −

Local current time : time.struct_time(tm_year=2013, tm_mon=7, 
tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)

Getting formatted time

You can format any time as per your requirement, but simple method to get time in readable format is asctime() −

#!/usr/bin/python
import time;

localtime = time.asctime( time.localtime(time.time()) )
print "Local current time :", localtime

This would produce the following result −

Local current time : Tue Jan 13 10:17:09 2009

Getting calendar for a month

The calendar module gives a wide range of methods to play with yearly and monthly calendars. Here, we print a calendar for a given month ( Jan 2008 ) −

#!/usr/bin/python
import calendar

cal = calendar.month(2008, 1)
print "Here is the calendar:"
print cal

This would produce the following result −

Here is the calendar:
   January 2008
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

The time Module

There is a popular time module available in Python which provides functions for working with times and for converting between representations. Here is the list of all available methods −

Sr.No. Function with Description
1 time.altzone

The offset of the local DST timezone, in seconds west of UTC, if one is defined. This is negative if the local DST timezone is east of UTC (as in Western Europe, including the UK). Only use this if daylight is nonzero.

2 time.asctime([tupletime])

Accepts a time-tuple and returns a readable 24-character string such as 'Tue Dec 11 18:07:14 2008'.

3 time.clock( )

Returns the current CPU time as a floating-point number of seconds. To measure computational costs of different approaches, the value of time.clock is more useful than that of time.time().

4 time.ctime([secs])

Like asctime(localtime(secs)) and without arguments is like asctime( )

5 time.gmtime([secs])

Accepts an instant expressed in seconds since the epoch and returns a time-tuple t with the UTC time. Note : t.tm_isdst is always 0

6 time.localtime([secs])

Accepts an instant expressed in seconds since the epoch and returns a time-tuple t with the local time (t.tm_isdst is 0 or 1, depending on whether DST applies to instant secs by local rules).

7 time.mktime(tupletime)

Accepts an instant expressed as a time-tuple in local time and returns a floating-point value with the instant expressed in seconds since the epoch.

8 time.sleep(secs)

Suspends the calling thread for secs seconds.

9 time.strftime(fmt[,tupletime])

Accepts an instant expressed as a time-tuple in local time and returns a string representing the instant as specified by string fmt.

10 time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')

Parses str according to format string fmt and returns the instant in time-tuple format.

11 time.time( )

Returns the current time instant, a floating-point number of seconds since the epoch.

12 time.tzset()

Resets the time conversion rules used by the library routines. The environment variable TZ specifies how this is done.

Let us go through the functions briefly −

There are following two important attributes available with time module −

Sr.No. Attribute with Description
1

time.timezone

Attribute time.timezone is the offset in seconds of the local time zone (without DST) from UTC (>0 in the Americas; <=0 in most of Europe, Asia, Africa).

2

time.tzname

Attribute time.tzname is a pair of locale-dependent strings, which are the names of the local time zone without and with DST, respectively.

The calendar Module

The calendar module supplies calendar-related functions, including functions to print a text calendar for a given month or year.

By default, calendar takes Monday as the first day of the week and Sunday as the last one. To change this, call calendar.setfirstweekday() function.

Here is a list of functions available with the calendar module −

Sr.No. Function with Description
1

calendar.calendar(year,w=2,l=1,c=6)

Returns a multiline string with a calendar for year year formatted into three columns separated by c spaces. w is the width in characters of each date; each line has length 21*w+18+2*c. l is the number of lines for each week.

2

calendar.firstweekday( )

Returns the current setting for the weekday that starts each week. By default, when calendar is first imported, this is 0, meaning Monday.

3

calendar.isleap(year)

Returns True if year is a leap year; otherwise, False.

4

calendar.leapdays(y1,y2)

Returns the total number of leap days in the years within range(y1,y2).

5

calendar.month(year,month,w=2,l=1)

Returns a multiline string with a calendar for month month of year year, one line per week plus two header lines. w is the width in characters of each date; each line has length 7*w+6. l is the number of lines for each week.

6

calendar.monthcalendar(year,month)

Returns a list of lists of ints. Each sublist denotes a week. Days outside month month of year year are set to 0; days within the month are set to their day-of-month, 1 and up.

7

calendar.monthrange(year,month)

Returns two integers. The first one is the code of the weekday for the first day of the month month in year year; the second one is the number of days in the month. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 to 12.

8

calendar.prcal(year,w=2,l=1,c=6)

Like print calendar.calendar(year,w,l,c).

9

calendar.prmonth(year,month,w=2,l=1)

Like print calendar.month(year,month,w,l).

10

calendar.setfirstweekday(weekday)

Sets the first day of each week to weekday code weekday. Weekday codes are 0 (Monday) to 6 (Sunday).

11

calendar.timegm(tupletime)

The inverse of time.gmtime: accepts a time instant in time-tuple form and returns the same instant as a floating-point number of seconds since the epoch.

12

calendar.weekday(year,month,day)

Returns the weekday code for the given date. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 (January) to 12 (December).

Other Modules & Functions

If you are interested, then here you would find a list of other important modules and functions to play with date & time in Python −

  • The datetime Module

  • The pytz Module

  • The dateutil Module

함수는 단일 관련 작업을 수행하는 데 사용되는 체계적이고 재사용 가능한 코드 블록입니다. 함수는 애플리케이션에 더 나은 모듈화와 높은 수준의 코드 재사용을 제공합니다.

이미 알고 있듯이 Python은 print () 등과 같은 많은 내장 함수를 제공하지만 자신 만의 함수를 만들 수도 있습니다. 이러한 함수를 사용자 정의 함수 라고 합니다.

함수 정의

필요한 기능을 제공하는 기능을 정의 할 수 있습니다. 다음은 Python에서 함수를 정의하는 간단한 규칙입니다.

  • 키워드로 시작하는 기능 블록 def 함수 이름과 괄호 (())가 뒤 따릅니다.

  • 입력 매개 변수 또는 인수는이 괄호 안에 있어야합니다. 이러한 괄호 안에 매개 변수를 정의 할 수도 있습니다.

  • 함수의 첫 번째 문은 선택적 문 (함수 또는 docstring 의 문서 문자열) 일 수 있습니다 .

  • 모든 함수 내의 코드 블록은 콜론 (:)으로 시작하고 들여 쓰기됩니다.

  • return [expression] 문은 함수를 종료하고 선택적으로 표현식을 호출자에게 다시 전달합니다. 인수가없는 return 문은 return None과 같습니다.

통사론

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

기본적으로 매개 변수에는 위치 동작이 있으며 정의 된 순서와 동일한 순서로 알려야합니다.

다음 함수는 문자열을 입력 매개 변수로 사용하여 표준 화면에 인쇄합니다.

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

함수 호출

함수를 정의하면 이름 만 제공하고 함수에 포함될 매개 변수를 지정하며 코드 블록을 구성합니다.

함수의 기본 구조가 완성되면 다른 함수에서 호출하거나 Python 프롬프트에서 직접 호출하여 실행할 수 있습니다. 다음은 printme () 함수를 호출하는 예입니다.

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

I'm first call to user defined function!
Again second call to the same function

참조 대 값으로 전달

Python 언어의 모든 매개 변수 (인수)는 참조로 전달됩니다. 즉, 함수 내에서 매개 변수가 참조하는 것을 변경하면 변경 사항이 호출 함수에도 다시 반영됩니다. 예를 들면-

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

여기서는 전달 된 객체의 참조를 유지하고 동일한 객체에 값을 추가합니다. 따라서 다음 결과가 생성됩니다.

Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]

인수가 참조로 전달되고 참조가 호출 된 함수 내에서 덮어 쓰여지는 예제가 하나 더 있습니다.

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

mylist 매개 변수 는 changeme 함수에 로컬입니다. 함수 내 myList에 변경에 영향을주지 않습니다 으로 myList를 . 이 함수는 아무것도 수행하지 않으며 마지막으로 다음 결과를 생성합니다.

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

함수 인수

다음 형식의 인수를 사용하여 함수를 호출 할 수 있습니다.

  • 필수 인수
  • 키워드 인수
  • 기본 인수
  • 가변 길이 인수

필수 인수

필수 인수는 올바른 위치 순서로 함수에 전달 된 인수입니다. 여기서 함수 호출의 인수 개수는 함수 정의와 정확히 일치해야합니다.

printme () 함수를 호출하려면 반드시 하나의 인수를 전달해야합니다. 그렇지 않으면 다음과 같은 구문 오류가 발생합니다.

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme()

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

키워드 인수

키워드 인수는 함수 호출과 관련이 있습니다. 함수 호출에서 키워드 인수를 사용하는 경우 호출자는 매개 변수 이름으로 인수를 식별합니다.

이렇게하면 Python 인터프리터가 제공된 키워드를 사용하여 매개 변수와 값을 일치시킬 수 있기 때문에 인수를 건너 뛰거나 순서를 바꿀 수 있습니다. 다음과 같은 방법으로 printme () 함수에 키워드 호출을 할 수도 있습니다.

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme( str = "My string")

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

My string

다음 예는 더 명확한 그림을 제공합니다. 매개 변수의 순서는 중요하지 않습니다.

#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Name:  miki
Age  50

기본 인수

기본 인수는 해당 인수에 대한 함수 호출에 값이 제공되지 않은 경우 기본값을 가정하는 인수입니다. 다음 예제는 기본 인수에 대한 아이디어를 제공하며 전달되지 않으면 기본 연령을 인쇄합니다.

#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Name:  miki
Age  50
Name:  miki
Age  35

가변 길이 인수

함수를 정의하는 동안 지정한 것보다 더 많은 인수에 대해 함수를 처리해야 할 수 있습니다. 이러한 인수를 가변 길이 인수라고하며 필수 및 기본 인수와 달리 함수 정의에 이름이 지정되지 않습니다.

키워드가 아닌 변수 인수를 가진 함수의 구문은 다음과 같습니다.

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

키워드가 아닌 모든 변수 인수의 값을 보유하는 변수 이름 앞에 별표 (*)가 표시됩니다. 이 튜플은 함수 호출 중에 추가 인수가 지정되지 않은 경우 비어 있습니다. 다음은 간단한 예입니다.

#!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Output is:
10
Output is:
70
60
50

익명 함수

이러한 함수는 def 키워드 를 사용하여 표준 방식으로 선언되지 않기 때문에 익명이라고 합니다. lambda 키워드를 사용하여 작은 익명 함수를 만들 수 있습니다 .

  • Lambda 양식은 여러 인수를 사용할 수 있지만 표현식 형식으로 하나의 값만 반환합니다. 명령 또는 여러 표현식을 포함 할 수 없습니다.

  • 람다에식이 필요하기 때문에 익명 함수는 인쇄를 직접 호출 할 수 없습니다.

  • Lambda 함수에는 자체 로컬 네임 스페이스가 있으며 파라미터 목록 및 글로벌 네임 스페이스의 변수 이외의 변수에 액세스 할 수 없습니다.

  • 람다는 함수의 한 줄 버전 인 것처럼 보이지만 성능상의 이유로 호출 중에 함수 스택 할당을 전달하는 목적인 C 또는 C ++의 인라인 문과는 다릅니다.

통사론

람다 함수 의 구문은 다음과 같은 단일 문만 포함합니다.

lambda [arg1 [,arg2,.....argn]]:expression

다음은 함수의 람다 형식이 어떻게 작동 하는지 보여주는 예입니다.

#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Value of total :  30
Value of total :  40

반환 성명

return [expression] 문은 함수를 종료하고 선택적으로 표현식을 호출자에게 다시 전달합니다. 인수가없는 return 문은 return None과 같습니다.

위의 모든 예는 값을 반환하지 않습니다. 다음과 같이 함수에서 값을 반환 할 수 있습니다.

#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Inside the function :  30
Outside the function :  30

변수 범위

프로그램의 모든 변수는 해당 프로그램의 모든 위치에서 액세스 할 수 없습니다. 이것은 변수를 선언 한 위치에 따라 다릅니다.

변수의 범위는 특정 식별자에 액세스 할 수있는 프로그램 부분을 결정합니다. 파이썬에는 두 가지 기본 변수 범위가 있습니다.

  • 전역 변수
  • 지역 변수

전역 변수와 지역 변수

함수 본문 내부에 정의 된 변수에는 로컬 범위가 있고 외부에 정의 된 변수에는 전역 범위가 있습니다.

즉, 지역 변수는 선언 된 함수 내에서만 액세스 할 수있는 반면 전역 변수는 모든 함수가 프로그램 본문 전체에서 액세스 할 수 있습니다. 함수를 호출하면 그 안에 선언 된 변수가 범위로 ​​들어갑니다. 다음은 간단한 예입니다.

#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print "Inside the function local total : ", total
   return total;

# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Inside the function local total :  30
Outside the function global total :  0

모듈을 사용하면 Python 코드를 논리적으로 구성 할 수 있습니다. 관련 코드를 모듈로 그룹화하면 코드를 더 쉽게 이해하고 사용할 수 있습니다. 모듈은 바인딩하고 참조 할 수있는 임의로 이름이 지정된 속성이있는 Python 객체입니다.

간단히 말해 모듈은 Python 코드로 구성된 파일입니다. 모듈은 함수, 클래스 및 변수를 정의 할 수 있습니다. 모듈에는 실행 가능한 코드도 포함될 수 있습니다.

aname 이라는 모듈의 Python 코드는 일반적으로 aname.py 라는 파일에 있습니다. 다음은 간단한 모듈 support.py의 예입니다.

def print_func( par ):
   print "Hello : ", par
   return

수입 성명

다른 Python 소스 파일에서 import 문을 실행하여 모든 Python 소스 파일을 모듈로 사용할 수 있습니다. 가져 오기 다음 구문을 가지고 -

import module1[, module2[,... moduleN]

인터프리터가 import 문을 만나면 모듈이 검색 경로에 있으면 모듈을 가져옵니다. 검색 경로는 인터프리터가 모듈을 가져 오기 전에 검색하는 디렉토리 목록입니다. 예를 들어, support.py 모듈을 가져 오려면 스크립트 맨 위에 다음 명령을 입력해야합니다.

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Hello : Zara

모듈은 가져온 횟수에 관계없이 한 번만로드됩니다. 이렇게하면 여러 가져 오기가 발생하는 경우 모듈 실행이 반복해서 발생하지 않습니다.

에서 ... 수입 성명

Python의 from 문을 사용하면 모듈의 특정 속성을 현재 네임 스페이스로 가져올 수 있습니다. 에서 ... 수입은 다음과 같은 구문을 가지고 -

from modname import name1[, name2[, ... nameN]]

예를 들어, fib 모듈에서 fibonacci 함수를 가져 오려면 다음 명령문을 사용하십시오.

from fib import fibonacci

이 문은 전체 모듈 fib를 현재 네임 스페이스로 가져 오지 않습니다. 모듈 fib의 항목 fibonacci를 가져 오는 모듈의 전역 기호 테이블로 소개합니다.

에서 ... 수입 *

다음 import 문을 사용하여 모듈에서 현재 네임 스페이스로 모든 이름을 가져올 수도 있습니다.

from modname import *

이렇게하면 모듈의 모든 항목을 현재 네임 스페이스로 쉽게 가져올 수 있습니다. 그러나이 문은 드물게 사용되어야합니다.

모듈 찾기

모듈을 가져올 때 Python 인터프리터는 다음 순서로 모듈을 검색합니다.

  • 현재 디렉토리.

  • 모듈을 찾을 수없는 경우 Python은 셸 변수 PYTHONPATH에서 각 디렉터리를 검색합니다.

  • 다른 모든 방법이 실패하면 Python은 기본 경로를 확인합니다. UNIX에서이 기본 경로는 일반적으로 / usr / local / lib / python /입니다.

모듈 검색 경로는 시스템 모듈 sys에 sys.path변하기 쉬운. sys.path 변수에는 현재 디렉토리, PYTHONPATH 및 설치 종속 기본값이 포함됩니다.

PYTHONPATH의 변수

PYTHONPATH는 디렉토리 목록으로 구성된 환경 변수입니다. PYTHONPATH의 구문은 쉘 변수 PATH의 구문과 동일합니다.

다음은 Windows 시스템의 일반적인 PYTHONPATH입니다.

set PYTHONPATH = c:\python20\lib;

그리고 여기에 UNIX 시스템의 전형적인 PYTHONPATH가 있습니다.

set PYTHONPATH = /usr/local/lib/python

네임 스페이스 및 범위 지정

변수는 객체에 매핑되는 이름 (식별자)입니다. 공간은 변수 명 (키)와 해당 오브젝트 (값)의 사전이다.

Python 문은 로컬 네임 스페이스전역 네임 스페이스의 변수에 액세스 할 수 있습니다 . 지역 변수와 전역 변수의 이름이 같으면 지역 변수는 전역 변수를 숨 깁니다.

각 함수에는 고유 한 로컬 네임 스페이스가 있습니다. 클래스 메서드는 일반 함수와 동일한 범위 지정 규칙을 따릅니다.

파이썬은 변수가 로컬인지 글로벌인지에 대해 교육적인 추측을합니다. 함수에서 값이 할당 된 모든 변수는 로컬이라고 가정합니다.

따라서 함수 내의 전역 변수에 값을 할당하려면 먼저 global 문을 사용해야합니다.

global VarName 문 은 Python에 VarName이 전역 변수임을 알려줍니다. Python은 변수에 대한 로컬 네임 스페이스 검색을 중지합니다.

예를 들어 전역 네임 스페이스에 Money 변수를 정의 합니다. Money 함수 내에서 Money 에 값 을 할당 하므로 Python은 Money 를 지역 변수로 가정 합니다. 그러나 설정하기 전에 로컬 변수 Money 의 값에 액세스 했으므로 UnboundLocalError가 결과입니다. 전역 명령문의 주석 처리를 제거하면 문제가 해결됩니다.

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

dir () 함수

dir () 내장 함수는 모듈에서 정의한 이름을 포함하는 정렬 된 문자열 목록을 리턴합니다.

목록에는 모듈에 정의 된 모든 모듈, 변수 및 함수의 이름이 포함됩니다. 다음은 간단한 예입니다.

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

여기에서 특수 문자열 변수 __name__ 은 모듈의 이름이고 __file__ 은 모듈이로드 된 파일 이름입니다.

전역 ()지역 주민 () 함수

전역 ()지역 주민 () 함수들이 호출되는 곳에서 위치에 따라 글로벌 및 로컬 네임 스페이스의 이름을 반환하는 데 사용할 수 있습니다.

locals ()가 함수 내에서 호출되면 해당 함수에서 로컬로 액세스 할 수있는 모든 이름을 반환합니다.

globals ()가 함수 내에서 호출되면 해당 함수에서 전역 적으로 액세스 할 수있는 모든 이름을 반환합니다.

이 두 함수의 반환 유형은 사전입니다. 따라서 keys () 함수를 사용하여 이름을 추출 할 수 있습니다.

리로드 () 함수

모듈을 스크립트로 가져올 때 모듈의 최상위 부분에있는 코드는 한 번만 실행됩니다.

따라서 모듈의 최상위 코드를 다시 실행 하려면 reload () 함수를 사용할 수 있습니다 . reload () 함수는 이전에 가져온 모듈을 다시 가져옵니다. reload () 함수의 구문은 다음과 같습니다.

reload(module_name)

여기서 module_name 은 모듈 이름을 포함하는 문자열이 아니라 다시로드하려는 모듈의 이름입니다. 예를 들어, hello 모듈 을 다시로드 하려면 다음을 수행하십시오.

reload(hello)

Python 패키지

패키지는 모듈과 하위 패키지, 하위 하위 패키지 등으로 구성된 단일 Python 애플리케이션 환경을 정의하는 계층 적 파일 디렉터리 구조입니다.

Phone 디렉토리 에서 사용 가능한 Pots.py 파일을 고려하십시오 . 이 파일에는 다음 줄의 소스 코드가 있습니다.

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

비슷한 방식으로, 위와 같은 이름을 가진 다른 기능을 가진 또 다른 두 파일이 있습니다.

  • Isdn () 함수가있는 Phone / Isdn.py 파일

  • G3 () 함수가있는 Phone / G3.py 파일

이제 전화 디렉토리에 __init__.py 파일을 하나 더 만듭니다.

  • Phone/__init__.py

Phone을 가져올 때 모든 함수를 사용할 수있게하려면 다음과 같이 __init__.py에 명시적인 import 문을 넣어야합니다.

from Pots import Pots
from Isdn import Isdn
from G3 import G3

이러한 행을 __init__.py에 추가하면 Phone 패키지를 가져올 때 이러한 모든 클래스를 사용할 수 있습니다.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

위의 예에서는 각 파일에있는 단일 함수의 예를 사용했지만 파일에 여러 함수를 유지할 수 있습니다. 해당 파일에 다른 Python 클래스를 정의한 다음 해당 클래스에서 패키지를 만들 수도 있습니다.

이 장에서는 Python에서 사용할 수있는 모든 기본 I / O 함수를 다룹니다. 더 많은 함수는 표준 Python 문서를 참조하십시오.

화면에 인쇄

출력을 생성하는 가장 간단한 방법은 쉼표로 구분 된 0 개 이상의 표현식을 전달할 수 있는 print 문을 사용하는 것 입니다. 이 함수는 전달한 표현식을 문자열로 변환하고 결과를 다음과 같이 표준 출력에 씁니다.

#!/usr/bin/python

print "Python is really a great language,", "isn't it?"

이것은 표준 화면에 다음 결과를 생성합니다-

Python is really a great language, isn't it?

키보드 입력 읽기

Python은 기본적으로 키보드에서 오는 표준 입력에서 텍스트 행을 읽는 두 가지 내장 함수를 제공합니다. 이 기능은-

  • raw_input
  • input

raw_input을 기능

raw_input을가 ([프롬프트]) 함수는 문자열 (후행 개행 제거) 표준 입력으로부터 복귀 한 라인을 판독한다.

#!/usr/bin/python

str = raw_input("Enter your input: ")
print "Received input is : ", str

그러면 문자열을 입력하라는 메시지가 표시되고 화면에 동일한 문자열이 표시됩니다. "Hello Python!"을 입력했을 때 출력은 다음과 같습니다.

Enter your input: Hello Python
Received input is :  Hello Python

입력 기능

입력 ([프롬프트]) 함수는 입력이 유효한 파이썬 표현이며, 당신에게 평가 결과를 반환 가정 것을 제외하고 raw_input을하는 것과 같습니다.

#!/usr/bin/python

str = input("Enter your input: ")
print "Received input is : ", str

이것은 입력 된 입력에 대해 다음 결과를 생성합니다-

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is :  [10, 20, 30, 40]

파일 열기 및 닫기

지금까지 표준 입력 및 출력을 읽고 쓰고있었습니다. 이제 실제 데이터 파일을 사용하는 방법을 살펴 보겠습니다.

Python은 기본적으로 파일을 조작하는 데 필요한 기본 함수와 메서드를 제공합니다. 대부분의 파일 조작은file 목적.

개방 기능

파일을 읽거나 쓰기 전에 Python의 내장 open () 함수를 사용하여 파일을 열어야합니다 . 이 기능은file 관련된 다른 지원 메서드를 호출하는 데 사용됩니다.

통사론

file object = open(file_name [, access_mode][, buffering])

매개 변수 세부 사항은 다음과 같습니다.

  • file_name − file_name 인수는 액세스하려는 파일의 이름을 포함하는 문자열 값입니다.

  • access_mode− access_mode는 파일을 열어야하는 모드, 즉 읽기, 쓰기, 추가 등을 결정합니다. 가능한 값의 전체 목록은 아래 표에 나와 있습니다. 이는 선택적 매개 변수이며 기본 파일 액세스 모드는 읽기 (r)입니다.

  • buffering− 버퍼링 값이 0으로 설정되면 버퍼링이 발생하지 않습니다. 버퍼링 값이 1이면 파일에 액세스하는 동안 라인 버퍼링을 수행합니다. 버퍼링 값을 1보다 큰 정수로 지정하면 표시된 버퍼 크기로 버퍼링 작업이 수행됩니다. 음수이면 버퍼 크기가 시스템 기본값 (기본 동작)입니다.

다음은 파일을 여는 다양한 모드 목록입니다.

Sr. 아니. 모드 및 설명
1

r

읽기 전용으로 파일을 엽니 다. 파일 포인터는 파일 시작 부분에 위치합니다. 이것이 기본 모드입니다.

2

rb

바이너리 형식으로 만 읽기 위해 파일을 엽니 다. 파일 포인터는 파일 시작 부분에 위치합니다. 이것이 기본 모드입니다.

r+

읽기와 쓰기를 위해 파일을 엽니 다. 파일 시작 부분에있는 파일 포인터입니다.

4

rb+

이진 형식으로 읽고 쓰기 위해 파일을 엽니 다. 파일 시작 부분에있는 파일 포인터입니다.

5

w

쓰기 전용으로 파일을 엽니 다. 파일이있는 경우 파일을 덮어 씁니다. 파일이 존재하지 않으면 쓰기를위한 새 파일을 만듭니다.

6

wb

바이너리 형식으로 만 쓰기 위해 파일을 엽니 다. 파일이있는 경우 파일을 덮어 씁니다. 파일이 존재하지 않으면 쓰기를위한 새 파일을 만듭니다.

7

w+

쓰기 및 읽기 용으로 파일을 엽니 다. 파일이있는 경우 기존 파일을 덮어 씁니다. 파일이 없으면 읽기 및 쓰기를위한 새 파일을 만듭니다.

8

wb+

바이너리 형식으로 쓰고 읽을 수있는 파일을 엽니 다. 파일이있는 경우 기존 파일을 덮어 씁니다. 파일이 없으면 읽기 및 쓰기를위한 새 파일을 만듭니다.

9

a

추가 할 파일을 엽니 다. 파일이있는 경우 파일 포인터는 파일의 끝에 있습니다. 즉, 파일이 추가 모드에 있습니다. 파일이 존재하지 않으면 쓰기를 위해 새 파일을 생성합니다.

10

ab

바이너리 형식으로 추가 할 파일을 엽니 다. 파일이있는 경우 파일 포인터는 파일의 끝에 있습니다. 즉, 파일이 추가 모드에 있습니다. 파일이 존재하지 않으면 쓰기를 위해 새 파일을 생성합니다.

11

a+

추가 및 읽기를 위해 파일을 엽니 다. 파일이있는 경우 파일 포인터는 파일의 끝에 있습니다. 파일이 추가 모드로 열립니다. 파일이 존재하지 않으면 읽기 및 쓰기를위한 새 파일을 생성합니다.

12

ab+

이진 형식으로 추가하고 읽기 위해 파일을 엽니 다. 파일이있는 경우 파일 포인터는 파일의 끝에 있습니다. 파일이 추가 모드로 열립니다. 파일이 존재하지 않으면 읽기 및 쓰기를위한 새 파일을 생성합니다.

파일 객체 속성

파일이 열리고 하나의 파일 개체가 있으면 해당 파일과 관련된 다양한 정보를 얻을 수 있습니다.

다음은 파일 객체와 관련된 모든 속성 목록입니다.

Sr. 아니. 속성 및 설명
1

file.closed

파일이 닫혀 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

2

file.mode

파일이 열린 액세스 모드를 반환합니다.

file.name

파일 이름을 반환합니다.

4

file.softspace

print에 공간이 명시 적으로 필요하면 false를 반환하고 그렇지 않으면 true를 반환합니다.

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

이것은 다음 결과를 생성합니다-

Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb
Softspace flag :  0

가까운 () 메서드

파일 객체 의 close () 메서드는 기록 되지 않은 정보를 플러시하고 파일 객체를 닫습니다. 그 후에는 더 이상 기록을 수행 할 수 없습니다.

파이썬은 파일의 참조 객체가 다른 파일에 재 할당 될 때 자동으로 파일을 닫습니다. close () 메서드를 사용하여 파일을 닫는 것이 좋습니다.

통사론

fileObject.close()

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file
fo.close()

이것은 다음 결과를 생성합니다-

Name of the file:  foo.txt

파일 읽기 및 쓰기

파일 객체는 우리의 삶을 더 쉽게 만드는 접근 방법의 집합을 제공합니다. read ()write () 메서드를 사용하여 파일을 읽고 쓰는 방법을 살펴 보겠습니다 .

쓰기 () 메소드

쓰기 () 메서드는 열린 파일에 문자열을 씁니다. Python 문자열은 텍스트뿐만 아니라 이진 데이터를 가질 수 있습니다.

write () 메소드는 문자열 끝에 개행 문자 ( '\ n')를 추가하지 않습니다.

통사론

fileObject.write(string)

여기서 전달 된 매개 변수는 열린 파일에 쓸 내용입니다.

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opend file
fo.close()

위의 방법은 foo.txt 파일 을 만들고 해당 파일에 주어진 내용을 쓰고 마지막으로 해당 파일을 닫습니다. 이 파일을 열면 다음 내용이 포함됩니다.

Python is a great language.
Yeah its great!!

읽기 () 메소드

읽기 () 메서드는 열려있는 파일에서 문자열을 읽습니다. 파이썬 문자열은 이진 데이터를 가질 수 있습니다. 텍스트 데이터와는 다릅니다.

통사론

fileObject.read([count])

여기서 전달 된 매개 변수는 열린 파일에서 읽을 바이트 수입니다. 이 방법은 파일의 처음부터 읽기를 시작하고 count 가 누락 된 경우 파일 끝까지 가능한 한 많이 읽으려고합니다.

위에서 생성 한 foo.txt 파일을 보겠습니다 .

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

이것은 다음 결과를 생성합니다-

Read String is :  Python is

파일 위치

TELL () 메소드는 당신에게 파일 내에서 현재 위치를 알려줍니다; 즉, 다음 읽기 또는 쓰기는 파일 시작 부분에서 해당 수의 바이트에서 발생합니다.

(오프셋 [에서]) 시크 방법은 현재의 파일의 위치를 바꾼다. 오프셋 인자 바이트 수를 이동시킬 나타낸다. 에서 인자 바이트가 이동하는 곳에서 상기 기준 위치를 지정한다.

경우 부터가 0으로 설정되어, 그 수단은 상기 기준 위치의 파일의 시작 부분을 사용하고 1 수단은 상기 기준 위치로 현재 위치를 사용하고, 그 후 2로 설정된 경우, 파일의 끝을 기준 위치로 간주 될 .

위에서 생성 한 foo.txt 파일을 가져 옵니다 .

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print "Read String is : ", str

# Check current position
position = fo.tell()
print "Current file position : ", position

# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10)
print "Again read String is : ", str
# Close opend file
fo.close()

이것은 다음 결과를 생성합니다-

Read String is :  Python is
Current file position :  10
Again read String is :  Python is

파일 이름 변경 및 삭제

파이썬 os 모듈은 파일 이름 변경 및 삭제와 같은 파일 처리 작업을 수행하는 데 도움이되는 메서드를 제공합니다.

이 모듈을 사용하려면 먼저 가져온 다음 관련 함수를 호출 할 수 있습니다.

rename () 메서드

바꾸기 () 메소드는 두 개의 인자, 현재 파일 이름 및 새로운 파일명 걸린다.

통사론

os.rename(current_file_name, new_file_name)

다음은 기존의 파일 이름을 변경하는 예입니다 있는 test1.txt를 -

#!/usr/bin/python
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

제거 () 메소드

당신이 사용할 수있는 제거 () 인수로 삭제 될 파일의 이름을 제공하여 파일 삭제에 대한 방법을.

통사론

os.remove(file_name)

다음은 기존의 파일 삭제하는 예입니다 test2.txt가를 -

#!/usr/bin/python
import os

# Delete file test2.txt
os.remove("text2.txt")

Python의 디렉터리

모든 파일은 다양한 디렉토리에 포함되어 있으며 Python도 이러한 디렉토리를 처리하는 데 문제가 없습니다. 그만큼os 모듈에는 디렉토리를 생성, 제거 및 변경하는 데 도움이되는 몇 가지 방법이 있습니다.

에서 mkdir () 메소드

mkdir () 메소드를 사용할 수 있습니다 .os모듈을 사용하여 현재 디렉토리에 디렉토리를 만듭니다. 생성 할 디렉토리의 이름을 포함하는이 메소드에 인수를 제공해야합니다.

통사론

os.mkdir("newdir")

다음은 현재 디렉토리에서 디렉토리 테스트 를 생성하는 예입니다.

#!/usr/bin/python
import os

# Create a directory "test"
os.mkdir("test")

CHDIR () 메소드

chdir () 메소드를 사용하여 현재 디렉토리를 변경할 수 있습니다 . chdir () 메서드는 현재 디렉토리를 만들려는 디렉토리의 이름 인 인수를받습니다.

통사론

os.chdir("newdir")

다음은 "/ home / newdir"디렉토리로 이동하는 예입니다.

#!/usr/bin/python
import os

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

에 getcwd () 메소드

에 getcwd () 방법은 현재 작업 디렉토리.

통사론

os.getcwd()

다음은 현재 디렉토리를 제공하는 예입니다-

#!/usr/bin/python
import os

# This would give location of the current directory
os.getcwd()

RMDIR () 메소드

RMDIR () 메소드는 메소드의 인수로 전달되는 디렉토리를 삭제합니다.

디렉토리를 제거하기 전에 그 안의 모든 내용을 제거해야합니다.

통사론

os.rmdir('dirname')

다음은 "/ tmp / test"디렉토리를 제거하는 예입니다. 디렉토리의 완전한 이름을 제공해야합니다. 그렇지 않으면 현재 디렉토리에서 해당 디렉토리를 검색합니다.

#!/usr/bin/python
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

파일 및 디렉토리 관련 방법

Windows 및 Unix 운영 체제에서 파일 및 디렉토리를 처리하고 조작하기위한 광범위한 유틸리티 방법을 제공하는 세 가지 중요한 소스가 있습니다. 그들은 다음과 같습니다-

  • 파일 객체 방법 : 파일 객체는 파일을 조작하는 기능을 제공합니다.

  • OS Object Methods : 파일과 디렉토리를 처리하는 방법을 제공합니다.

Python은 Python 프로그램에서 예기치 않은 오류를 처리하고 디버깅 기능을 추가하기 위해 두 가지 매우 중요한 기능을 제공합니다.

  • Exception Handling− 이것은이 튜토리얼에서 다룰 것입니다. 다음은 Python에서 사용할 수있는 표준 예외 목록입니다. Standard Exceptions .

  • Assertions− 이것은 Python 튜토리얼의 Assertions에서 다룹니다 .

표준 예외 목록 −

Sr. 아니. 예외 이름 및 설명
1

Exception

모든 예외에 대한 기본 클래스

2

StopIteration

반복기의 next () 메서드가 어떤 객체도 가리 키지 않을 때 발생합니다.

SystemExit

sys.exit () 함수에 의해 발생합니다.

4

StandardError

StopIteration 및 SystemExit를 제외한 모든 내장 예외의 기본 클래스입니다.

5

ArithmeticError

숫자 계산에서 발생하는 모든 오류의 기본 클래스입니다.

6

OverflowError

계산이 숫자 유형에 대한 최대 한계를 초과 할 때 발생합니다.

7

FloatingPointError

부동 소수점 계산이 실패하면 발생합니다.

8

ZeroDivisionError

모든 숫자 유형에 대해 0으로 나누기 또는 모듈로가 발생할 때 발생합니다.

9

AssertionError

Assert 문이 실패한 경우 발생합니다.

10

AttributeError

속성 참조 또는 할당이 실패한 경우 발생합니다.

11

EOFError

raw_input () 또는 input () 함수의 입력이없고 파일 끝에 도달 할 때 발생합니다.

12

ImportError

import 문이 실패하면 발생합니다.

13

KeyboardInterrupt

사용자가 일반적으로 Ctrl + c를 눌러 프로그램 실행을 중단 할 때 발생합니다.

14

LookupError

모든 조회 오류에 대한 기본 클래스입니다.

15

IndexError

시퀀스에서 인덱스를 찾을 수 없을 때 발생합니다.

16

KeyError

지정된 키가 사전에 없을 때 발생합니다.

17

NameError

로컬 또는 글로벌 네임 스페이스에서 식별자를 찾을 수없는 경우 발생합니다.

18

UnboundLocalError

함수 또는 메서드에서 지역 변수에 액세스하려고하지만 값이 할당되지 않은 경우 발생합니다.

19

EnvironmentError

Python 환경 외부에서 발생하는 모든 예외에 대한 기본 클래스입니다.

20

IOError

존재하지 않는 파일을 열려고 할 때 print 문 또는 open () 함수와 같은 입력 / 출력 작업이 실패 할 때 발생합니다.

21

IOError

운영 체제 관련 오류로 인해 발생합니다.

22

SyntaxError

Python 구문에 오류가있을 때 발생합니다.

23

IndentationError

들여 쓰기가 제대로 지정되지 않은 경우 발생합니다.

24

SystemError

인터프리터가 내부 문제를 발견하면 발생하지만이 오류가 발생하면 Python 인터프리터가 종료되지 않습니다.

25

SystemExit

sys.exit () 함수를 사용하여 Python 인터프리터가 종료 될 때 발생합니다. 코드에서 처리되지 않으면 인터프리터가 종료됩니다.

26

TypeError

지정된 데이터 유형에 대해 유효하지 않은 연산 또는 함수가 시도 될 때 발생합니다.

27

ValueError

데이터 유형의 내장 함수에 유효한 유형의 인수가 있지만 인수에 유효하지 않은 값이 지정된 경우 발생합니다.

28

RuntimeError

생성 된 오류가 어떤 범주에도 속하지 않을 때 발생합니다.

29

NotImplementedError

상속 된 클래스에서 구현해야하는 추상 메서드가 실제로 구현되지 않은 경우 발생합니다.

Python의 어설 션

어설 션은 프로그램 테스트를 마쳤을 때 켜거나 끌 수있는 온 전성 검사입니다.

주장을 생각하는 가장 쉬운 방법은 그것을 raise-if성명서 (또는 더 정확하게 말하면, 비 승인 성명서). 표현식이 테스트되고 결과가 거짓이면 예외가 발생합니다.

어설 션은 버전 1.5에 도입 된 Python의 최신 키워드 인 assert 문에 의해 수행됩니다.

프로그래머는 종종 유효한 입력을 확인하기 위해 함수 시작 부분에, 그리고 유효한 출력을 확인하기 위해 함수 호출 후에 어설 션을 배치합니다.

어설 션

assert 문을 만나면 파이썬은 수반되는 표현식을 평가합니다. 표현식이 거짓이면 Python은 AssertionError 예외를 발생시킵니다.

assert 구문은 다음과 같습니다.

assert Expression[, Arguments]

어설 션이 실패하면 Python은 ArgumentExpression을 AssertionError의 인수로 사용합니다. AssertionError 예외는 try-except 문을 사용하여 다른 예외처럼 포착되고 처리 될 수 있지만 처리되지 않으면 프로그램을 종료하고 추적을 생성합니다.

다음은 온도를 켈빈에서 화씨로 변환하는 함수입니다. 켈빈 0 도는 추위만큼 차갑기 때문에 음의 온도가 보이면 함수가 종료됩니다.

#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

예외 란 무엇입니까?

예외는 프로그램 명령의 정상적인 흐름을 방해하는 프로그램 실행 중에 발생하는 이벤트입니다. 일반적으로 Python 스크립트가 대처할 수없는 상황이 발생하면 예외가 발생합니다. 예외는 오류를 나타내는 Python 객체입니다.

Python 스크립트가 예외를 발생 시키면 즉시 예외를 처리해야합니다. 그렇지 않으면 종료되고 종료됩니다.

예외 처리

당신은 어떤이있는 경우 의심스러운 예외를 제기 할 수 코드를, 당신은에 의심스러운 코드를 배치하여 프로그램을 방어 할 수try:블록. try : 블록 후에except: 문 뒤에 가능한 한 우아하게 문제를 처리하는 코드 블록이 나옵니다.

통사론

다음은 try .... except ... else 블록 의 간단한 구문입니다 .

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block.

다음은 위에서 언급 한 구문에 대한 몇 가지 중요한 사항입니다.

  • 단일 try 문은 여러 except 문을 가질 수 있습니다. 이는 try 블록에 다른 유형의 예외를 throw 할 수있는 문이 포함되어있을 때 유용합니다.

  • 예외를 처리하는 일반 except 절을 제공 할 수도 있습니다.

  • except 절 뒤에 else 절을 ​​포함 할 수 있습니다. else- 블록의 코드는 try : 블록의 코드가 예외를 발생시키지 않으면 실행됩니다.

  • else- 블록은 try : 블록의 보호가 필요하지 않은 코드를위한 좋은 장소입니다.

이 예제는 파일을 열고, 파일에 내용을 쓰고 전혀 문제가 없기 때문에 정상적으로 나옵니다.

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

이것은 다음 결과를 생성합니다-

Written content in the file successfully

이 예제는 쓰기 권한이없는 파일을 열려고하므로 예외가 발생합니다.

#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"

이것은 다음 결과를 생성합니다-

Error: can't find file or read data

제외 없음 예외와 절

다음과 같이 정의 된 예외없이 except 문을 사용할 수도 있습니다.

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block.

이런 종류의 try-except문은 발생하는 모든 예외를 포착합니다. 이러한 종류의 try-except 문을 사용하는 것은 모든 예외를 포착하지만 프로그래머가 발생할 수있는 문제의 근본 원인을 식별하지 못하기 때문에 좋은 프로그래밍 방법으로 간주되지 않습니다.

여러 예외가 있는 except

다음과 같이 여러 예외를 처리하기 위해 동일한 except 문을 사용할 수도 있습니다.

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block.

try-finally 조항

사용할 수 있습니다 finally: 함께 차단 try:블록. finally 블록은 try- 블록이 예외를 발생했는지 여부에 관계없이 실행해야하는 코드를 넣는 장소입니다. try-finally 문의 구문은 다음과 같습니다.

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

finally 절과 함께 else 절을 사용할 수 없습니다 .

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can\'t find file or read data"

쓰기 모드에서 파일을 열 수있는 권한이 없으면 다음 결과가 생성됩니다.

Error: can't find file or read data

같은 예를 다음과 같이 더 깔끔하게 작성할 수 있습니다.

#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can\'t find file or read data"

try 블록 에서 예외가 발생 하면 실행은 즉시 finally 블록 으로 전달됩니다 . finally 블록 의 모든 문 이 실행 된 후 예외가 다시 발생 하고 try-except 문의 다음 상위 계층에있는 경우 except 문 에서 처리됩니다 .

예외의 주장

예외 에는 문제에 대한 추가 정보를 제공하는 값인 인수가 있을 수 있습니다 . 인수의 내용은 예외에 따라 다릅니다. 다음과 같이 except 절에 변수를 제공하여 예외의 인수를 캡처합니다.

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

단일 예외를 처리하는 코드를 작성하는 경우 except 문에서 예외 이름 뒤에 변수를 지정할 수 있습니다. 여러 예외를 트래핑하는 경우 예외의 튜플 뒤에 변수를 지정할 수 있습니다.

이 변수는 대부분 예외 원인을 포함하는 예외 값을받습니다. 변수는 튜플 형식으로 단일 값 또는 여러 값을받을 수 있습니다. 이 튜플에는 일반적으로 오류 문자열, 오류 번호 및 오류 위치가 포함됩니다.

다음은 단일 예외에 대한 예입니다.

#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

이것은 다음 결과를 생성합니다-

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

예외 제기

raise 문을 사용하여 여러 가지 방법으로 예외를 발생시킬 수 있습니다. 에 대한 일반 구문raise 진술은 다음과 같습니다.

통사론

raise [Exception [, args [, traceback]]]

여기서 Exception예외 유형 (예 : NameError)이고 argument 는 예외 인수의 값입니다. 인수는 선택 사항입니다. 제공되지 않은 경우 예외 인수는 없음입니다.

마지막 인수 인 traceback도 선택 사항이며 (실제로 거의 사용되지 않음) 존재하는 경우 예외에 사용되는 traceback 객체입니다.

예외는 문자열, 클래스 또는 객체 일 수 있습니다. Python 코어가 발생시키는 대부분의 예외는 클래스의 인스턴스 인 인수가있는 클래스입니다. 새로운 예외를 정의하는 것은 매우 쉽고 다음과 같이 할 수 있습니다.

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

Note:예외를 포착하기 위해 "except"절은 클래스 객체 또는 단순 문자열에서 throw 된 동일한 예외를 참조해야합니다. 예를 들어, 위의 예외를 캡처하려면 다음과 같이 except 절을 작성해야합니다.

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

사용자 정의 예외

Python을 사용하면 표준 내장 예외에서 클래스를 파생하여 고유 한 예외를 만들 수도 있습니다.

다음은 RuntimeError 와 관련된 예제 입니다. 여기에서 RuntimeError 에서 서브 클래 싱 된 클래스가 생성 됩니다. 이는 예외가 발견 될 때보다 구체적인 정보를 표시해야 할 때 유용합니다.

try 블록에서 사용자 정의 예외가 발생하고 except 블록에서 포착됩니다. 변수 e는 Networkerror 클래스의 인스턴스를 만드는 데 사용됩니다 .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

따라서 위의 클래스를 정의하면 다음과 같이 예외를 발생시킬 수 있습니다.

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

파이썬은 존재 한 이후로 객체 지향 언어였습니다. 이 때문에 클래스와 객체를 만들고 사용하는 것이 매우 쉽습니다. 이 장은 Python의 객체 지향 프로그래밍 지원을 사용하는 전문가가되는 데 도움이됩니다.

객체 지향 (OO) 프로그래밍에 대한 이전 경험이없는 경우 기본 개념을 파악할 수 있도록 이에 대한 입문 과정이나 적어도 일종의 자습서를 참조 할 수 있습니다.

그러나 여기에 OOP (Object-Oriented Programming)에 대한 간략한 소개가 있습니다.

OOP 용어 개요

  • Class− 클래스의 모든 객체를 특성화하는 속성 집합을 정의하는 객체에 대한 사용자 정의 프로토 타입. 속성은 점 표기법을 통해 액세스되는 데이터 멤버 (클래스 변수 및 인스턴스 변수) 및 메서드입니다.

  • Class variable− 클래스의 모든 인스턴스가 공유하는 변수. 클래스 변수는 클래스 내에서 정의되지만 클래스의 메서드 외부에서 정의됩니다. 클래스 변수는 인스턴스 변수만큼 자주 사용되지 않습니다.

  • Data member − 클래스 및 그 객체와 관련된 데이터를 보유하는 클래스 변수 또는 인스턴스 변수.

  • Function overloading− 특정 기능에 하나 이상의 행동을 할당하는 것. 수행되는 작업은 관련된 개체 또는 인수의 유형에 따라 다릅니다.

  • Instance variable − 메서드 내에서 정의되고 클래스의 현재 인스턴스에만 속하는 변수.

  • Inheritance − 클래스의 특성을 파생 된 다른 클래스로 이전하는 것.

  • Instance− 특정 클래스의 개별 개체. 예를 들어 Circle 클래스에 속하는 객체 obj는 Circle 클래스의 인스턴스입니다.

  • Instantiation − 클래스의 인스턴스 생성.

  • Method − 클래스 정의에 정의 된 특별한 종류의 함수.

  • Object− 해당 클래스에 의해 정의 된 데이터 구조의 고유 한 인스턴스. 객체는 데이터 멤버 (클래스 변수 및 인스턴스 변수)와 메서드로 구성됩니다.

  • Operator overloading − 특정 연산자에 하나 이상의 기능 할당.

수업 생성

클래스 문은 새로운 클래스 정의를 작성합니다. 클래스의 이름은 다음과 같이 키워드 class 다음에 콜론이옵니다.

class ClassName:
   'Optional class documentation string'
   class_suite
  • 클래스에는 ClassName .__ doc__ 를 통해 액세스 할 수있는 문서 문자열이 있습니다 .

  • class_suite는 클래스 멤버, 데이터 속성과 기능을 정의하는 모든 구성 요소 문장들로 구성되어 있습니다.

다음은 간단한 Python 클래스의 예입니다.

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
  • 가변 empCount는 그 값이 클래스의 인스턴스들 사이에서 공유되는 클래스 변수이다. 이는 클래스 내부 또는 클래스 외부에서 Employee.empCount 로 액세스 할 수 있습니다 .

  • 첫 번째 메서드 __init __ () 는이 클래스의 새 인스턴스를 만들 때 Python이 호출하는 클래스 생성자 또는 초기화 메서드라고하는 특수 메서드입니다.

  • 각 메서드의 첫 번째 인수가 self 인 것을 제외하고 일반 함수와 같은 다른 클래스 메서드를 선언 합니다. Python 은 목록에 self 인수를 추가합니다 . 메서드를 호출 할 때 포함 할 필요가 없습니다.

인스턴스 개체 만들기

클래스의 인스턴스를 만들려면 클래스 이름을 사용하여 클래스를 호출하고 __init__ 메서드가 허용 하는 인수를 전달 합니다.

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)

속성 액세스

객체와 함께 도트 연산자를 사용하여 객체의 속성에 액세스합니다. 클래스 변수는 다음과 같이 클래스 이름을 사용하여 액세스됩니다-

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

이제 모든 개념을 종합하여

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

언제든지 클래스와 객체의 속성을 추가, 제거 또는 수정할 수 있습니다.

emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.

일반 문을 사용하여 속성에 액세스하는 대신 다음 함수를 사용할 수 있습니다.

  • 그만큼 getattr(obj, name[, default]) − 객체의 속성에 액세스합니다.

  • 그만큼 hasattr(obj,name) − 속성이 존재하는지 여부를 확인합니다.

  • 그만큼 setattr(obj,name,value)− 속성을 설정합니다. 속성이 없으면 생성됩니다.

  • 그만큼 delattr(obj, name) − 속성을 삭제합니다.

hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'

기본 제공 클래스 속성

모든 Python 클래스는 다음과 같은 내장 속성을 유지하며 다른 속성과 마찬가지로 도트 연산자를 사용하여 액세스 할 수 있습니다.

  • __dict__ − 클래스의 네임 스페이스를 포함하는 사전.

  • __doc__ − 정의되지 않은 경우 클래스 문서 문자열 또는 없음.

  • __name__ − 클래스 이름.

  • __module__− 클래스가 정의 된 모듈 이름. 이 속성은 대화식 모드에서 "__main__"입니다.

  • __bases__ − 기본 클래스 목록에서 발생하는 순서대로 기본 클래스를 포함하는 빈 튜플.

위 클래스의 경우 이러한 모든 속성에 액세스 해 보겠습니다.

#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
<function displayCount at 0xb7c84994>, 'empCount': 2, 
'displayEmployee': <function displayEmployee at 0xb7c8441c>, 
'__doc__': 'Common base class for all employees', 
'__init__': <function __init__ at 0xb7c846bc>}

개체 삭제 (가비지 컬렉션)

Python은 불필요한 객체 (내장 유형 또는 클래스 인스턴스)를 자동으로 삭제하여 메모리 공간을 확보합니다. 파이썬이 더 이상 사용되지 않는 메모리 블록을 주기적으로 회수하는 프로세스를 가비지 컬렉션이라고합니다.

Python의 가비지 수집기는 프로그램 실행 중에 실행되며 객체의 참조 수가 0에 도달하면 트리거됩니다. 객체를 가리키는 별칭의 수가 변경되면 객체의 참조 수가 변경됩니다.

개체의 참조 횟수는 새 이름이 할당되거나 컨테이너 (목록, 튜플 또는 사전)에 배치 될 때 증가합니다. 객체의 참조 횟수는 del로 삭제 되거나 참조가 다시 할당되거나 참조가 범위를 벗어나면 감소합니다. 객체의 참조 횟수가 0이되면 Python은 자동으로이를 수집합니다.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40> 
c = [b]     # Increase ref. count  of <40> 

del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40> 
c[0] = -1   # Decrease ref. count  of <40>

일반적으로 가비지 수집기가 고아 인스턴스를 파괴하고 해당 공간을 회수하는시기를 알 수 없습니다. 그러나 클래스는 인스턴스가 소멸 되려고 할 때 호출되는 소멸 자라고 하는 특수 메서드 __del __ ()을 구현할 수 있습니다 . 이 메서드는 인스턴스에서 사용하는 비 메모리 리소스를 정리하는 데 사용할 수 있습니다.

이 __del __ () 소멸자는 파괴 될 인스턴스의 클래스 이름을 출력합니다.

#!/usr/bin/python

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "destroyed"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

3083401324 3083401324 3083401324
Point destroyed

Note− 이상적으로는 별도의 파일에 클래스를 정의한 다음 import 문을 사용하여 주 프로그램 파일로 가져와야 합니다.

클래스 상속

처음부터 시작하는 대신 새 클래스 이름 뒤에 괄호 안에 부모 클래스를 나열하여 기존 클래스에서 파생하여 클래스를 만들 수 있습니다.

자식 클래스는 부모 클래스의 속성을 상속하며 이러한 속성을 자식 클래스에 정의 된 것처럼 사용할 수 있습니다. 자식 클래스는 부모의 데이터 멤버와 메서드를 재정의 할 수도 있습니다.

통사론

파생 클래스는 부모 클래스와 매우 유사하게 선언됩니다. 그러나 상속 할 기본 클래스 목록은 클래스 이름 다음에 제공됩니다.

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

#!/usr/bin/python

class Parent:        # define parent class
   parentAttr = 100
   def __init__(self):
      print "Calling parent constructor"

   def parentMethod(self):
      print 'Calling parent method'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "Parent attribute :", Parent.parentAttr

class Child(Parent): # define child class
   def __init__(self):
      print "Calling child constructor"

   def childMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.childMethod()      # child calls its method
c.parentMethod()     # calls parent's method
c.setAttr(200)       # again call parent's method
c.getAttr()          # again call parent's method

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

비슷한 방식으로 다음과 같이 여러 부모 클래스에서 클래스를 구동 할 수 있습니다.

class A:        # define your class A
.....

class B:         # define your class B
.....

class C(A, B):   # subclass of A and B
.....

issubclass () 또는 isinstance () 함수를 사용하여 두 클래스와 인스턴스의 관계를 확인할 수 있습니다.

  • 그만큼 issubclass(sub, sup) 부울 함수는 주어진 서브 클래스가 sub 실제로 슈퍼 클래스의 하위 클래스입니다. sup.

  • 그만큼 isinstance(obj, Class)부울 함수는 objClass 클래스 의 인스턴스이거나 Class 의 하위 클래스 인스턴스 인 경우 true를 반환합니다.

메서드 재정의

언제든지 부모 클래스 메서드를 재정의 할 수 있습니다. 부모의 메서드를 재정의하는 한 가지 이유는 하위 클래스에서 특수하거나 다른 기능을 원할 수 있기 때문입니다.

#!/usr/bin/python

class Parent:        # define parent class
   def myMethod(self):
      print 'Calling parent method'

class Child(Parent): # define child class
   def myMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.myMethod()         # child calls overridden method

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Calling child method

기본 오버로딩 방법

다음 표는 자신의 클래스에서 재정의 할 수있는 몇 가지 일반적인 기능을 나열합니다.

Sr. 아니. 방법, 설명 및 샘플 호출
1

__init__ ( self [,args...] )

생성자 (선택적 인수 포함)

샘플 호출 : obj = className (args)

2

__del__( self )

소멸자, 개체 삭제

샘플 호출 : del obj

__repr__( self )

평가 가능한 문자열 표현

샘플 호출 : repr (obj)

4

__str__( self )

인쇄 가능한 문자열 표현

샘플 호출 : str (obj)

5

__cmp__ ( self, x )

개체 비교

샘플 호출 : cmp (obj, x)

연산자 오버로딩

2 차원 벡터를 표현하기 위해 Vector 클래스를 만들었다 고 가정하면 더하기 연산자를 사용하여 추가하면 어떻게됩니까? 대부분의 경우 파이썬은 당신에게 소리를 지 릅니다.

그러나 클래스에서 __add__ 메서드를 정의하여 벡터 추가를 수행 할 수 있으며 더하기 연산자는 예상대로 작동합니다.

#!/usr/bin/python

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Vector(7,8)

데이터 숨기기

객체의 속성은 클래스 정의 외부에서 표시되거나 표시되지 않을 수 있습니다. 이중 밑줄 접두사로 속성의 이름을 지정해야합니다. 그러면 해당 속성이 외부인에게 직접 표시되지 않습니다.

#!/usr/bin/python

class JustCounter:
   __secretCount = 0
  
   def count(self):
      self.__secretCount += 1
      print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.__secretCount

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

1
2
Traceback (most recent call last):
   File "test.py", line 12, in <module>
      print counter.__secretCount
AttributeError: JustCounter instance has no attribute '__secretCount'

Python은 클래스 이름을 포함하도록 이름을 내부적으로 변경하여 해당 멤버를 보호합니다. object._className__attrName 과 같은 속성에 액세스 할 수 있습니다 . 마지막 줄을 다음과 같이 바꾸면 작동합니다.

.........................
print counter._JustCounter__secretCount

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

1
2
2

정규 표현식 이 일치하거나 패턴에서 개최 특수 구문을 사용하여 다른 문자열이나 문자열의 집합을 찾는 데 도움이 문자의 특별한 순서입니다. 정규식은 UNIX 세계에서 널리 사용됩니다.

모듈 rePython에서 Perl과 유사한 정규식을 완벽하게 지원합니다. re 모듈은 정규식을 컴파일하거나 사용하는 동안 오류가 발생하면 예외 re.error를 발생시킵니다.

정규 표현식을 처리하는 데 사용되는 두 가지 중요한 함수를 다룰 것입니다. 그러나 먼저 작은 것 : 다양한 문자가 있으며 정규 표현식에서 사용될 때 특별한 의미를 갖습니다. 정규 표현식을 다룰 때 혼동을 피하기 위해 원시 문자열을 다음과 같이 사용합니다.r'expression'.

매치 기능

이 함수는 선택적 플래그 를 사용하여 RE 패턴문자열 과 일치 시키려고합니다 .

다음은이 함수의 구문입니다.

re.match(pattern, string, flags=0)

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

pattern

일치시킬 정규식입니다.

2

string

이것은 문자열이며, 문자열의 시작 부분에있는 패턴과 일치하도록 검색됩니다.

flags

비트 OR (|)를 사용하여 다른 플래그를 지정할 수 있습니다. 이들은 아래 표에 나열된 수정 자입니다.

re.match의 함수가 반환 a를match 성공에 대한 반대, None실패시. 우리가 사용하는 그룹 (NUM) 또는 그룹 () 의 기능을match 일치하는 표현을 얻을 개체.

Sr. 아니. 일치 개체 방법 및 설명
1

group(num=0)

이 메서드는 전체 일치 (또는 특정 하위 그룹 번호)를 반환합니다.

2

groups()

이 메서드는 튜플에서 일치하는 모든 하위 그룹을 반환합니다 (아무것도 없으면 비어 있음).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
   print "matchObj.group(1) : ", matchObj.group(1)
   print "matchObj.group(2) : ", matchObj.group(2)
else:
   print "No match!!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

검색 기능

이 함수 는 선택적 플래그가 있는 문자열 내에서 RE 패턴 의 첫 번째 발생을 검색합니다 .

다음은이 함수의 구문입니다.

re.search(pattern, string, flags=0)

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

pattern

일치시킬 정규식입니다.

2

string

이것은 문자열이며, 문자열의 어느 곳에서나 패턴과 일치하도록 검색됩니다.

flags

비트 OR (|)를 사용하여 다른 플래그를 지정할 수 있습니다. 이들은 아래 표에 나열된 수정 자입니다.

re.search의 함수가 반환 a를match 성공에 대한 반대, none실패시. 우리가 사용하는 그룹 (NUM) 또는 그룹 () 의 기능을match 일치하는 표현을 얻을 개체.

Sr. 아니. 일치 개체 방법 및 설명
1

group(num=0)

이 메서드는 전체 일치 (또는 특정 하위 그룹 번호)를 반환합니다.

2

groups()

이 메서드는 튜플에서 일치하는 모든 하위 그룹을 반환합니다 (아무것도 없으면 비어 있음).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

매칭 대 검색

Python은 정규 표현식을 기반으로 두 가지 다른 기본 연산을 제공합니다. match 문자열의 시작 부분에서만 일치를 확인하는 반면 search 문자열의 어느 곳에서나 일치하는지 확인합니다 (Perl이 기본적으로 수행하는 작업입니다).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

No match!!
search --> searchObj.group() :  dogs

검색 및 바꾸기

가장 중요한 것 중 하나 re 정규식을 사용하는 방법은 sub.

통사론

re.sub(pattern, repl, string, max=0)

이 방법은 RE의 모든 항목 대체 패턴문자열REPL 하지 않는 한 모든 항목을 대체, 최대가 제공했다. 이 메서드는 수정 된 문자열을 반환합니다.

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Phone Num :  2004-959-559
Phone Num :  2004959559

정규식 수정 자 : 옵션 플래그

정규식 리터럴에는 다양한 일치 측면을 제어하는 ​​선택적 수정자가 포함될 수 있습니다. 수정자는 선택적 플래그로 지정됩니다. 이전에 표시된대로 배타적 OR (|)를 사용하여 여러 수정자를 제공 할 수 있으며 다음 중 하나로 표시 될 수 있습니다.

Sr. 아니. 수정 자 및 설명
1

re.I

대소 문자를 구분하지 않는 일치를 수행합니다.

2

re.L

현재 로케일에 따라 단어를 해석합니다. 이 해석은 알파벳 그룹 (\ w 및 \ W)과 단어 경계 동작 (\ b 및 \ B)에 영향을줍니다.

re.M

$는 줄의 끝 (문자열의 끝뿐만 아니라)과 일치하고 ^는 모든 줄의 시작 (문자열의 시작뿐만 아니라)과 일치시킵니다.

4

re.S

마침표 (점)가 줄 바꿈을 포함하여 모든 문자와 일치하도록합니다.

5

re.U

유니 코드 문자 집합에 따라 문자를 해석합니다. 이 플래그는 \ w, \ W, \ b, \ B의 동작에 영향을줍니다.

6

re.X

"멋진"정규식 구문을 허용합니다. 공백을 무시하고 (세트 [] 내부 또는 백 슬래시로 이스케이프 된 경우 제외) 이스케이프되지 않은 #을 주석 표시 자로 처리합니다.

정규식 패턴

제어 문자를 제외하고 (+ ? . * ^ $ ( ) [ ] { } | \), 모든 문자가 일치합니다. 제어 문자 앞에 백 슬래시를 붙여서 이스케이프 할 수 있습니다.

다음 표는 Python에서 사용할 수있는 정규식 구문을 나열합니다.

Sr. 아니. 패턴 및 설명
1

^

줄의 시작과 일치합니다.

2

$

줄 끝과 일치합니다.

.

개행을 제외한 모든 단일 문자와 일치합니다. m 옵션을 사용하면 줄 바꿈도 일치시킬 수 있습니다.

4

[...]

괄호 안의 모든 단일 문자와 일치합니다.

5

[^...]

대괄호가 아닌 단일 문자와 일치합니다.

6

re*

0 개 이상의 선행 표현식과 일치합니다.

7

re+

1 회 이상의 선행 표현식과 일치합니다.

8

re?

0 또는 1 개의 선행 표현식과 일치합니다.

9

re{ n}

정확히 n 번의 선행 표현식과 일치합니다.

10

re{ n,}

n 개 이상의 선행 표현식과 일치합니다.

11

re{ n, m}

이전 표현식의 최소 n 개 및 최대 m 개 항목과 일치합니다.

12

a| b

a 또는 b와 일치합니다.

13

(re)

정규식을 그룹화하고 일치하는 텍스트를 기억합니다.

14

(?imx)

정규식 내에서 i, m 또는 x 옵션을 일시적으로 전환합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다.

15

(?-imx)

정규식 내에서 i, m 또는 x 옵션을 일시적으로 해제합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다.

16

(?: re)

일치하는 텍스트를 기억하지 않고 정규식을 그룹화합니다.

17

(?imx: re)

괄호 안의 i, m 또는 x 옵션을 일시적으로 토글합니다.

18

(?-imx: re)

괄호 안의 i, m 또는 x 옵션을 일시적으로 끕니다.

19

(?#...)

논평.

20

(?= re)

패턴을 사용하여 위치를 지정합니다. 범위가 없습니다.

21

(?! re)

패턴 부정을 사용하여 위치를 지정합니다. 범위가 없습니다.

22

(?> re)

역 추적없이 독립적 인 패턴과 일치합니다.

23

\w

단어 문자와 일치합니다.

24

\W

단어가 아닌 문자와 일치합니다.

25

\s

공백과 일치합니다. [\ t \ n \ r \ f]와 같습니다.

26

\S

공백이 아닌 것과 일치합니다.

27

\d

숫자와 일치합니다. [0-9]와 같습니다.

28

\D

숫자가 아닌 것과 일치합니다.

29

\A

문자열의 시작과 일치합니다.

30

\Z

문자열의 끝과 일치합니다. 개행이 존재하면 개행 바로 전에 일치합니다.

31

\z

문자열의 끝과 일치합니다.

32

\G

마지막 경기가 끝난 지점과 일치합니다.

33

\b

괄호 밖에있을 때 단어 경계와 일치합니다. 대괄호 안에있을 때 백 스페이스 (0x08)와 일치합니다.

34

\B

비 단어 경계와 일치합니다.

35

\n, \t, etc.

줄 바꿈, 캐리지 리턴, 탭 등과 일치합니다.

36

\1...\9

n 번째 그룹화 된 하위 표현식과 일치합니다.

37

\10

이미 일치하는 경우 n 번째 그룹화 된 하위 표현식과 일치합니다. 그렇지 않으면 문자 코드의 8 진수 표현을 나타냅니다.

정규식 예

리터럴 문자

Sr. 아니. 예 및 설명
1

python

"python"과 일치합니다.

캐릭터 클래스

Sr. 아니. 예 및 설명
1

[Pp]ython

"Python"또는 "python"일치

2

rub[ye]

"ruby"또는 "rube"와 일치

[aeiou]

하나의 소문자 모음과 일치

4

[0-9]

모든 숫자와 일치합니다. [0123456789]와 동일

5

[a-z]

소문자 ASCII 문자와 일치

6

[A-Z]

대문자 ASCII 문자와 일치

7

[a-zA-Z0-9]

위 중 하나와 일치

8

[^aeiou]

소문자 모음 이외의 항목과 일치

9

[^0-9]

숫자 이외의 항목과 일치

특수 캐릭터 클래스

Sr. 아니. 예 및 설명
1

.

개행을 제외한 모든 문자와 일치

2

\d

숫자 일치 : [0-9]

\D

숫자가 아닌 일치 : [^ 0-9]

4

\s

공백 문자 일치 : [\ t \ r \ n \ f]

5

\S

공백이 아닌 일치 : [^ \ t \ r \ n \ f]

6

\w

단일 단어 문자 일치 : [A-Za-z0-9_]

7

\W

단어가 아닌 문자 일치 : [^ A-Za-z0-9_]

반복 사례

Sr. 아니. 예 및 설명
1

ruby?

"rub"또는 "ruby"일치 : y는 선택 사항입니다.

2

ruby*

"문지르 기"와 0 개 이상의 ys 일치

ruby+

"문지름"과 1 개 이상의 ys 일치

4

\d{3}

정확히 3 자리 숫자와 일치

5

\d{3,}

3 개 이상의 숫자 일치

6

\d{3,5}

3, 4 또는 5 자리 일치

탐욕스럽지 않은 반복

이것은 가장 적은 반복 횟수와 일치합니다.

Sr. 아니. 예 및 설명
1

<.*>

욕심 많은 반복 : "<python> perl>"과 일치

2

<.*?>

Nongreedy : "<python> perl>"의 "<python>"과 일치

괄호로 그룹화

Sr. 아니. 예 및 설명
1

\D\d+

그룹 없음 : + 반복 \ d

2

(\D\d)+

그룹화 : + \ D \ d 쌍 반복

([Pp]ython(, )?)+

"Python", "Python, python, python"등과 일치합니다.

역 참조

이전에 일치했던 그룹과 다시 일치합니다.

Sr. 아니. 예 및 설명
1

([Pp])ython&\1ails

python & pails 또는 Python & Pails 일치

2

(['"])[^\1]*\1

작은 따옴표 또는 큰 따옴표로 묶인 문자열. \ 1은 첫 번째 그룹이 일치하는 것과 일치합니다. \ 2는 두 번째 그룹이 일치하는 항목과 일치합니다.

대안

Sr. 아니. 예 및 설명
1

python|perl

"python"또는 "perl"일치

2

rub(y|le))

"루비"또는 "루블"과 일치

Python(!+|\?)

"Python"다음에 하나 이상의! 또는 하나?

앵커

일치 위치를 지정해야합니다.

Sr. 아니. 예 및 설명
1

^Python

문자열 또는 내부 줄의 시작 부분에서 "Python"일치

2

Python$

문자열 또는 줄 끝에서 "Python"일치

\APython

문자열 시작 부분에서 "Python"일치

4

Python\Z

문자열 끝에서 "Python"일치

5

\bPython\b

단어 경계에서 "Python"일치

6

\brub\B

\ B는 단어가 아닌 경계 : "rube"및 "ruby"의 "rub"과 일치하지만 단독으로는 일치하지 않습니다.

7

Python(?=!)

느낌표가 뒤에 오는 경우 "Python"과 일치합니다.

8

Python(?!!)

느낌표가 뒤에 나오지 않으면 "Python"과 일치합니다.

괄호가있는 특수 구문

Sr. 아니. 예 및 설명
1

R(?#comment)

"R"과 일치합니다. 나머지는 모두 코멘트

2

R(?i)uby

"uby"와 일치하는 동안 대소 문자를 구분하지 않음

R(?i:uby)

같은 상기와

4

rub(?:y|le))

\ 1 역 참조를 생성하지 않고 그룹화

CGI (Common Gateway Interface)는 웹 서버와 사용자 지정 스크립트간에 정보가 교환되는 방식을 정의하는 표준 집합입니다. CGI 사양은 현재 NCSA에서 관리합니다.

CGI 란?

  • CGI (Common Gateway Interface)는 HTTP 서버와 같은 정보 서버와 인터페이스하기위한 외부 게이트웨이 프로그램의 표준입니다.

  • 현재 버전은 CGI / 1.1이며 CGI / 1.2가 진행 중입니다.

웹 브라우징

CGI의 개념을 이해하기 위해 하이퍼 링크를 클릭하여 특정 웹 페이지 나 URL을 탐색 할 때 어떤 일이 발생하는지 살펴 보겠습니다.

  • 브라우저가 HTTP 웹 서버에 접속하여 URL, 즉 파일 이름을 요구합니다.

  • Web Server는 URL을 구문 분석하고 파일 이름을 찾습니다. 해당 파일을 찾으면 브라우저로 다시 보내고, 그렇지 않으면 잘못된 파일을 요청했음을 나타내는 오류 메시지를 보냅니다.

  • 웹 브라우저는 웹 서버에서 응답을 받고 수신 된 파일 또는 오류 메시지를 표시합니다.

그러나 특정 디렉토리의 파일이 요청 될 때마다 해당 파일이 다시 전송되지 않도록 HTTP 서버를 설정할 수 있습니다. 대신 프로그램으로 실행되고 해당 프로그램이 출력하는 모든 내용이 브라우저에 표시되도록 다시 전송됩니다. 이 기능을 Common Gateway Interface 또는 CGI라고하며 프로그램을 CGI 스크립트라고합니다. 이러한 CGI 프로그램은 Python 스크립트, PERL 스크립트, 쉘 스크립트, C 또는 C ++ 프로그램 등이 될 수 있습니다.

CGI 아키텍처 다이어그램

웹 서버 지원 및 구성

CGI 프로그래밍을 진행하기 전에 웹 서버가 CGI를 지원하고 CGI 프로그램을 처리하도록 구성되어 있는지 확인하십시오. HTTP 서버에 의해 실행되는 모든 CGI 프로그램은 미리 구성된 디렉토리에 보관됩니다. 이 디렉토리를 CGI 디렉토리라고하며 관례 적으로 / var / www / cgi-bin으로 이름이 지정됩니다. 관례 상 CGI 파일의 확장자는.cgi, 하지만 파이썬 확장자로 파일을 유지할 수 있습니다. .py 게다가.

기본적으로 Linux 서버는 / var / www의 cgi-bin 디렉토리에있는 스크립트 만 실행하도록 구성됩니다. CGI 스크립트를 실행하기 위해 다른 디렉토리를 지정하려면 httpd.conf 파일에 다음 줄을 주석 처리하십시오.

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

여기서는 Web Server가 성공적으로 실행되고 있으며 Perl 또는 Shell 등과 같은 다른 CGI 프로그램을 실행할 수 있다고 가정합니다.

첫 번째 CGI 프로그램

다음은 hello.py 라는 CGI 스크립트에 연결된 간단한 링크 입니다. 이 파일은 / var / www / cgi-bin 디렉토리에 보관되며 다음과 같은 내용이 있습니다. CGI 프로그램을 실행하기 전에 다음을 사용하여 파일 모드를 변경했는지 확인하십시오.chmod 755 hello.py 파일을 실행 가능하게 만드는 UNIX 명령.

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello World - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! This is my first CGI program</h2>'
print '</body>'
print '</html>'

hello.py를 클릭하면 다음과 같은 출력이 생성됩니다.

안녕하세요! 이것은 나의 첫 CGI 프로그램입니다

이 hello.py 스크립트는 STDOUT 파일, 즉 화면에 출력을 쓰는 간단한 Python 스크립트입니다. 인쇄 할 첫 번째 줄인 중요하고 추가 기능이 하나 있습니다.Content-type:text/html\r\n\r\n. 이 행은 브라우저로 다시 전송되며 브라우저 화면에 표시 할 컨텐츠 유형을 지정합니다.

지금 쯤이면 CGI의 기본 개념을 이해 했어야하며 Python을 사용하여 많은 복잡한 CGI 프로그램을 작성할 수 있습니다. 이 스크립트는 다른 외부 시스템과 상호 작용하여 RDBMS와 같은 정보를 교환 할 수도 있습니다.

HTTP 헤더

라인 Content-type:text/html\r\n\r\n콘텐츠를 이해하기 위해 브라우저로 전송되는 HTTP 헤더의 일부입니다. 모든 HTTP 헤더는 다음과 같은 형식이됩니다.

HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

CGI 프로그래밍에서 자주 사용하게 될 다른 중요한 HTTP 헤더는 거의 없습니다.

Sr. 아니. 헤더 및 설명
1

Content-type:

반환되는 파일의 형식을 정의하는 MIME 문자열입니다. 예는 Content-type : text / html입니다.

2

Expires: Date

정보가 무효화되는 날짜입니다. 브라우저에서 페이지를 새로 고쳐야하는시기를 결정하는 데 사용됩니다. 유효한 날짜 문자열은 01 Jan 1998 12:00:00 GMT 형식입니다.

Location: URL

요청 된 URL 대신 반환되는 URL입니다. 이 필드를 사용하여 요청을 모든 파일로 리디렉션 할 수 있습니다.

4

Last-modified: Date

자원을 마지막으로 수정 한 날짜입니다.

5

Content-length: N

리턴되는 데이터의 길이 (바이트)입니다. 브라우저는이 값을 사용하여 파일의 예상 다운로드 시간을보고합니다.

6

Set-Cookie: String

문자열을 통해 전달되는 쿠키 설정

CGI 환경 변수

모든 CGI 프로그램은 다음 환경 변수에 액세스 할 수 있습니다. 이러한 변수는 CGI 프로그램을 작성하는 동안 중요한 역할을합니다.

Sr. 아니. 변수 이름 및 설명
1

CONTENT_TYPE

콘텐츠의 데이터 유형입니다. 클라이언트가 첨부 된 콘텐츠를 서버로 보낼 때 사용됩니다. 예를 들어, 파일 업로드.

2

CONTENT_LENGTH

쿼리 정보의 길이입니다. POST 요청에만 사용할 수 있습니다.

HTTP_COOKIE

설정된 쿠키를 키 및 값 쌍의 형태로 반환합니다.

4

HTTP_USER_AGENT

User-Agent 요청 헤더 필드에는 요청을 시작한 사용자 에이전트에 대한 정보가 포함됩니다. 웹 브라우저의 이름입니다.

5

PATH_INFO

CGI 스크립트의 경로입니다.

6

QUERY_STRING

GET 메서드 요청과 함께 전송되는 URL 인코딩 정보입니다.

7

REMOTE_ADDR

요청하는 원격 호스트의 IP 주소입니다. 이것은 유용한 로깅 또는 인증에 유용합니다.

8

REMOTE_HOST

요청하는 호스트의 완전한 이름입니다. 이 정보를 사용할 수없는 경우 REMOTE_ADDR을 사용하여 IR 주소를 가져올 수 있습니다.

9

REQUEST_METHOD

요청을 만드는 데 사용되는 방법입니다. 가장 일반적인 방법은 GET 및 POST입니다.

10

SCRIPT_FILENAME

CGI 스크립트의 전체 경로입니다.

11

SCRIPT_NAME

CGI 스크립트의 이름입니다.

12

SERVER_NAME

서버의 호스트 이름 또는 IP 주소

13

SERVER_SOFTWARE

서버가 실행중인 소프트웨어의 이름과 버전.

다음은 모든 CGI 변수를 나열하는 작은 CGI 프로그램입니다. 결과를 보려면이 링크를 클릭 하십시오. 환경 가져 오기

#!/usr/bin/python

import os

print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><\br>";
for param in os.environ.keys():
   print "<b>%20s</b>: %s<\br>" % (param, os.environ[param])

GET 및 POST 메서드

브라우저에서 웹 서버로 그리고 궁극적으로 CGI 프로그램으로 일부 정보를 전달해야 할 때 많은 상황에 직면했을 것입니다. 대부분의 경우 브라우저는 두 가지 방법을 사용하여이 정보를 웹 서버에 전달합니다. 이러한 메서드는 GET 메서드와 POST 메서드입니다.

GET 메서드를 사용하여 정보 전달

GET 메서드는 페이지 요청에 추가 된 인코딩 된 사용자 정보를 보냅니다. 페이지와 인코딩 된 정보는? 다음과 같이 문자-

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

GET 메서드는 브라우저에서 웹 서버로 정보를 전달하는 기본 방법이며 브라우저의 위치 : 상자에 표시되는 긴 문자열을 생성합니다. 서버에 전달할 비밀번호 또는 기타 민감한 정보가있는 경우 GET 메소드를 사용하지 마십시오. GET 메서드에는 크기 제한이 있습니다. 요청 문자열에는 1024 자만 보낼 수 있습니다. GET 메소드는 QUERY_STRING 헤더를 사용하여 정보를 전송하며 QUERY_STRING 환경 변수를 통해 CGI 프로그램에서 액세스 할 수 있습니다.

URL과 함께 키와 값 쌍을 간단히 연결하여 정보를 전달할 수 있으며 HTML <FORM> 태그를 사용하여 GET 메서드를 사용하여 정보를 전달할 수 있습니다.

간단한 URL 예 : Get 메서드

다음은 GET 메서드를 사용하여 hello_get.py 프로그램에 두 값을 전달하는 간단한 URL입니다.

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

아래는 hello_get.py웹 브라우저에서 제공하는 입력을 처리하는 스크립트입니다. 우리는 사용할 것입니다cgi 모듈은 전달 된 정보에 매우 쉽게 액세스 할 수 있도록합니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

이것은 다음 결과를 생성합니다-

안녕하세요 ZARA ALI

간단한 FORM 예 : GET 메서드

이 예제는 HTML FORM 및 제출 버튼을 사용하여 두 개의 값을 전달합니다. 이 입력을 처리하기 위해 동일한 CGI 스크립트 hello_get.py를 사용합니다.

<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name">  <br />

Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

위 양식의 실제 출력은 다음과 같습니다. 이름과 성을 입력 한 다음 제출 버튼을 클릭하여 결과를 확인합니다.

POST 방법을 사용하여 정보 전달

일반적으로 정보를 CGI 프로그램에 전달하는보다 안정적인 방법은 POST 방법입니다. 이것은 GET 메소드와 똑같은 방식으로 정보를 패키징하지만? 뒤에 텍스트 문자열로 보내는 대신에 정보를 패키지화합니다. URL에서 별도의 메시지로 보냅니다. 이 메시지는 표준 입력의 형태로 CGI 스크립트에 들어옵니다.

다음은 GET 및 POST 메서드를 처리하는 동일한 hello_get.py 스크립트입니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

HTML FORM 및 제출 버튼을 사용하여 두 개의 값을 전달하는 위와 동일한 예제를 다시 살펴 보겠습니다. 이 입력을 처리하기 위해 동일한 CGI 스크립트 hello_get.py를 사용합니다.

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

다음은 위 양식의 실제 출력입니다. 이름과 성을 입력하고 제출 버튼을 클릭하면 결과를 볼 수 있습니다.

체크 박스 데이터를 CGI 프로그램에 전달

두 개 이상의 옵션을 선택해야하는 경우 확인란이 사용됩니다.

다음은 두 개의 확인란이있는 양식의 HTML 코드 예입니다.

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

이 코드의 결과는 다음과 같습니다.

아래는 체크 박스 버튼에 대한 웹 브라우저의 입력을 처리하는 체크 박스 .cgi 스크립트입니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

라디오 버튼 데이터를 CGI 프로그램에 전달

라디오 버튼은 하나의 옵션 만 선택해야 할 때 사용됩니다.

다음은 두 개의 라디오 버튼이있는 양식의 HTML 코드 예입니다.

<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
<input type = "radio" name = "subject" value = "maths" /> Maths
<input type = "radio" name = "subject" value = "physics" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

이 코드의 결과는 다음과 같습니다.

다음은 웹 브라우저에서 라디오 버튼에 대한 입력을 처리하는 radiobutton.py 스크립트입니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

CGI 프로그램에 텍스트 영역 데이터 전달

TEXTAREA 요소는 여러 줄 텍스트를 CGI 프로그램에 전달해야 할 때 사용됩니다.

다음은 TEXTAREA 상자가있는 양식의 HTML 코드 예입니다.

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
<textarea name = "textcontent" cols = "40" rows = "4">
Type your text here...
</textarea>
<input type = "submit" value = "Submit" />
</form>

이 코드의 결과는 다음과 같습니다.

다음은 웹 브라우저에서 입력을 처리하는 textarea.cgi 스크립트입니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"

드롭 다운 상자 데이터를 CGI 프로그램에 전달

드롭 다운 상자는 사용할 수있는 옵션이 많지만 하나 또는 두 개만 선택 될 때 사용됩니다.

다음은 하나의 드롭 다운 상자가있는 양식의 HTML 코드 예입니다.

<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit"/>
</form>

이 코드의 결과는 다음과 같습니다.

아래는 웹 브라우저에서 제공하는 입력을 처리하는 dropdown.py 스크립트입니다.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('dropdown'):
   subject = form.getvalue('dropdown')
else:
   subject = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

CGI에서 쿠키 사용

HTTP 프로토콜은 상태 비 저장 프로토콜입니다. 상업용 웹 사이트의 경우 서로 다른 페이지간에 세션 정보를 유지해야합니다. 예를 들어 하나의 사용자 등록은 여러 페이지를 완료 한 후 종료됩니다. 모든 웹 페이지에서 사용자의 세션 정보를 유지하는 방법은 무엇입니까?

많은 상황에서 쿠키 사용은 더 나은 방문자 경험이나 사이트 통계에 필요한 선호도, 구매, 커미션 및 기타 정보를 기억하고 추적하는 가장 효율적인 방법입니다.

어떻게 작동합니까?

귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 수락 할 수 있습니다. 그렇다면 방문자의 하드 드라이브에 일반 텍스트 레코드로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도착하면 쿠키를 검색 할 수 있습니다. 검색되면 서버는 저장된 내용을 알고 / 기억합니다.

쿠키는 5 개의 가변 길이 필드의 일반 텍스트 데이터 레코드입니다.

  • Expires− 쿠키가 만료되는 날짜. 비어있는 경우 방문자가 브라우저를 종료 할 때 쿠키가 만료됩니다.

  • Domain − 사이트의 도메인 이름.

  • Path− 쿠키를 설정하는 디렉토리 또는 웹 페이지의 경로. 디렉토리 나 페이지에서 쿠키를 검색하려는 경우 비어있을 수 있습니다.

  • Secure−이 필드에 "secure"라는 단어가 포함되어 있으면 쿠키는 보안 서버에서만 검색 할 수 있습니다. 이 필드가 비어 있으면 그러한 제한이 없습니다.

  • Name=Value − 쿠키는 키와 값 쌍의 형태로 설정 및 검색됩니다.

쿠키 설정

브라우저에 쿠키를 보내는 것은 매우 쉽습니다. 이러한 쿠키는 HTTP 헤더와 함께 콘텐츠 유형 필드로 전송됩니다. UserID 및 Password를 쿠키로 설정한다고 가정합니다. 쿠키 설정은 다음과 같이 수행됩니다.

#!/usr/bin/python

print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....

이 예에서 쿠키 설정 방법을 이해 했어야합니다. 우리는 사용Set-Cookie 쿠키를 설정하기위한 HTTP 헤더.

만료, 도메인 및 경로와 같은 쿠키 속성을 설정하는 것은 선택 사항입니다. 매직 라인을 보내기 전에 쿠키가 설정되어있는 것이 주목할 만합니다."Content-type:text/html\r\n\r\n.

쿠키 검색

설정된 모든 쿠키를 검색하는 것은 매우 쉽습니다. 쿠키는 CGI 환경 변수 HTTP_COOKIE에 저장되며 다음과 같은 형식을 갖습니다.

key1 = value1;key2 = value2;key3 = value3....

다음은 쿠키를 검색하는 방법의 예입니다.

#!/usr/bin/python

# Import modules for CGI handling 
from os import environ
import cgi, cgitb

if environ.has_key('HTTP_COOKIE'):
   for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
      (key, value ) = split(cookie, '=');
      if key == "UserID":
         user_id = value

      if key == "Password":
         password = value

print "User ID  = %s" % user_id
print "Password = %s" % password

이것은 위 스크립트에 의해 설정된 쿠키에 대해 다음과 같은 결과를 생성합니다-

User ID = XYZ
Password = XYZ123

파일 업로드 예

파일을 업로드하려면 HTML 양식에 enctype 속성이 multipart/form-data. 파일 유형이있는 입력 태그는 "찾아보기"버튼을 만듭니다.

<html>
<body>
   <form enctype = "multipart/form-data" 
                     action = "save_file.py" method = "post">
   <p>File: <input type = "file" name = "filename" /></p>
   <p><input type = "submit" value = "Upload" /></p>
   </form>
</body>
</html>

이 코드의 결과는 다음과 같습니다.

위의 예는 서버에 파일을 업로드하는 사람들을 저장하기 위해 의도적으로 비활성화되었지만 서버에서 위 코드를 시도해 볼 수 있습니다.

다음은 스크립트입니다. save_file.py 파일 업로드 처리-

#!/usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'
   
else:
   message = 'No file was uploaded'
   
print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

Unix / Linux에서 위의 스크립트를 실행하면 다음과 같이 파일 구분 기호를 교체해야합니다. 그렇지 않으면 open () 문 위의 Windows 시스템에서 제대로 작동합니다.

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

"파일 다운로드"대화 상자를 올리는 방법?

때로는 사용자가 링크를 클릭 할 수있는 옵션을 제공하고 싶을 때 실제 내용을 표시하는 대신 사용자에게 "파일 다운로드"대화 상자를 팝업합니다. 이것은 매우 쉽고 HTTP 헤더를 통해 달성 할 수 있습니다. 이 HTTP 헤더는 이전 섹션에서 언급 한 헤더와 다릅니다.

예를 들어, 원하는 경우 FileName 주어진 링크에서 다운로드 할 수있는 파일의 구문은 다음과 같습니다.

#!/usr/bin/python

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go here.
fo = open("foo.txt", "rb")

str = fo.read();
print str

# Close opend file
fo.close()

이 튜토리얼을 즐기 셨기를 바랍니다. 그렇다면 다음 주소로 피드백을 보내주십시오. 연락처

데이터베이스 인터페이스의 Python 표준은 Python DB-API입니다. 대부분의 Python 데이터베이스 인터페이스는이 표준을 따릅니다.

애플리케이션에 적합한 데이터베이스를 선택할 수 있습니다. Python Database API는 다음과 같은 광범위한 데이터베이스 서버를 지원합니다.

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • 마이크로 소프트 SQL 서버 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

여기에 사용할 수 파이썬 데이터베이스 인터페이스의 목록입니다 : 파이썬 데이터베이스 인터페이스 및 API . 액세스해야하는 각 데이터베이스에 대해 별도의 DB API 모듈을 다운로드해야합니다. 예를 들어, Oracle 데이터베이스와 MySQL 데이터베이스에 액세스해야하는 경우 Oracle 및 MySQL 데이터베이스 모듈을 모두 다운로드해야합니다.

DB API는 가능한 경우 Python 구조와 구문을 사용하는 데이터베이스 작업을위한 최소한의 표준을 제공합니다. 이 API에는 다음이 포함됩니다.

  • API 모듈 가져 오기.
  • 데이터베이스와의 연결 획득.
  • SQL 문 및 저장 프로 시저 실행.
  • 연결 닫기

MySQL을 사용하여 모든 개념을 배울 것이므로 MySQLdb 모듈에 대해 이야기하겠습니다.

MySQLdb 란 무엇입니까?

MySQLdb는 Python에서 MySQL 데이터베이스 서버에 연결하기위한 인터페이스입니다. Python Database API v2.0을 구현하고 MySQL C API를 기반으로 구축되었습니다.

MySQLdb는 어떻게 설치합니까?

계속하기 전에 컴퓨터에 MySQLdb가 설치되어 있는지 확인하십시오. Python 스크립트에 다음을 입력하고 실행하십시오.

#!/usr/bin/python

import MySQLdb

다음과 같은 결과가 나오면 MySQLdb 모듈이 설치되지 않은 것입니다.

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

MySQLdb 모듈을 설치하려면 다음 명령을 사용하십시오.

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev For Fedora, use the following command - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Note − 위 모듈을 설치하려면 루트 권한이 있는지 확인하십시오.

데이터베이스 연결

MySQL 데이터베이스에 연결하기 전에 다음 사항을 확인하십시오.

  • TESTDB 데이터베이스를 만들었습니다.

  • TESTDB에 EMPLOYEE 테이블을 작성했습니다.

  • 이 테이블에는 FIRST_NAME, LAST_NAME, AGE, SEX 및 INCOME 필드가 있습니다.

  • 사용자 ID "testuser"및 비밀번호 "test123"은 TESTDB에 액세스하도록 설정됩니다.

  • Python 모듈 MySQLdb가 컴퓨터에 올바르게 설치되었습니다.

  • MySQL 기본 사항 을 이해하기 위해 MySQL 자습서를 살펴 보았습니다.

다음은 MySQL 데이터베이스 "TESTDB"와 연결하는 예입니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

이 스크립트를 실행하는 동안 내 Linux 컴퓨터에서 다음 결과가 생성됩니다.

Database version : 5.0.45

데이터 소스와 연결이 설정되면 연결 개체가 반환되어 db 추가 사용을 위해, 그렇지 않으면 db없음으로 설정됩니다. 다음,db 개체를 사용하여 cursor개체는 SQL 쿼리를 실행하는 데 사용됩니다. 마지막으로 나오기 전에 데이터베이스 연결이 닫히고 리소스가 해제되었는지 확인합니다.

데이터베이스 테이블 생성

데이터베이스 연결이 설정되면 다음을 사용하여 데이터베이스 테이블에 테이블 또는 레코드를 만들 준비가 된 것입니다. execute 생성 된 커서의 방법.

EMPLOYEE 데이터베이스 테이블을 만들자-

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

INSERT 작업

데이터베이스 테이블에 레코드를 만들 때 필요합니다.

다음 예는 SQL INSERT 문을 실행 하여 EMPLOYEE 테이블에 레코드를 생성합니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

위의 예는 동적으로 SQL 쿼리를 생성하기 위해 다음과 같이 작성할 수 있습니다-

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

다음 코드 세그먼트는 매개 변수를 직접 전달할 수있는 또 다른 실행 형태입니다.

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

읽기 작업

모든 데이터베이스에 대한 읽기 작업은 데이터베이스에서 유용한 정보를 가져 오는 것을 의미합니다.

데이터베이스 연결이 설정되면이 데이터베이스에 쿼리 할 준비가 된 것입니다. 둘 중 하나를 사용할 수 있습니다.fetchone() 단일 레코드를 가져 오는 방법 또는 fetchall() 데이터베이스 테이블에서 여러 값을 fetech하는 방법.

  • fetchone()− 질의 결과 집합의 다음 행을 가져옵니다. 결과 집합은 커서 개체를 사용하여 테이블을 쿼리 할 때 반환되는 개체입니다.

  • fetchall()− 결과 집합의 모든 행을 가져옵니다. 결과 세트에서 일부 행이 이미 추출 된 경우 결과 세트에서 나머지 행을 검색합니다.

  • rowcount − 이것은 읽기 전용 속성이며 execute () 메서드의 영향을받은 행 수를 반환합니다.

다음 절차는 급여가 1000 이상인 EMPLOYEE 테이블의 모든 레코드를 쿼리합니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

이것은 다음 결과를 생성합니다-

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

업데이트 작업

모든 데이터베이스에 대한 UPDATE 작업은 데이터베이스에서 이미 사용 가능한 하나 이상의 레코드를 업데이트하는 것을 의미합니다.

다음 절차는 SEX가있는 모든 레코드를 업데이트합니다. 'M'. 여기에서는 모든 남성의 AGE를 1 년 늘립니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

작업 삭제

데이터베이스에서 일부 레코드를 삭제하려면 DELETE 작업이 필요합니다. 다음은 AGE가 20 이상인 EMPLOYEE에서 모든 레코드를 삭제하는 절차입니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

거래 수행

트랜잭션은 데이터 일관성을 보장하는 메커니즘입니다. 거래에는 다음 네 가지 속성이 있습니다.

  • Atomicity − 거래가 완료되거나 아무 일도 일어나지 않습니다.

  • Consistency − 트랜잭션은 일관된 상태에서 시작하고 시스템을 일관된 상태로 유지해야합니다.

  • Isolation − 거래의 중간 결과는 현재 거래 외부에서 볼 수 없습니다.

  • Durability − 트랜잭션이 커밋되면 시스템 장애 후에도 효과가 지속됩니다.

Python DB API 2.0은 트랜잭션을 커밋 하거나 롤백 하는 두 가지 방법을 제공 합니다.

트랜잭션을 구현하는 방법을 이미 알고 있습니다. 다시 비슷한 예가 있습니다.

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

COMMIT 작업

커밋은 변경 사항을 완료하기 위해 데이터베이스에 녹색 신호를 제공하는 작업이며이 작업 후에는 변경 사항을 되돌릴 수 없습니다.

다음은 호출하는 간단한 예입니다. commit 방법.

db.commit()

ROLLBACK 작업

하나 이상의 변경 사항에 만족하지 않고 해당 변경 사항을 완전히 되돌리려면 다음을 사용하십시오. rollback() 방법.

다음은 호출하는 간단한 예입니다. rollback() 방법.

db.rollback()

데이터베이스 연결 해제

데이터베이스 연결을 끊으려면 close () 메소드를 사용하십시오.

db.close()

close () 메서드를 사용하여 사용자가 데이터베이스에 대한 연결을 닫으면 처리되지 않은 모든 트랜잭션이 DB에 의해 롤백됩니다. 그러나 DB 하위 수준 구현 세부 정보에 의존하는 대신 응용 프로그램이 커밋 또는 롤백을 명시 적으로 호출하는 것이 좋습니다.

오류 처리

오류의 원인은 많습니다. 몇 가지 예는 실행 된 SQL 문의 구문 오류, 연결 실패 또는 이미 취소되었거나 완료된 명령문 핸들에 대한 fetch 메소드 호출입니다.

DB API는 각 데이터베이스 모듈에 존재해야하는 여러 오류를 정의합니다. 다음 표에는 이러한 예외가 나열되어 있습니다.

Sr. 아니. 예외 및 설명
1

Warning

치명적이지 않은 문제에 사용됩니다. StandardError를 하위 클래스로 분류해야합니다.

2

Error

오류의 기본 클래스입니다. StandardError를 하위 클래스로 분류해야합니다.

InterfaceError

데이터베이스 자체가 아닌 데이터베이스 모듈의 오류에 사용됩니다. Error를 하위 클래스로 분류해야합니다.

4

DatabaseError

데이터베이스 오류에 사용됩니다. Error를 하위 클래스로 분류해야합니다.

5

DataError

데이터의 오류를 참조하는 DatabaseError의 하위 클래스입니다.

6

OperationalError

데이터베이스에 대한 연결 끊김과 같은 오류를 참조하는 DatabaseError의 하위 클래스입니다. 이러한 오류는 일반적으로 Python 스크립터의 제어 범위를 벗어납니다.

7

IntegrityError

고유성 제약 조건 또는 외래 키와 같이 관계형 무결성을 손상시키는 상황에 대한 DatabaseError의 하위 클래스입니다.

8

InternalError

커서가 더 이상 활성화되지 않는 것과 같이 데이터베이스 모듈 내부의 오류를 참조하는 DatabaseError의 하위 클래스입니다.

9

ProgrammingError

잘못된 테이블 이름 및 안전하게 책임을 질 수있는 기타 오류를 참조하는 DatabaseError의 하위 클래스입니다.

10

NotSupportedError

지원되지 않는 기능을 호출하려는 것을 나타내는 DatabaseError의 하위 클래스입니다.

Python 스크립트는 이러한 오류를 처리해야하지만 위의 예외를 사용하기 전에 MySQLdb가 해당 예외를 지원하는지 확인하세요. DB API 2.0 사양을 읽고 이에 대한 자세한 정보를 얻을 수 있습니다.

Python은 네트워크 서비스에 대한 두 가지 수준의 액세스를 제공합니다. 낮은 수준에서 기본 운영 체제의 기본 소켓 지원에 액세스 할 수 있으므로 연결 지향 및 비 연결 프로토콜 모두에 대해 클라이언트와 서버를 구현할 수 있습니다.

Python에는 FTP, HTTP 등과 같은 특정 애플리케이션 수준 네트워크 프로토콜에 대한 상위 수준 액세스를 제공하는 라이브러리도 있습니다.

이 장은 네트워킹-소켓 프로그래밍에서 가장 유명한 개념에 대한 이해를 제공합니다.

소켓이란?

소켓은 양방향 통신 채널의 끝점입니다. 소켓은 프로세스 내에서, 동일한 시스템의 프로세스간에 또는 다른 대륙의 프로세스간에 통신 할 수 있습니다.

소켓은 Unix 도메인 소켓, TCP, UDP 등 다양한 채널 유형을 통해 구현 될 수 있습니다. 소켓 라이브러리는 일반적인 전송뿐만 아니라 나머지를 처리하기위한 일반적인 인터페이스를 처리하기위한 특정 클래스를 제공합니다.

소켓에는 자체 어휘가 있습니다.

Sr. 아니. 용어 및 설명
1

Domain

전송 메커니즘으로 사용되는 프로토콜 제품군입니다. 이러한 값은 AF_INET, PF_INET, PF_UNIX, PF_X25 등과 같은 상수입니다.

2

type

두 엔드 포인트 간의 통신 유형으로, 일반적으로 연결 지향 프로토콜의 경우 SOCK_STREAM, 비 연결 프로토콜의 경우 SOCK_DGRAM입니다.

protocol

일반적으로 0이며 도메인 및 유형 내에서 프로토콜의 변형을 식별하는 데 사용할 수 있습니다.

4

hostname

네트워크 인터페이스의 식별자-

  • 호스트 이름, 점으로 구분 된 쿼드 주소 또는 콜론 (및 가능하면 점) 표기법의 IPV6 주소 일 수있는 문자열

  • INADDR_BROADCAST 주소를 지정하는 문자열 "<broadcast>".

  • INADDR_ANY를 지정하는 길이가 0 인 문자열 또는

  • 호스트 바이트 순서의 이진 주소로 해석되는 정수입니다.

5

port

각 서버는 하나 이상의 포트에서 호출하는 클라이언트를 수신합니다. 포트는 Fixnum 포트 번호, 포트 번호가 포함 된 문자열 또는 서비스 이름 일 수 있습니다.

소켓 모듈

소켓을 생성하려면 소켓 모듈 에서 사용할 수 있는 socket.socket () 함수를 사용해야합니다.

s = socket.socket (socket_family, socket_type, protocol=0)

다음은 매개 변수에 대한 설명입니다.

  • socket_family − 이것은 앞에서 설명한대로 AF_UNIX 또는 AF_INET입니다.

  • socket_type − SOCK_STREAM 또는 SOCK_DGRAM입니다.

  • protocol − 일반적으로 생략되며 기본값은 0입니다.

당신은 일단 소켓 객체를, 당신은 당신의 클라이언트 또는 서버 프로그램을 작성하는 기능을해야 사용할 수 있습니다. 다음은 필요한 기능 목록입니다.

서버 소켓 방법

Sr. 아니. 방법 및 설명
1

s.bind()

이 메서드는 주소 (호스트 이름, 포트 번호 쌍)를 소켓에 바인딩합니다.

2

s.listen()

이 방법은 TCP 리스너를 설정하고 시작합니다.

s.accept()

이것은 수동적으로 TCP 클라이언트 연결을 수락하고 연결이 도착할 때까지 대기합니다 (차단).

클라이언트 소켓 방법

Sr. 아니. 방법 및 설명
1

s.connect()

이 방법은 TCP 서버 연결을 적극적으로 시작합니다.

일반 소켓 방법

Sr. 아니. 방법 및 설명
1

s.recv()

이 방법은 TCP 메시지를받습니다.

2

s.send()

이 방법은 TCP 메시지를 전송합니다.

s.recvfrom()

이 방법은 UDP 메시지를 수신합니다.

4

s.sendto()

이 방법은 UDP 메시지를 전송합니다.

5

s.close()

이 메서드는 소켓을 닫습니다.

6

socket.gethostname()

호스트 이름을 반환합니다.

간단한 서버

인터넷 서버를 작성하기 위해 우리는 socket소켓 객체를 생성하기 위해 소켓 모듈에서 사용할 수있는 함수. 그런 다음 소켓 개체를 사용하여 다른 함수를 호출하여 소켓 서버를 설정합니다.

이제 전화 bind(hostname, port)주어진 호스트에서 서비스에 대한 포트 를 지정하는 함수 .

다음으로 반환 된 객체 의 accept 메서드를 호출 합니다. 이 메서드는 클라이언트가 지정한 포트에 연결할 때까지 기다린 다음 해당 클라이언트에 대한 연결을 나타내는 연결 개체 를 반환합니다 .

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

간단한 클라이언트

주어진 포트 12345와 주어진 호스트에 대한 연결을 여는 매우 간단한 클라이언트 프로그램을 작성해 보겠습니다. 이것은 파이썬의 소켓 모듈 함수를 사용하여 소켓 클라이언트를 만드는 것은 매우 간단 합니다.

그만큼 socket.connect(hosname, port )포트의 호스트 이름 에 대한 TCP 연결을 엽니 다 . 소켓이 열리면 IO 객체처럼 읽을 수 있습니다. 완료되면 파일을 닫는 것처럼 닫아야합니다.

다음 코드는 주어진 호스트 및 포트에 연결하고 소켓에서 사용 가능한 데이터를 읽은 다음 종료하는 매우 간단한 클라이언트입니다.

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                  # Close the socket when done

이제이 server.py를 백그라운드에서 실행 한 다음 client.py 위에서 실행하여 결과를 확인합니다.

# Following would start a server in background.
$ python server.py & # Once server is started run client as follows: $ python client.py

이것은 다음 결과를 생성합니다-

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Python 인터넷 모듈

Python 네트워크 / 인터넷 프로그래밍의 몇 가지 중요한 모듈 목록입니다.

실험 계획안 공통 기능 포트 번호 Python 모듈
HTTP 웹 페이지 80 httplib, urllib, xmlrpclib
NNTP 유즈넷 뉴스 119 nntplib
FTP 파일 전송 20 ftplib, urllib
SMTP 이메일 보내기 25 smtplib
POP3 이메일을 가져 오는 중 110 poplib
IMAP4 이메일을 가져 오는 중 143 imaplib
Telnet 명령 줄 23 텔넷 립
부지런한 사람 문서 전송 70 gopherlib, urllib

FTP, SMTP, POP 및 IMAP 프로토콜과 함께 작동하려면 위에 언급 된 모든 라이브러리를 확인하십시오.

추가 자료

이것은 소켓 프로그래밍의 빠른 시작이었습니다. 방대한 주제입니다. 자세한 내용을 찾으려면 다음 링크를 사용하는 것이 좋습니다.

  • 유닉스 소켓 프로그래밍 .

  • Python 소켓 라이브러리 및 모듈 .

SMTP (Simple Mail Transfer Protocol)는 전자 메일 보내기 및 메일 서버 간 전자 메일 라우팅을 처리하는 프로토콜입니다.

Python은 smtplib 모듈은 SMTP 또는 ESMTP 리스너 데몬을 사용하여 인터넷 시스템에 메일을 보내는 데 사용할 수있는 SMTP 클라이언트 세션 개체를 정의합니다.

다음은 나중에 이메일을 보내는 데 사용할 수있는 SMTP 개체를 만드는 간단한 구문입니다.

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

다음은 매개 변수의 세부 사항입니다.

  • host− SMTP 서버를 실행하는 호스트입니다. 호스트의 IP 주소 또는 tutorialspoint.com과 같은 도메인 이름을 지정할 수 있습니다. 이것은 선택적 인수입니다.

  • port호스트 인수를 제공하는 경우 SMTP 서버가 수신하는 포트를 지정해야합니다. 일반적으로이 포트는 25입니다.

  • local_hostname− SMTP 서버가 로컬 컴퓨터에서 실행중인 경우이 옵션에서 localhost 만 지정할 수 있습니다 .

SMTP 개체에는 다음과 같은 인스턴스 메서드가 있습니다. sendmail, 일반적으로 메시지를 우편으로 보내는 작업을 수행하는 데 사용됩니다. 세 가지 매개 변수가 필요합니다.

  • 보낸 사람 - 보낸 사람의 주소를 가진 문자열입니다.

  • 수신기 - 문자열의 목록, 각 수신자에 대한 하나.

  • 메시지 - 다양한 RFC에 지정된 형식의 문자열로 메시지입니다.

다음은 Python 스크립트를 사용하여 하나의 이메일을 보내는 간단한 방법입니다. 한 번 시도해보세요-

#!/usr/bin/python

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

여기에서는 헤더의 형식을 올바르게 지정하기 위해 세 개의 따옴표를 사용하여 메시지에 기본 전자 메일을 넣었습니다. 이메일에는From, To, 및 Subject 헤더, 빈 줄로 전자 메일 본문과 구분됩니다.

메일을 보내려면 smtpObj 를 사용하여 로컬 컴퓨터의 SMTP 서버에 연결 한 다음 메시지, 보낸 사람 주소 및 대상 주소와 함께 sendmail 방법을 매개 변수로 사용합니다 (보낸 사람 및받는 사람 주소가 전자 메일 내에 있더라도 -메일 자체, 메일 라우팅에 항상 사용되는 것은 아닙니다.)

로컬 시스템에서 SMTP 서버를 실행하지 않는 경우 smtplib 클라이언트를 사용하여 원격 SMTP 서버와 통신 할 수 있습니다 . 웹 메일 서비스 (예 : Hotmail 또는 Yahoo! Mail)를 사용하지 않는 한, 이메일 제공 업체는 다음과 같이 제공 할 수있는 발신 메일 서버 세부 정보를 제공해야합니다.

smtplib.SMTP('mail.your-domain.com', 25)

Python을 사용하여 HTML 이메일 보내기

Python을 사용하여 문자 메시지를 보내면 모든 콘텐츠가 단순 텍스트로 처리됩니다. 텍스트 메시지에 HTML 태그를 포함 시켜도 단순 텍스트로 표시되며 HTML 구문에 따라 HTML 태그 형식이 지정되지 않습니다. 그러나 Python은 HTML 메시지를 실제 HTML 메시지로 보내는 옵션을 제공합니다.

전자 메일 메시지를 보내는 동안 HTML 전자 메일을 보내기 위해 Mime 버전, 콘텐츠 유형 및 문자 집합을 지정할 수 있습니다.

다음은 HTML 컨텐츠를 이메일로 보내는 예입니다. 한 번 시도해보세요-

#!/usr/bin/python

import smtplib

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

첨부 파일을 전자 메일로 보내기

내용이 혼합 된 이메일을 보내려면 다음을 설정해야합니다. Content-type 헤더 multipart/mixed. 그런 다음 텍스트 및 첨부 파일 섹션을boundaries.

경계는 전자 메일의 메시지 부분에 나타날 수없는 고유 번호가 뒤 따르는 두 개의 하이픈으로 시작됩니다. 전자 메일의 마지막 섹션을 나타내는 마지막 경계도 두 개의 하이픈으로 끝나야합니다.

첨부 파일은 pack("m") 전송 전에 base64 인코딩을 갖는 함수.

다음은 파일을 보내는 예입니다. /tmp/test.txt첨부 파일로. 한 번 시도해보세요-

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = '[email protected]'
reciever = '[email protected]'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

여러 스레드를 실행하는 것은 여러 다른 프로그램을 동시에 실행하는 것과 유사하지만 다음과 같은 이점이 있습니다.

  • 프로세스 내의 여러 스레드는 주 스레드와 동일한 데이터 공간을 공유하므로 별도의 프로세스 인 경우보다 쉽게 ​​정보를 공유하거나 서로 통신 할 수 있습니다.

  • 스레드는 때때로 경량 프로세스라고 불리며 많은 메모리 오버 헤드를 필요로하지 않습니다. 프로세스보다 저렴합니다.

스레드에는 시작, 실행 순서 및 결론이 있습니다. 컨텍스트 내에서 현재 실행중인 위치를 추적하는 명령 포인터가 있습니다.

  • 선점 (중단) 가능

  • 다른 스레드가 실행되는 동안 일시적으로 보류 (휴면이라고도 함) 될 수 있습니다.이를 양보라고합니다.

새 스레드 시작

다른 스레드를 생성하려면 스레드 모듈 에서 사용할 수있는 다음 메서드를 호출해야합니다.

thread.start_new_thread ( function, args[, kwargs] )

이 메서드 호출을 사용하면 Linux와 Windows에서 새 스레드를 빠르고 효율적으로 만들 수 있습니다.

메서드 호출이 즉시 반환되고 자식 스레드가 시작되고 전달 된 args 목록으로 함수를 호출합니다 . 함수가 반환되면 스레드가 종료됩니다.

여기서 args 는 인수의 튜플입니다. 인수를 전달하지 않고 함수를 호출하려면 빈 튜플을 사용하십시오. kwargs 는 키워드 인수의 선택적 사전입니다.

#!/usr/bin/python

import thread
import time

# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )

# Create two threads as follows
try:
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

낮은 수준의 스레딩에는 매우 효과적이지만 스레드 모듈은 최신 스레딩 모듈에 비해 매우 제한적입니다.

스레딩 모듈

Python 2.4에 포함 된 최신 스레딩 모듈은 이전 섹션에서 설명한 스레드 모듈보다 훨씬 강력하고 높은 수준의 스레드 지원을 제공합니다.

스레딩 모듈은 모든 방법 노출 스레드 모듈과 몇 가지 추가 방법을 제공합니다 -

  • threading.activeCount() − 활성 상태 인 스레드 개체의 수를 반환합니다.

  • threading.currentThread() − 호출자의 스레드 제어에있는 스레드 개체의 수를 반환합니다.

  • threading.enumerate() − 현재 활성화 된 모든 스레드 개체의 목록을 반환합니다.

메소드 외에도 스레딩 모듈에는 스레딩을 구현 하는 Thread 클래스가 있습니다. Thread 클래스에서 제공하는 메소드 는 다음과 같습니다.

  • run() − run () 메서드는 스레드의 진입 점입니다.

  • start() − start () 메서드는 run 메서드를 호출하여 스레드를 시작합니다.

  • join([time]) − join ()은 스레드가 종료되기를 기다립니다.

  • isAlive() − isAlive () 메서드는 스레드가 아직 실행 중인지 확인합니다.

  • getName() − getName () 메서드는 스레드의 이름을 반환합니다.

  • setName() − setName () 메서드는 스레드의 이름을 설정합니다.

스레딩 모듈을 사용하여 스레드 생성

스레딩 모듈을 사용하여 새 스레드를 구현하려면 다음을 수행해야합니다.

  • Thread 클래스 의 새 하위 클래스를 정의합니다 .

  • __init __ (self [, args]) 메서드를 재정 의하여 추가 인수를 추가합니다.

  • 그런 다음 run (self [, args]) 메서드를 재정 의하여 스레드가 시작될 때 수행해야하는 작업을 구현합니다.

Thread 하위 클래스를 만든 후에 는 인스턴스를 만든 다음 start () 를 호출하여 새 스레드를 시작할 수 있습니다. 그러면 차례로 run () 메서드를 호출 합니다 .

#!/usr/bin/python

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      print_time(self.name, self.counter, 5)
      print "Exiting " + self.name

def print_time(threadName, counter, delay):
   while counter:
      if exitFlag:
         threadName.exit()
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

print "Exiting Main Thread"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

스레드 동기화

Python과 함께 제공되는 threading 모듈에는 스레드를 동기화 할 수있는 구현이 간단한 잠금 메커니즘이 포함되어 있습니다. 새 잠금 을 반환하는 Lock () 메서드 를 호출 하여 새 잠금을 만듭니다.

새 잠금 개체 의 acquire (blocking) 메서드는 스레드가 동 기적으로 실행되도록하는 데 사용됩니다. 선택적 차단 매개 변수를 사용하면 스레드가 잠금을 획득하기 위해 대기하는지 여부를 제어 할 수 있습니다.

차단 이 0으로 설정된 경우 스레드는 잠금을 획득 할 수없는 경우 0 값으로 즉시 반환하고 잠금을 획득 한 경우 1을 반환합니다. 차단이 1로 설정되면 스레드가 차단되고 잠금이 해제 될 때까지 기다립니다.

새 잠금 객체 의 release () 메서드는 더 이상 필요하지 않을 때 잠금을 해제하는 데 사용됩니다.

#!/usr/bin/python

import threading
import time

class myThread (threading.Thread):
   def __init__(self, threadID, name, counter):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.counter = counter
   def run(self):
      print "Starting " + self.name
      # Get lock to synchronize threads
      threadLock.acquire()
      print_time(self.name, self.counter, 3)
      # Free lock to release next thread
      threadLock.release()

def print_time(threadName, delay, counter):
   while counter:
      time.sleep(delay)
      print "%s: %s" % (threadName, time.ctime(time.time()))
      counter -= 1

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

다중 스레드 우선 순위 대기열

모듈은 항목의 특정 번호를 보유 할 수있는 새로운 큐 개체를 만들 수 있습니다. 큐를 제어하는 ​​방법은 다음과 같습니다-

  • get() − get ()은 대기열에서 항목을 제거하고 반환합니다.

  • put() − 풋은 항목을 대기열에 추가합니다.

  • qsize() − qsize ()는 현재 대기열에있는 항목의 수를 반환합니다.

  • empty()− 대기열이 비어 있으면 empty ()는 True를 반환합니다. 그렇지 않으면 False입니다.

  • full()− 큐가 가득 차면 full ()은 True를 반환합니다. 그렇지 않으면 False입니다.

#!/usr/bin/python

import Queue
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
   def __init__(self, threadID, name, q):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.q = q
   def run(self):
      print "Starting " + self.name
      process_data(self.name, self.q)
      print "Exiting " + self.name

def process_data(threadName, q):
   while not exitFlag:
      queueLock.acquire()
         if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
         else:
            queueLock.release()
         time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1

# Create new threads
for tName in threadList:
   thread = myThread(threadID, tName, workQueue)
   thread.start()
   threads.append(thread)
   threadID += 1

# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()

# Wait for queue to empty
while not workQueue.empty():
   pass

# Notify threads it's time to exit
exitFlag = 1

# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

XML은 프로그래머가 운영 체제 및 / 또는 개발 언어에 관계없이 다른 응용 프로그램에서 읽을 수있는 응용 프로그램을 개발할 수 있도록하는 이식 가능한 오픈 소스 언어입니다.

XML이란 무엇입니까?

XML (Extensible Markup Language)은 HTML 또는 SGML과 매우 유사한 마크 업 언어입니다. 이것은 World Wide Web Consortium에서 권장하며 개방형 표준으로 제공됩니다.

XML은 SQL 기반 백본 없이도 중소 량의 데이터를 추적하는 데 매우 유용합니다.

XML 파서 아키텍처 및 API

Python 표준 라이브러리는 XML 작업을위한 최소한의 유용한 인터페이스 세트를 제공합니다.

XML 데이터에 대해 가장 기본적이고 널리 사용되는 두 가지 API는 SAX 및 DOM 인터페이스입니다.

  • Simple API for XML (SAX)− 여기에서 관심있는 이벤트에 대한 콜백을 등록한 다음 파서가 문서를 진행하도록합니다. 이것은 문서가 크거나 메모리 제한이있을 때 유용하며, 디스크에서 파일을 읽을 때 파일을 구문 분석하고 전체 파일이 메모리에 저장되지 않습니다.

  • Document Object Model (DOM) API − 이것은 전체 파일을 메모리로 읽어 들이고 XML 문서의 모든 기능을 나타내는 계층 적 (트리 기반) 형식으로 저장하는 World Wide Web Consortium 권장 사항입니다.

SAX는 대용량 파일로 작업 할 때 DOM이 할 수있는 것만 큼 빨리 정보를 처리 할 수 ​​없습니다. 반면에 DOM을 독점적으로 사용하면 특히 많은 작은 파일에 사용되는 경우 리소스를 실제로 죽일 수 있습니다.

SAX는 읽기 전용이지만 DOM은 XML 파일 변경을 허용합니다. 이 두 가지 다른 API는 문자 그대로 서로를 보완하기 때문에 대규모 프로젝트에 둘 다 사용할 수없는 이유가 없습니다.

모든 XML 코드 예제에 대해 간단한 XML 파일 movies.xml 을 입력으로 사용합니다.

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

SAX API로 XML 구문 분석

SAX는 이벤트 기반 XML 구문 분석을위한 표준 인터페이스입니다. SAX를 사용하여 XML을 구문 분석하려면 일반적으로 xml.sax.ContentHandler를 하위 클래스 화하여 고유 한 ContentHandler를 만들어야합니다.

귀하 의 ContentHandler는 특정 태그를 처리하고 XML의 당신의 맛 (들)의 속성. ContentHandler 객체는 다양한 구문 분석 이벤트를 처리하는 메서드를 제공합니다. 소유 파서는 XML 파일을 파싱 할 때 ContentHandler 메서드를 호출합니다.

startDocumentendDocument 메서드 는 XML 파일의 시작과 끝에서 호출됩니다. 문자 (text) 메소드 는 매개 변수 텍스트를 통해 XML 파일의 문자 데이터를 전달합니다.

ContentHandler는 각 요소의 시작과 끝에서 호출됩니다. 파서가 네임 스페이스 모드가 아닌 경우 startElement (tag, attributes)endElement (tag) 메서드 가 호출됩니다. 그렇지 않으면 해당 메소드 startElementNSendElementNS 가 호출됩니다. 여기서 tag는 요소 태그이고 attributes는 Attributes 객체입니다.

진행하기 전에 이해해야 할 다른 중요한 방법이 있습니다.

make_parser 방법

다음 메소드는 새로운 파서 객체를 생성하고 반환합니다. 생성 된 파서 객체는 시스템이 찾은 첫 번째 파서 유형입니다.

xml.sax.make_parser( [parser_list] )

다음은 매개 변수의 세부 사항입니다.

  • parser_list − 사용할 파서 목록으로 구성된 선택적 인수로, 모두 make_parser 메서드를 구현해야합니다.

구문 분석 방법

다음 방법은 SAX 파서를 만들고이를 사용하여 문서를 구문 분석합니다.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

다음은 매개 변수의 세부 사항입니다.

  • xmlfile − 읽을 XML 파일의 이름입니다.

  • contenthandler − 이것은 ContentHandler 객체 여야합니다.

  • errorhandler − 지정된 경우 오류 처리기는 SAX ErrorHandler 객체 여야합니다.

parseString을 방법

SAX 구문 분석기를 만들고 지정된 구문을 구문 분석하는 방법이 하나 더 있습니다. XML string.

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

다음은 매개 변수의 세부 사항입니다.

  • xmlstring − 읽을 XML 문자열의 이름입니다.

  • contenthandler − 이것은 ContentHandler 객체 여야합니다.

  • errorhandler − 지정된 경우 오류 처리기는 SAX ErrorHandler 객체 여야합니다.

#!/usr/bin/python

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Call when an element starts
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # Call when an elements ends
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         print "Year:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Stars:", self.stars
      elif self.CurrentData == "description":
         print "Description:", self.description
      self.CurrentData = ""

   # Call when a character is read
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # create an XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # override the default ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

이것은 다음 결과를 생성합니다-

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

SAX API 문서에 대한 자세한 내용은 표준 Python SAX API 를 참조하십시오 .

DOM API로 XML 구문 분석

문서 개체 모델 ( "DOM")은 XML 문서에 액세스하고 수정하기위한 W3C (World Wide Web Consortium)의 교차 언어 API입니다.

DOM은 랜덤 액세스 애플리케이션에 매우 유용합니다. SAX에서는 한 번에 한 비트의 문서 만 볼 수 있습니다. 하나의 SAX 요소를보고있는 경우 다른 요소에 액세스 할 수 없습니다.

다음은 XML 문서를 빠르게로드하고 xml.dom 모듈을 사용하여 minidom 객체를 만드는 가장 쉬운 방법입니다. minidom 객체는 XML 파일에서 DOM 트리를 빠르게 생성하는 간단한 파서 메서드를 제공합니다.

샘플 구문은 minidom 객체의 parse (file [, parser]) 함수를 호출하여 file로 지정된 XML 파일을 DOM 트리 객체로 구문 분석합니다.

#!/usr/bin/python

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# Get all the movies in the collection
movies = collection.getElementsByTagName("movie")

# Print detail of each movie.
for movie in movies:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "Type: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

이것은 다음 결과를 생성합니다-

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

DOM API 문서에 대한 자세한 내용은 표준 Python DOM API 를 참조하세요 .

Python은 그래픽 사용자 인터페이스 (GUI) 개발을위한 다양한 옵션을 제공합니다. 가장 중요한 것은 아래에 나열되어 있습니다.

  • Tkinter− Tkinter는 Python과 함께 제공되는 Tk GUI 툴킷에 대한 Python 인터페이스입니다. 이 장에서이 옵션을 살펴 보겠습니다.

  • wxPython − 이것은 wxWindows 용 오픈 소스 Python 인터페이스입니다. http://wxpython.org.

  • JPython − JPython은 Python 스크립트가 로컬 머신의 Java 클래스 라이브러리에 원활하게 액세스 할 수있는 Java 용 Python 포트입니다. http://www.jython.org.

인터넷에서 찾을 수있는 다른 많은 인터페이스가 있습니다.

Tkinter 프로그래밍

Tkinter는 Python 용 표준 GUI 라이브러리입니다. 파이썬은 Tkinter와 결합 될 때 GUI 응용 프로그램을 만드는 빠르고 쉬운 방법을 제공합니다. Tkinter는 Tk GUI 툴킷에 대한 강력한 객체 지향 인터페이스를 제공합니다.

Tkinter를 사용하여 GUI 응용 프로그램을 만드는 것은 쉬운 작업입니다. 다음 단계를 수행하기 만하면됩니다.

  • Tkinter 모듈을 가져옵니다 .

  • GUI 애플리케이션 기본 창을 만듭니다.

  • 위에서 언급 한 위젯 중 하나 이상을 GUI 애플리케이션에 추가합니다.

  • 사용자가 트리거 한 각 이벤트에 대해 조치를 취할 기본 이벤트 루프를 입력하십시오.

#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()

이것은 다음 창을 생성합니다-

Tkinter 위젯

Tkinter는 GUI 응용 프로그램에 사용되는 버튼, 레이블 및 텍스트 상자와 같은 다양한 컨트롤을 제공합니다. 이러한 컨트롤을 일반적으로 위젯이라고합니다.

현재 Tkinter에는 15 가지 유형의 위젯이 있습니다. 다음 표에서 이러한 위젯과 간단한 설명을 제공합니다.

Sr. 아니. 연산자 및 설명
1 단추

버튼 위젯은 애플리케이션에 버튼을 표시하는 데 사용됩니다.

2 캔버스

Canvas 위젯은 응용 프로그램에서 선, 타원, 다각형 및 직사각형과 같은 모양을 그리는 데 사용됩니다.

체크 버튼

Checkbutton 위젯은 여러 옵션을 확인란으로 표시하는 데 사용됩니다. 사용자는 한 번에 여러 옵션을 선택할 수 있습니다.

4 기입

Entry 위젯은 사용자의 값을 수락하기위한 한 줄 텍스트 필드를 표시하는 데 사용됩니다.

5

프레임 위젯은 다른 위젯을 구성하는 컨테이너 위젯으로 사용됩니다.

6 상표

Label 위젯은 다른 위젯에 한 줄 캡션을 제공하는 데 사용됩니다. 이미지를 포함 할 수도 있습니다.

7 리스트 박스

Listbox 위젯은 사용자에게 옵션 목록을 제공하는 데 사용됩니다.

8 메뉴 버튼

Menubutton 위젯은 애플리케이션에 메뉴를 표시하는 데 사용됩니다.

9 메뉴

메뉴 위젯은 사용자에게 다양한 명령을 제공하는 데 사용됩니다. 이러한 명령은 Menubutton에 포함되어 있습니다.

10 메시지

메시지 위젯은 사용자의 값을 수락하기위한 여러 줄 텍스트 필드를 표시하는 데 사용됩니다.

11 라디오 버튼

Radiobutton 위젯은 여러 옵션을 라디오 버튼으로 표시하는 데 사용됩니다. 사용자는 한 번에 하나의 옵션 만 선택할 수 있습니다.

12 규모

Scale 위젯은 슬라이더 위젯을 제공하는 데 사용됩니다.

13 스크롤 바

스크롤바 위젯은 목록 상자와 같은 다양한 위젯에 스크롤 기능을 추가하는 데 사용됩니다.

14 본문

텍스트 위젯은 텍스트를 여러 줄로 표시하는 데 사용됩니다.

15 최상위

Toplevel 위젯은 별도의 창 컨테이너를 제공하는 데 사용됩니다.

16 스핀 박스

Spinbox 위젯은 고정 된 수의 값에서 선택하는 데 사용할 수있는 표준 Tkinter Entry 위젯의 변형입니다.

17 PanedWindow

PanedWindow는 가로 또는 세로로 배열 된 여러 개의 창을 포함 할 수있는 컨테이너 위젯입니다.

18 LabelFrame

labelframe은 간단한 컨테이너 위젯입니다. 주요 목적은 복잡한 창 레이아웃을위한 스페이서 또는 컨테이너 역할을하는 것입니다.

19 tkMessageBox

이 모듈은 응용 프로그램에서 메시지 상자를 표시하는 데 사용됩니다.

이 위젯을 자세히 살펴 보겠습니다.

표준 속성

크기, 색상 및 글꼴과 같은 몇 가지 공통 속성이 어떻게 지정되는지 살펴 보겠습니다.

  • Dimensions

  • Colors

  • Fonts

  • Anchors

  • 릴리프 스타일

  • Bitmaps

  • Cursors

간략히 살펴 보겠습니다.

기하학 관리

모든 Tkinter 위젯은 상위 위젯 영역 전체에 위젯을 구성하는 목적을 가진 특정 지오메트리 관리 방법에 액세스 할 수 있습니다. Tkinter는 pack, grid, place와 같은 지오메트리 관리자 클래스를 제공합니다.

  • 팩 () 메소드 -이 기하 관리자는 부모 위젯에 배치하기 전에 블록에서 위젯을 구성합니다.

  • 그리드 () 메소드 - 형상이 관리자는 상위 위젯의 테이블 형 구조에서 위젯을 구성.

  • 장소 () 메소드 -이 기하 관리자는 부모 위젯의 특정 위치에 배치하여 위젯을 구성합니다.

기하학 관리 방법을 간략히 살펴 보겠습니다.

C, C ++ 또는 Java와 같은 컴파일 된 언어를 사용하여 작성하는 모든 코드를 통합하거나 다른 Python 스크립트로 가져올 수 있습니다. 이 코드는 "확장자"로 간주됩니다.

Python 확장 모듈은 일반 C 라이브러리에 불과합니다. Unix 시스템에서 이러한 라이브러리는 일반적으로.so(공유 객체의 경우). Windows 시스템에서는 일반적으로.dll (동적으로 연결된 라이브러리의 경우).

확장 작성을위한 전제 조건

확장 작성을 시작하려면 Python 헤더 파일이 필요합니다.

  • Unix 머신에서이를 위해서는 일반적으로 python2.5-dev 와 같은 개발자 별 패키지를 설치해야합니다 .

  • Windows 사용자는 바이너리 Python 설치 프로그램을 사용할 때 이러한 헤더를 패키지의 일부로 가져옵니다.

또한 C 프로그래밍을 사용하여 Python 확장을 작성하려면 C 또는 C ++에 대한 충분한 지식이 있다고 가정합니다.

파이썬 확장을 먼저 살펴보세요

Python 확장 모듈을 처음 살펴 보려면 코드를 네 부분으로 그룹화해야합니다.

  • 헤더 파일 Python.h .

  • 모듈에서 인터페이스로 노출하려는 C 함수입니다.

  • Python 개발자가 확장 모듈 내의 C 함수로 보는 함수 이름을 매핑하는 테이블입니다.

  • 초기화 기능.

헤더 파일 Python.h

당신은 포함 할 필요 Python.h의 당신에게 내부 파이썬 API에 액세스 인터프리터에 모듈 후크 사용을 제공하여 C 소스 파일에 헤더 파일을.

필요한 다른 헤더 앞에 Python.h를 포함해야합니다. Python에서 호출하려는 함수와 함께 include를 따라야합니다.

C 함수

함수의 C 구현 시그니처는 항상 다음 세 가지 형식 중 하나를 취합니다.

static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

앞선 선언은 각각 Python 객체를 반환합니다. C에있는 것처럼 Python 에는 void 함수가 없습니다. 함수가 값을 반환하지 않도록하려면 Python의 C에 해당하는 C를 반환하십시오.None값. 파이썬 헤더는 우리를 위해 이것을 수행하는 매크로, Py_RETURN_NONE을 정의합니다.

C 함수의 이름은 확장 모듈 외부에서는 볼 수 없으므로 원하는대로 지정할 수 있습니다. 그것들은 정적 함수 로 정의됩니다 .

C 함수는 일반적으로 여기에 표시된대로 Python 모듈과 함수 이름을 함께 결합하여 명명됩니다.

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

모듈 모듈 안에있는 func 라는 파이썬 함수 입니다. 일반적으로 소스 코드에서 다음에 오는 모듈의 메서드 테이블에 C 함수에 대한 포인터를 넣을 것입니다.

메서드 매핑 테이블

이 메서드 테이블은 PyMethodDef 구조의 간단한 배열입니다. 그 구조는 다음과 같습니다.

struct PyMethodDef {
   char *ml_name;
   PyCFunction ml_meth;
   int ml_flags;
   char *ml_doc;
};

다음은이 구조의 멤버에 대한 설명입니다.

  • ml_name − 이것은 파이썬 프로그램에서 사용될 때 파이썬 인터프리터가 나타내는 함수의 이름입니다.

  • ml_meth − 이것은 이전 섹션에서 설명한 서명 중 하나를 가진 함수의 주소 여야합니다.

  • ml_flags − 이것은 ml_meth가 사용하는 세 가지 서명 중 어느 것을 통역사에게 알려줍니다.

    • 이 플래그는 일반적으로 METH_VARARGS 값을 갖습니다.

    • 함수에 키워드 인수를 허용하려면이 플래그를 METH_KEYWORDS와 비트 단위 OR로 처리 할 수 ​​있습니다.

    • 인수를 허용하지 않음을 나타내는 METH_NOARGS 값을 가질 수도 있습니다.

  • ml_doc − 이것은 함수에 대한 독 스트링으로, 작성하고 싶지 않은 경우 NULL 일 수 있습니다.

이 테이블은 적절한 멤버에 대해 NULL과 0 값으로 구성된 센티넬로 종료되어야합니다.

위에서 정의한 함수의 경우 다음과 같은 메소드 매핑 테이블이 있습니다.

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

초기화 기능

확장 모듈의 마지막 부분은 초기화 함수입니다. 이 함수는 모듈이로드 될 때 Python 인터프리터에 의해 호출됩니다. 함수의 이름을 지정해야합니다.initModule, 여기서 Module모듈 의 이름입니다.

초기화 기능은 빌드 할 라이브러리에서 내 보내야합니다. Python 헤더는 PyMODINIT_FUNC를 정의하여 컴파일하는 특정 환경에서 발생하는 적절한 주문을 포함합니다. 함수를 정의 할 때 사용하기 만하면됩니다.

C 초기화 함수는 일반적으로 다음과 같은 전체 구조를 가지고 있습니다.

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

다음은 Py_InitModule3 함수에 대한 설명입니다.

  • func − 내보낼 기능입니다.

  • module_methods − 위에서 정의한 매핑 테이블 이름입니다.

  • docstring − 이것은 내선에서 제공하려는 설명입니다.

이 모든 것을 합치면 다음과 같습니다.

#include <Python.h>

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

위의 모든 개념을 사용하는 간단한 예-

#include <Python.h>

static PyObject* helloworld(PyObject* self) {
   return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
   "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
   {"helloworld", (PyCFunction)helloworld, 
      METH_NOARGS, helloworld_docs},
      {NULL}
};

void inithelloworld(void) {
   Py_InitModule3("helloworld", helloworld_funcs,
                  "Extension module example!");
}

여기서 Py_BuildValue 함수는 Python 값을 빌드하는 데 사용됩니다. 위의 코드를 hello.c 파일에 저장합니다. Python 스크립트에서 호출 할이 모듈을 컴파일하고 설치하는 방법을 살펴 보겠습니다.

확장 빌드 및 설치

의 distutils의 패키지는 매우 쉽게 표준 방식으로, 파이썬 모듈, 모두 순수 파이썬과 확장 모듈을 배포 할 수 있습니다. 모듈은 소스 형식으로 배포되며 일반적 으로 다음과 같이 setup.py 라는 설정 스크립트를 통해 빌드 및 설치 됩니다.

위 모듈의 경우 다음 setup.py 스크립트를 준비해야합니다.

from distutils.core import setup, Extension
setup(name='helloworld', version='1.0',  \
      ext_modules=[Extension('helloworld', ['hello.c'])])

이제 올바른 컴파일러 및 링커 명령 및 플래그를 사용하여 필요한 모든 컴파일 및 링크 단계를 수행하고 결과 동적 라이브러리를 적절한 디렉토리에 복사하는 다음 명령을 사용합니다.

$ python setup.py install

Unix 기반 시스템에서는 site-packages 디렉토리에 대한 쓰기 권한을 가지려면이 명령을 루트로 실행해야 할 가능성이 높습니다. 이것은 일반적으로 Windows에서 문제가되지 않습니다.

확장 가져 오기

확장을 설치하면 다음과 같이 Python 스크립트에서 해당 확장을 가져 와서 호출 할 수 있습니다.

#!/usr/bin/python
import helloworld

print helloworld.helloworld()

이것은 다음 결과를 생성합니다-

Hello, Python extensions!!

함수 매개 변수 전달

인수를 허용하는 함수를 정의하고 싶을 가능성이 높으므로 C 함수에 대해 다른 서명 중 하나를 사용할 수 있습니다. 예를 들어, 몇 개의 매개 변수를받는 다음 함수는 다음과 같이 정의됩니다.

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Parse args and do something interesting here. */
   Py_RETURN_NONE;
}

새 함수에 대한 항목을 포함하는 메소드 테이블은 다음과 같습니다.

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { "func", module_func, METH_VARARGS, NULL },
   { NULL, NULL, 0, NULL }
};

API PyArg_ParseTuple 함수를 사용하여 C 함수에 전달 된 하나의 PyObject 포인터에서 인수를 추출 할 수 있습니다 .

PyArg_ParseTuple의 첫 번째 인수는 args 인수입니다. 이것이 구문 분석 할 개체 입니다. 두 번째 인수는 나타날 것으로 예상되는 인수를 설명하는 형식 문자열입니다. 각 인수는 다음과 같이 형식 문자열에서 하나 이상의 문자로 표시됩니다.

static PyObject *module_func(PyObject *self, PyObject *args) {
   int i;
   double d;
   char *s;

   if (!PyArg_ParseTuple(args, "ids", &i, &d, &s)) {
      return NULL;
   }
   
   /* Do something interesting here. */
   Py_RETURN_NONE;
}

모듈의 새 버전을 컴파일하고 가져 오면 모든 유형의 인수로 새 함수를 호출 할 수 있습니다.

module.func(1, s="three", d=2.0)
module.func(i=1, d=2.0, s="three")
module.func(s="three", d=2.0, i=1)

아마도 더 많은 변형을 생각 해낼 수 있습니다.

PyArg_ParseTuple의 기능

다음은 표준 서명입니다. PyArg_ParseTuple 기능-

int PyArg_ParseTuple(PyObject* tuple,char* format,...)

이 함수는 오류에 대해 0을 반환하고 성공에 대해 0이 아닌 값을 반환합니다. tuple은 C 함수의 두 번째 인수 인 PyObject *입니다. 여기서 형식 은 필수 및 선택적 인수를 설명하는 C 문자열입니다.

다음은 형식 코드 목록입니다. PyArg_ParseTuple 기능-

암호 C 유형 의미
길이가 1 인 파이썬 문자열은 C 문자가됩니다.
더블 Python float는 C double이됩니다.
에프 흙손 Python float는 C float가됩니다.
나는 int Python int는 C int가됩니다.
Python int는 C long이됩니다.
오래 오래 Python int는 C long long이됩니다.
영형 PyObject * Python 인수에 대한 NULL이 아닌 빌린 참조를 가져옵니다.
에스 숯* C char *에 포함 된 null이없는 Python 문자열입니다.
에스# char * + int C 주소 및 길이에 대한 모든 Python 문자열.
티# char * + int C 주소 및 길이에 대한 읽기 전용 단일 세그먼트 버퍼.
Py_UNICODE * C에 null이 포함되지 않은 Python 유니 코드.
유# Py_UNICODE * + int 모든 Python 유니 코드 C 주소 및 길이.
w # char * + int 단일 세그먼트 버퍼를 C 주소 및 길이로 읽고 씁니다.
숯* s와 마찬가지로 None도 허용합니다 (C char *를 NULL로 설정).
지# char * + int s #과 마찬가지로 None도 허용합니다 (C char *를 NULL로 설정).
(...) 당 ... Python 시퀀스는 항목 당 하나의 인수로 처리됩니다.
|   다음 인수는 선택 사항입니다.
:   형식 끝과 오류 메시지의 함수 이름을 차례로 지정합니다.
;   끝 형식을 지정한 다음 전체 오류 메시지 텍스트를 입력합니다.

반환 값

Py_BuildValuePyArg_ParseTuple 과 매우 유사한 형식 문자열을 받습니다 . 구축중인 값의 주소를 전달하는 대신 실제 값을 전달합니다. 다음은 추가 기능을 구현하는 방법을 보여주는 예입니다.

static PyObject *foo_add(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("i", a + b);
}

이것이 파이썬으로 구현 된 경우의 모습입니다-

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

다음과 같이 함수에서 두 개의 값을 반환 할 수 있습니다.이 값은 Python의 목록을 사용하여 캐업됩니다.

static PyObject *foo_add_subtract(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("ii", a + b, a - b);
}

이것이 파이썬으로 구현 된 경우의 모습입니다-

def add_subtract(a, b):
   return (a + b, a - b)

Py_BuildValue의 기능

다음은 표준 서명입니다. Py_BuildValue 기능-

PyObject* Py_BuildValue(char* format,...)

여기 형식 은 빌드 할 Python 개체를 설명하는 C 문자열입니다. Py_BuildValue 의 다음 인수 는 결과가 빌드되는 C 값입니다. 의 PyObject *의 결과는 새로운 기준이다.

다음 표에는 일반적으로 사용되는 코드 문자열이 나열되어 있으며이 중 0 개 이상이 문자열 형식으로 결합됩니다.

암호 C 유형 의미
AC 문자는 길이가 1 인 Python 문자열이됩니다.
더블 AC double은 Python float가됩니다.
에프 흙손 AC float는 Python float가됩니다.
나는 int AC int는 Python int가됩니다.
AC long은 Python int가됩니다.
PyObject * Python 객체를 전달하고 참조를 훔칩니다.
영형 PyObject * Python 객체를 전달하고 정상적으로 INCREF합니다.
영형& 변환 + 무효 * 임의 변환
에스 숯* C 0으로 끝나는 char *는 Python 문자열, NULL은 None입니다.
에스# char * + int C char * 및 Python 문자열의 길이 또는 NULL에서 없음.
Py_UNICODE * C 전체의 null로 끝나는 문자열을 Python 유니 코드로, 또는 NULL을 없음.
유# Py_UNICODE * + int C-wide 문자열과 길이는 Python 유니 코드로, NULL은 None입니다.
w# char*+int Read/write single-segment buffer to C address and length.
z char* Like s, also accepts None (sets C char* to NULL).
z# char*+int Like s#, also accepts None (sets C char* to NULL).
(...) as per ... Builds Python tuple from C values.
[...] as per ... Builds Python list from C values.
{...} as per ... Builds Python dictionary from C values, alternating keys and values.

Code {...} builds dictionaries from an even number of C values, alternately keys and values. For example, Py_BuildValue("{issi}",23,"zig","zag",42) returns a dictionary like Python's {23:'zig','zag':42}.