<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Smart ITs</title>
    <link>https://smartits.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 13 May 2026 20:48:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>HLIFEINFO</managingEditor>
    <image>
      <title>Smart ITs</title>
      <url>https://t1.daumcdn.net/cfile/tistory/215A8F4757503DED2A</url>
      <link>https://smartits.tistory.com</link>
    </image>
    <item>
      <title>LockBit 랜섬웨어란?</title>
      <link>https://smartits.tistory.com/293</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LockBit은 &quot;.lockbit&quot; 확장자를 가진 파일로 암호화하여 데이터(파일, 이미지, 비디오)에 대한 액세스를 제한하는 파일 암호화 랜섬웨어입니다. 그런 다음 파일에 액세스하는 대가로 Bitcoin 암호화폐의 형태로 &quot;몸값&quot;을 요청하여 피해자로부터 돈을 갈취하려고 시도합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 랜섬웨어는 Windows 7, Windows 8.1 및 Windows 10을 포함한 모든 버전의 Windows를 대상으로 합니다. 이 실행 파일이 실행되면 암호화할 데이터 파일이 있는지 컴퓨터의 모든 드라이브 문자를 스캔하기 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LockBit 랜섬웨어는 암호화할 특정 파일 확장자를 가진 파일을 검색합니다. 암호화하는 파일에는 중요한 문서, 이미지, 비디오 및 .doc, .docx, .xls, .pdf 등과 같은 파일이 포함됩니다. 이러한 파일이 감지되면 이 랜섬웨어는 확장자를 LockBit으로 변경하므로 더 이상 파일을 열 수 없습니다. 이 랜섬웨어는 암호화된 각 파일의 이름을 name.id-ID.lockbit 형식으로 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한번 파일이 &quot;.lockbit&quot; 확장자로 암호화되면 이 파일을 열 수 없으며 이 랜섬웨어는 파일이 암호화된 각 폴더와 Windows 바탕 화면에 &quot;Restore-My-Files.txt&quot; 랜섬 메모를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 랜섬웨어가 컴퓨터 검사를 마치면 영향을 받는 컴퓨터에 있는 모든 섀도우 볼륨 복사본도 삭제됩니다. 이는 섀도우 볼륨 복사본을 사용하여 암호화된 파일을 복원할 수 없도록 하기 위한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LockBit 랜섬웨어는 감염된 첨부 파일이 포함된 스팸 이메일을 통해 감염되거나 운영 체제 및 설치된 프로그램의 취약점을 악용하여 감염됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사이버 범죄자는 위조된 헤더 정보가 포함된 이메일을 스팸으로 발송하여 DHL이나 FedEx와 같은 운송 회사에서 보낸 메일인 것처럼 믿게 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이메일은 사용자에게 소포를 배달하려고 시도했지만 어떤 이유로 실패했다고 알려줍니다. 때때로 이메일은 당신이 만든 선적에 대한 알림이라고 속입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어느 쪽이든, 이메일이 무엇을 말하는지 궁금하게 하여 첨부 파일을 열거나 이메일에 포함된 링크를 클릭하게 만듭니다. 그리고 그로 인해 컴퓨터가 LockBit 랜섬웨어에 감염됩니다. 그러므로 수상한 이메일이 오면 절대로 이메일내의 첨부파일을 열거나 수상한 링크를 클릭하면 안됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 랜섬웨어는 운영 체제 취약점을 악용하여 피해자를 공격하는 것도 발견되었다고 합니다. 일반적으로 악용되는 소프트웨어에는 운영 체제 자체, 브라우저, Microsoft Office 및 타사 응용 프로그램이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 랜섬웨어가 피해자의 파일 암호화를 완료하면 이러한 사이버 범죄자에게 연락하는 방법에 대한 지침이 포함된 랜섬 노트도 표시됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LockBit 랜섬웨어가 표시할 메시지는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;All your important files are encrypted!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Any attempts to restore your files with the thrid-party software will be fatal for your files!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RESTORE YOU DATA POSIBLE ONLY BUYING private key from us.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;There is only one way to get your files back:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;hellip;&amp;hellip;&amp;hellip;..&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>정보보안 (Security)</category>
      <category>It</category>
      <category>Lockbit</category>
      <category>Ransomware</category>
      <category>security</category>
      <category>랜섬웨어</category>
      <category>정보보안</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/293</guid>
      <comments>https://smartits.tistory.com/293#entry293comment</comments>
      <pubDate>Tue, 7 Sep 2021 23:47:35 +0900</pubDate>
    </item>
    <item>
      <title>V2X (V2V, V2I, V2P) 개요</title>
      <link>https://smartits.tistory.com/292</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2X(Vehicle-to-Everything)는 V2V(Vehicle-to-Vehicle), V2I(Vehicle-to-Infrastructure), V2P(Vehicle-to-Pedestrian) 통신으로 구성된 지능형 교통 시스템을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2X는 광범위한 전송 및 트래픽 관련 센서 간의 고대역폭, 짧은 대기 시간 및 매우 안정적인 통신이 필요합니다. 생체 인식 좌석 기술, 자율적으로 관리되는 교통 시스템 및 고속도로 시스템 등도 첨단 IoT 기술의 일부입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IOT 기술의 이러한 영역은 우리가 운전하는 방식을 변화시켜 교통을 더 안전하게 만들고 교통 혼잡을 줄이며 자동차가 환경에 미치는 영향을 줄이는 것을 목표로 합니다. 또한 운전자에게 도로 위험을 경고하여 교통 부상과 사망자를 줄이는데 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 V2X 통신에서 V2V와 V2I는 주로 강조되는 두 가지 시스템입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2V 통신(Vehicle-to-Vehicle Communication) 기술을 통해 차량은 두 차량 간에 데이터를 무선으로 스마트 인프라에 전달할 수 있습니다. V2V 통신의 목표는 운송 중인 차량이 주변 환경에 대한 360도 인식을 개발할 수 있도록 하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2V 애플리케이션에는 교차로 이동 보조(IMA), 좌회전 보조(LTA), 비상 전자식 제동등(EEBL), 전방 충돌 경고(FCW) 및 사각지대 경고(BSW)가 포함됩니다.&amp;nbsp; V2V 시스템은 차량 위치, 속도, 방향, 브레이크 상태 및 크기를 포함하는 핵심 정보를 포함합니다. 타이어 공기압, 헤드라이트, 범퍼 높이 등과 같은 변수 데이터를 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2V는 자율주행차의 핵심 모듈로 무인 또는 보이지 않는 교차로에서 접근했을 때 자율주행차의 안전성을 높일 수 있는 가시선이 아닌 통신(Non-Line-of-Sight Communication) 이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2V 통신의 데이터는 지능형 전송 시스템에서 추가로 사용하여 교통 관리를 개선할 수 있습니다. 차량이 신호등 및 표지판과 같은 도로변 인프라와 통신할 수 있도록 연결된 네트워크를 형성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;교통 패턴에 따라 디지털 방식으로 차선을 전환하는 차선 관리 시스템, 또한 설정된 경로를 따라가는 차량이 가속과 제동을 동시에 수행할 수 있는 연결 기능인 &quot;군집 주행&quot;도 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2I는 차세대 지능형 교통 시스템(ITS)입니다. V2I 기술은 차량에서 생성된 교통 데이터를 캡처하여 운전자에게 안전, 이동성 또는 환경 관련 조건을 알려주는 알림과 같은 정보를 인프라에서 차량으로 무선으로 제공합니다. 긴급 차량 접근, 위험한 위치, 횡단보도, 잘못된 길 운전, 도로 공사, 정지 차량, 교통 상황, 저속 차량 및 상태 등의 정보들이 제공되어 안전에 도움이 되도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;V2X와 관련하여 V2P(Vehicle-to-Pedestrian)는 차량과 보행자 또는 가까운 거리에 있는 여러 보행자간의 직접 통신을 포함합니다. 또한, 통신은 자전거타는 사람과 같은 다른 취약한 도로 사용자와 연결될 수 있습니다. V2P는 직접 또는 네트워크 인프라를 사용하여 수행됩니다. 접근하는 차량의 보행자에 대한 경고와 취약한 도로 사용자의 차량에 대한 경고를 용이하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>스마트카 (Smart Car)</category>
      <category>V2I</category>
      <category>V2P</category>
      <category>V2V</category>
      <category>V2X</category>
      <category>Vehicle-to-Everything</category>
      <category>Vehicle-to-Infrastructure</category>
      <category>Vehicle-to-Pedestrian</category>
      <category>Vehicle-to-Vehicle</category>
      <category>자율주행</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/292</guid>
      <comments>https://smartits.tistory.com/292#entry292comment</comments>
      <pubDate>Wed, 25 Aug 2021 22:21:29 +0900</pubDate>
    </item>
    <item>
      <title>BIOPASS RAT 악성코드</title>
      <link>https://smartits.tistory.com/291</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BIOPASS RAT이라고 하는 새로운 악성코드가 발견되었는데, 라이브 스트리밍을 사용하여 피해자의 화면을 감시하는 새로운 접근 방식을 취한다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BIOPASS RAT는 인기있는 라이브 스트리밍 및 비디오 녹화 앱인 OBS(Open Broadcaster Software) Studio의 프레임워크를 사용하여 실시간 메시징을 통해 클라우드 서비스에 라이브 스트리밍을 설정함으로써 피해자의 화면을 훔쳐볼 수 있다는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 이 공격은 Alibaba Cloud(Aliyun)의 오브젝트 스토리지 서비스(OSS)를 사용하여 BIOPASS RAT Python 스크립트를 호스팅하고 피해자로부터 추출된 데이터를 저장한다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;악성코드 설치가 시작되면 악성코드는 피해자가 이미 BIOPASS RAT에 감염되었는지 여부를 확인하는데, 감염되지 않았다면 스크립트가 피해자의 화면에 사기성 콘텐츠를 표시하기 시작하여 사용자에게 Flash of Silverlight를 설치해야 함을 알려주고 악성 로더로 안내한다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 로그인이 생성되면 악성코드는 Cobalt Strike 또는 BPS 백도어를 로드할 수 있는 다양한 예약된 작업을 생성하고 실행한다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BIOPASS RAT가 실행되면 백도어를 찾고 필요한 경우 백도어를 생성하고 타임스탬프를 추가합니다. 그런 다음 HTTP 서버를 열고 특정 포트 번호를 수신하도록 하는 &quot;online.txt&quot;라는 Python 스크립트를 로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버가 설정되고 실행되면 백도어는 특정 폴더에 실행 루트 디렉터리를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런 다음 BIOPASS RAT는 루트 디렉토리에 액세스하여 명령 및 제어 서버(C2)에 의해 피해자를 위해 생성된 사용자 ID가 있는 &quot;bps.key&quot;라는 파일을 찾습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;거기에서 BIOPASS RAT는 모든 것을 얻습니다. 데스크탑은 모니터링되고 RTMP 라이브 스트리밍을 통해 클라우드로 라이브 스트리밍됩니다. 데스크톱의 PNG 스크린샷이 업로드되고 셸 명령이 Python 기능을 트리거하여 스스로를 종료한 다음 예약된 작업을 통해 다시 시작할 수 있다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BIOPASS RAT는 피해자의 쿠키와 로그인 데이터 파일까지 수집합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BIOPASS RAT는 중국 게임 사이트를 통해 감염이 시작되었다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보안 (Security)</category>
      <category>Biopass</category>
      <category>It</category>
      <category>security</category>
      <category>악성코드</category>
      <category>정보보안</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/291</guid>
      <comments>https://smartits.tistory.com/291#entry291comment</comments>
      <pubDate>Sun, 22 Aug 2021 23:25:12 +0900</pubDate>
    </item>
    <item>
      <title>802.11ax (WiFi 6 : HEW(고효율 WLAN : High Efficiency WLAN))</title>
      <link>https://smartits.tistory.com/290</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IEEE 802.11ax 표준은 802.11ac의 진화입니다. 주로 데이터 자체 전송속도 증가에만 중점을 두었던 이전 표준과 달리 802.11ax는 더 나은 효율성, 용량 및 성능에 중점을 둡니다. 이를 통해 사용자당 평균 처리량이 4배 향상되고 사용자 경험이 향상됩니다. 이는 밀집된 실내/실외 사용/설치의 경우에도 마찬가지입니다. 더 높은 변조, 더 많은 OFDM 부반송파 및 더 긴 OFDM 심볼을 포함하는 여러가지 변경 사항을 사용함으로써 이를 가능하게 합니다. MU-MIMO, 빔포밍 및 OFDMA를 통한 다중화 사용자 (업링크 스케줄링) 및 BSS 컬러 코드를 통해 동일 채널 간섭을 완화하는 단계를 포함합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;802.11ac는 5GHz 대역만 사용했지만 802.11ax는 2.4 및 5GHz 대역을 모두 처리하므로 이전 버전과의 호환성을 유지하고 802.11n 및 802.11ac 장치 모두가 마이그레이션되도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IEEE 802.11ax는 Wi-Fi 6 또는 HEW(고효율 WLAN : High Efficiency WLAN)라고도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IEEE 802.11ac는 데이터 자체의 전송속도를 높였지만 몇가지 문제를 해결하지 못했습니다. 업링크 액세스는 주로 경합 (Contention)을 기반으로 합니다. 밀집된 네트워크에 많은 장치가 있거나 밀접하게 배치된 여러 액세스 포인트가 있는 경우 충돌, 백오프가 발생할 수 있으며 이에 따라 유효 처리량이 감소할 수 있습니다. 사용자 경험은 모든 장치에 영향을 미칩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 일이 발생하는 일반적인 사용 사례는 붐비는 공공 핫스팟(공항) 또는 이벤트 장소(축구 경기장)입니다. 아파트 단지, 학교 및 교육 캠퍼스에서도 발생할 수 있습니다. 또한 2022년까지 최대 50개의 Wi-Fi 장치가 스마트홈에 포함될 것으로 예상됩니다. 이러한 성장은 주로 가전 제품과 가제트가 IoT를 지원하게 되었기 때문입니다. IEEE 802.11ax는 전체 네트워크 용량 활용, 효율성, 성능, 사용자 경험 및 대기 시간 감소의 관점에서 이러한 문제를 해결하는 것을 목표로 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;802.11ax는 2.4GHz 및 5GHz 대역을 모두 지원합니다. 따라서 802.11n 및 802.11ac 모두와 백워드 호환됩니다. 즉, 레거시 클라이언트도 802.11ax AP에 연결할 수 있으며 그 반대의 경우도 마찬가지입니다. 802.11ax는 부반송파 수를 늘리지만 부반송파 간격을 좁혀 채널 대역폭을 보존함으로써 4배 더 큰 FFT를 사용합니다. OFDM 심볼 기간 및 Cyclic Prefix는 실외 환경에서 더 나은 성능을 위해 증가되었습니다. 실내 환경에 대한 더 높은 데이터 전송률을 위해 1024-QAM 및 더 짧은 Cyclic Prefix가 도입되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;802.11ac Wave 2에서는 동시에 4개의 MU-MIMO 스트림만 가능했지만 802.11ax에서는 8개로 늘었습니다. 업링크에서 MU-MIMO가 도입되었지만 802.11ac Wave 2에서는 다운링크에서만 가능했습니다. AP는 업링크 MU-MIMO를 조정하기 위해 트리거 프레임을 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OFDMA는 4G 셀룰러에서 수행되는 방식과 유사하게 Wi-Fi에서 처음으로 도입되었습니다. OFDMA를 사용하면 여러 사용자가 동시에 할당된 OFDM 부반송파 세트를 사용하여 전송할 수 있습니다. 부반송파는 RU(Resource Units)로 그룹화되어 할당됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;802.11ax는 고밀도 네트워크의 사용 사례를 해결하기 위한 것이므로 업링크 액세스는 경합 (Contention)을 기반으로 하지 않으면서 스케쥴링됩니다. TWT(Target Wake Time)라는 새로운 기능을 사용하여 스테이션을 슬립, 절전 및 예정된 시간에 깨울 수 있습니다. 따라서 AP는 스테이션간의 경합 (Contention)을 최소화하는 방식으로 스케줄링을 수행할 수 있습니다. 이는 혼잡을 완화하기 위한 로드 밸런싱 기법으로도 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;밀집된 네트워크에서 인접 AP는 동일 채널 간섭을 일으킬 수 있습니다. 겹치는 영역의 스테이션은 과도하게 백오프됩니다. 이것은 BSS Color라는 기능에 의해 802.11ax에서는 완화됩니다. 이것은 스테이션이 다른 네트워크에서 전송되었는지 식별하여 올바른 처리를 하는데 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MU-MIMO는 여러 스트림이 동시에 전송되기 때문에 전체 용량을 증가시킵니다. 이것은 대역폭을 요구하는 애플리케이션에 이상적입니다. 각 사용자에 대한 전송은 빔포밍을 통해 설정됩니다. OFDMA는 용량을 늘리지 않고 사용자의 필요에 따라 부반송파를 할당하여 더 효율적으로 사용합니다. OFDM을 사용하면 사용자가 보낼 것이 많지 않더라도 주어진 시간 동안 모든 부반송파를 차지하게 됩니다. OFDMA를 사용하면 각각 다른 부반송파 세트를 사용하여 여러 사용자를 동시에 다중화할 수 있습니다. 이는 OFDMA가 저대역폭 애플리케이션에 적합하다는 것을 의미합니다. 사용자는 또한 OFDMA를 사용하여 대기 시간을 줄일 수 있습니다. OFDMA를 사용하면 대역폭 요구 사항이 다양한 여러 사용자를 동시에 예약할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 MU-MIMO와 OFDMA는 서로를 보완합니다. 일반적인 사용에서 802.11ac Wave2의 MU-MIMO 성능은 AP와 클라이언트 사이의 거리, 채널 선택, 안테나 성능, 다른 클라이언트의 존재 및 기능 등에 따라 달라지는 것으로 나타났습니다. 일부에서는 MU-MIMO가 낮은 처리량을 야기하기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OFDM 부반송파 간격이 78.125kHz로 더 좁은데, 이는 발진기가 더 나은 위상 잡음 성능을 가져야 하고 RF 프론트엔드가 더 나은 선형성을 가져야 함을 의미합니다. 1024-QAM이 가능하기 때문에 EVM 요구 사항이 더 엄격합니다. 우수한 성능을 위해서는 긴밀한 주파수 동기화와 클록 오프셋 보정이 필요합니다. 스테이션은 또한 전송이 트리거 프레임에 표시된 대로 정확하게 조정되어야 하기 때문에 클록을 기반으로 프레임 타이밍을 유지해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>와이파이 (WiFi)</category>
      <category>HEW</category>
      <category>High Efficiency WLAN</category>
      <category>It</category>
      <category>wifi</category>
      <category>wifi6</category>
      <category>고효율 WLAN</category>
      <category>와이파이</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/290</guid>
      <comments>https://smartits.tistory.com/290#entry290comment</comments>
      <pubDate>Fri, 20 Aug 2021 00:18:43 +0900</pubDate>
    </item>
    <item>
      <title>802.11ad (WiGig)</title>
      <link>https://smartits.tistory.com/289</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;일반적으로 사무실 환경에서 데이타 전송속도가 1Gbps를 초과하고 짧은 대기 시간을 원하는 통신 환경을 위해서는 여전히 유선을 많이 사용해 왔습니다. 지금까지 IEEE 802.11ad가 고안될 때까지는 이러한 통신 환경에 적합한 Wi-Fi 프로토콜이 없었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;IEEE 802.11ad는 60GHz 비인가 대역에서 단거리 통신(약 1-10미터)을 위한 매우 고속의 데이터 속도(약 8Gbps)를 위한 WiFi 프로토콜입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;60GHz 작동 대역 때문에 802.11ad는 5GHz 대역에서 802.11ac와 PHY 계층을 보완하지만 상호 운용하지는 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;이 표준은 방향성 다중 기가비트(DMG)라고도 합니다. 상업적으로 WiGig(무선 기가비트)라는 용어가 일반적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;IEEE 802.11ad의 도입은 2016년부터 증가하고 있는데, 이 표준은 60GHz 대역에서도 작동하는 IEEE 802.11ay로 발전합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;고대역폭(&amp;gt; 1Gbps)과 짧은 대기 시간(~10us)으로 초고속 데이타 전송이 가능한 IEEE 802.11ad를 사용하면 가정과 사무실에서 통신을 위해 전선을 사용하는 불편함을 없앨 수 있습니다. 아래와 같은 다양한 사용처에서 802.11ad의 장점을 누릴 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 4K 동영상 다운로드 또는 공유&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 사진 및 동영상 실시간 동기화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 기가비트 핫스팟&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 신속한 파일 전송&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 신속한 클라우드 접속&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 고해상도 네트워크 게이밍&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ HD 미디어 스트리밍&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 고속 화면 전송&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ AR/VR 앱 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;주파수 밴드를 보면 이전에는 802.11-2016 표준에서 802.11ad에 57-66GHz 범위의 4개 채널이 할당되었는데, 현재는 IEEE 802.11ad에 57-70GHz 주파수 밴드가 할당되어 사용되며, 채널 대역폭이 2.16GHz인 6개의 채널을 사용할 수 있습니다. 채널 2(59.40-61.56GHz)는 모든 지역에서 사용할 수 있으며 기본 채널로 간주됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널1 중심주파수 : 58.32GHz (57.24GHz ~ 59.4GHz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널2 중심주파수 : 60.48GHz (59.4GHz ~ 61.56GHz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널3 중심주파수 : 62.64GHz (61.56GHz ~ 63.72GHz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널4 중심주파수 : 64.80GHz (63.72GHz ~ 65.88GHz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널5 중심주파수 : 66.96GHz (65.88GHz ~ 68,04Ghz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;▶ 채널6 중심주파수 : 69.12GHz (68.04GHz ~ 70.2GHz)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;2.16GHz의 채널 대역폭은 스펙트럼이 많기 때문에 802.11ad가 멀티 기가비트 속도를 제공할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;PHY 계층에서 802.11ad에는 제어, 단일 캐리어(SC) 및 OFDM의 세 가지 모드가 있는데, OFDM 모드는 더이상 사용되지 않습니다. 모바일 장치를 위한 옵션인 저전력 단일 캐리어 모드도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;802.11ad는 MIMO와 같은 공간 다중화를 지원하지 않고, 단일 채널에서 단일 공간 스트림을 지원합니다. 그러나 공간 분리 및 방향성 작동을 위한 빔포밍을 지원합니다. 최대 32개의 안테나가 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;802.11ac에 비해 802.11ad가 더 전력 효율적입니다. 비트당 전력 소비가 5배 더 낮습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;802.11ad를 지원하는 칩셋은 Broadcom, Intel, Qualcomm Atheros, Wilocity, Tensorcom, Peraso, Lattice Semiconductor, MediaTek, Nitero 등이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;상용화된 무선 라우터 및 AP 업체는 Netgear, Acelink, TP-Link, IgniteNet 및 Asus입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>와이파이 (WiFi)</category>
      <category>802.11ad</category>
      <category>It</category>
      <category>wifi</category>
      <category>WiGig</category>
      <category>와이파이</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/289</guid>
      <comments>https://smartits.tistory.com/289#entry289comment</comments>
      <pubDate>Mon, 16 Aug 2021 20:36:50 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 함수에서 결과값을 반환시키는 return 키워드</title>
      <link>https://smartits.tistory.com/288</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;호출한 함수 내부에서 어떤 처리를 한후 그 결과값을 반환하기 위해 사용하는 것이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Return&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;키워드의 일반적인 사용은 아래와 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;return [expression_list]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문에서 특정 값이나 수식이 있으면 계산되어 반환되고 그렇지 않으면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;ldquo;None&amp;rdquo;&lt;/span&gt;이 반환됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문은 표현식 목록&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;/span&gt;또는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;None)&lt;/span&gt;을 반환 값으로 사용하여 현재 함수 호출을 종료합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문이&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;finally&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문이 있는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;try&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문에서 제어를 전달하면 해당&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;finally&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문이 실제로 함수를 떠나기 전에 실행됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래는 실제 사용예입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def double (a):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;cal = a * a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;return cal&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;res = double (5)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Result is &quot;, res)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;double&lt;/span&gt;에서 어떤 값의 제곱을 계산한후 반환되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;라는 변수에 저장됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래는 실행 결과입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Result is&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;25&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수의 반환값을 변수에 저장하지 않고 바로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;print&lt;/span&gt;문에서 사용할 수도 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def double (a):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;cal = a * a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;return cal&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Result is &quot;, double (5))&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행 결과는 위와 동일합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Result is&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;25&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;문에 아무런 값을 반환하지 않고 사용할 수도 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def double (a):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;global res&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;res = a * a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;return&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;res = 0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;double(5)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Result is &quot;, res)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 함수내에서 전역변수의 값을 직접 계산된 값으로 변경합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행 결과는 위와 동일합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Result is&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;25&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>파이썬 (Python)/파이썬 키워드</category>
      <category>Python</category>
      <category>return키워드</category>
      <category>파이썬</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/288</guid>
      <comments>https://smartits.tistory.com/288#entry288comment</comments>
      <pubDate>Tue, 29 Jun 2021 19:51:46 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 디버깅을 유용하게 해주는 assert 키워드</title>
      <link>https://smartits.tistory.com/287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;문은 디버깅 목적을 위해서 프로그램에 삽입하여 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적인 사용은 아래와 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;assert expression [&quot;,&quot; expression]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;단순한 형태의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;문은 아래와 같으며&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;assert expression&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이는 아래 코드와 동일합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;if __debug__:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;if not expression: raise AssertionError&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;조금더 확장된 형태의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;문은 아래와 같으며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;assert expression1, expression2&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래 코드와 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;if __debug__:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;if not expression1: raise AssertionError(expression2)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래 간단한 예제를 보시면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;rate = 0.9&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Rate is correct range.&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;rate = 1.1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Rate is out of range.&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;첫번째&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;문에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;rate&lt;/span&gt;의 값이 범위내에 있으므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;자체가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;가 되어 다음 코드로 넘어갑니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하지만 두번째&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;문에서는 범위를 벗어나므로 아래와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;AssertionError&lt;/span&gt;가 발생됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Rate is in range.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;File &quot;assert_test1.py&quot;, line 9, in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;AssertionError&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;단순히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;AssertionError&lt;/span&gt;만 발생하면 어떤 이유인지 어느&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;문에서 발생했는지를 모르기 때문에 아래와 같이 많이 사용합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;rate = 1.1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0, &quot;Out of range&quot;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (&quot;Rate is out of range.&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러면 아래와 같이 어떤&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;AssertionError&lt;/span&gt;인지를 명확히 알고 디버깅을 할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;File &quot;assert_test1.py&quot;, line 9, in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0, &quot;Out of range&quot;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;AssertionError: Out of range&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;AssertionError&lt;/span&gt;&lt;span&gt;가 발생이 되면 파이썬 프로그램이 바로 중지되기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;try-except&lt;/span&gt;문과 같이 사용하여 에러처리를 해주는 것이 좋습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;try:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;rate = 1.1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;assert 0.0 &amp;lt;= rate &amp;lt;= 1.0, &quot;Out of range&quot;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;except AssertionError as err:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print(err)&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;# print assert expression&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;rate = rate * 0.5&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (&quot;Rate is adjusted under 1.0&quot;)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러면 아래와 같이 에러처리까지 깔끔하게 진행시킬 수가 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Out of range&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Rate is adjusted under 1.0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>파이썬 (Python)/파이썬 키워드</category>
      <category>assert키워드</category>
      <category>Python</category>
      <category>디버깅</category>
      <category>파이썬</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/287</guid>
      <comments>https://smartits.tistory.com/287#entry287comment</comments>
      <pubDate>Tue, 29 Jun 2021 19:50:37 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 변수 개체를 삭제하는 del 키워드</title>
      <link>https://smartits.tistory.com/286</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;del&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를 이용해서 변수와 객체의 연결을 끊을 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;del&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드는 다음과 같이 사용가능합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;del target_list&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;변수를 삭제하면 변수가 동일한 코드 블록의 전역문에서 발생하는지 여부에 따라 로컬 또는 전역에서 해당 변수의 바인딩이 제거됩니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변수가 삭제된후 참조를 하게 되면&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;NameError&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;에러가 발생합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래 코드를 참조하면 됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;a = 10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;del a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실행결과는 처음&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;print&lt;/span&gt;문에서는 변수&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;a&lt;/span&gt;의 값이 제대로 나오지만 두번째&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;print&lt;/span&gt;문에서는 에러가 발생됨을 알 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;File &quot;del_test1.py&quot;, line 7, in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;NameError: name 'a' is not defined&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그런데 아래 코드와 같이 로컬에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;global&lt;/span&gt;로 선언한 변수를 삭제하면 어떻게 되는지를 보면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;count = 10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def test (a):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;global count&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;count = count + a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (count)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;del count&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;test (100)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (count)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;첫번째&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;print&lt;/span&gt;문에서는 이상없이 값을 출력되지만 역시 마찬가지로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;NameError&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;에러가 발생됨을 볼 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;110&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;File &quot;del_test2.py&quot;, line 13, in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (count)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;NameError: name 'count' is not defined&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마찬가지로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;nonlocal&lt;/span&gt;로 선언된 변수를 삭제하면 바로 위의 함수에서 참조를 하면&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;NameError&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;에러가 발생됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>파이썬 (Python)/파이썬 키워드</category>
      <category>del키워드</category>
      <category>Python</category>
      <category>변수삭제</category>
      <category>파이썬</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/286</guid>
      <comments>https://smartits.tistory.com/286#entry286comment</comments>
      <pubDate>Tue, 29 Jun 2021 19:49:29 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 로컬변수가 아님을 선언하기 위한 nonlocal 키워드</title>
      <link>https://smartits.tistory.com/285</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;nonlocal&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;문은 전역변수을 제외한 바로 위의 함수에서 사용되는 변수와 바인딩되어 참조하도록 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉&lt;span&gt;, nonlocal&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문으로 선언되는 변수는 전역변수와 바인딩을 할 수 없습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;a = 10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def test1 ():&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;nonlocal a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;a = 100&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;test1()&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위의 코드를 실행하면 아래와 같이 에러가 발생됨을 알 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;File &quot;nonlocal_test1.py&quot;, line 4&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;nonlocal a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;^&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;SyntaxError: no binding for nonlocal 'a' found&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용된 함수 바로 한단계 바깥쪽에 위치한 변수와 바인딩을 할 수 있도록 코드를 수정하면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;a = 10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def test1 ():&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;a = 100&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;def test2 ():&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;nonlocal a&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;# test1()&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;함수에 영향을 미침&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;a = 1000&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;test2 ()&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;test1 ()&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;print (a)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Test2()&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;함수에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;nonlocal&lt;/span&gt;을 선언했으므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;test1()&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;함수의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변수의 값이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;으로 변경됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제 실행예를 보면&lt;span&gt;, test2()&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;함수의 값이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;이 출력되고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;나중에 전역변수의 값인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;이 출력됨을 알 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;1000&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #7030a0;&quot;&gt;10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>파이썬 (Python)/파이썬 키워드</category>
      <category>nonlocal키워드</category>
      <category>Python</category>
      <category>로컬변수</category>
      <category>전역변수</category>
      <category>파이썬</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/285</guid>
      <comments>https://smartits.tistory.com/285#entry285comment</comments>
      <pubDate>Tue, 29 Jun 2021 19:48:06 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 로컬에서 전역변수를 사용하기 위한 global 키워드</title>
      <link>https://smartits.tistory.com/284</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;global&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;문은 현재 코드 블록 전체에 영향을 미치는 선언문입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이는 명시된 변수가 전역으로 해석된다는 것입니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;global&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;문은 로컬에서의 사용을 위해서 해당 변수를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;global&lt;/span&gt;로 선언하여 사용할 수 있는 편리함을 주지만&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그렇다고 너무 남용하면 코드에 혼란을 줄 수 있기 때문에 남용하면 좋지 않습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적인 사용법에 대한 코드는 아래와 같습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;601&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;def test (a):&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;global count&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;count = count + a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;print (count)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;count = 10&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #0070c0;&quot;&gt;test (100)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;test&lt;/span&gt;라는 함수내부에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;라는 전역변수를 사용하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;global&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;키워드로 선언합니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그러면 전역변수를 로컬에서 사용할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위의 코드의 실행결과로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;ldquo;110&amp;rdquo;&lt;/span&gt;이 출력됩니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>파이썬 (Python)/파이썬 키워드</category>
      <category>global키워드</category>
      <category>Python</category>
      <category>로컬변수</category>
      <category>전역변수</category>
      <category>파이썬</category>
      <author>HLIFEINFO</author>
      <guid isPermaLink="true">https://smartits.tistory.com/284</guid>
      <comments>https://smartits.tistory.com/284#entry284comment</comments>
      <pubDate>Tue, 29 Jun 2021 19:46:59 +0900</pubDate>
    </item>
  </channel>
</rss>