Nami 의 공부방 139

제너레이터 에 대해서 !! !

def reverse(data): for index in range(0,len(data),1): #return data[index]; yield data[index]; for char in reverse('golf'): print(char); #help(range); #위 함수를 설명 하겠습니다. 위 함수에서 yield 랑 return 이랑 차이점을 말씀드리겟습니다 . # yield 같은 경우에는 함수가 끝날때 메모리를 정리 하지 않지 습니다 . #그래서 문자열이 출력되게 됩니다. 하지만 return 을 사용핡경우 같은 한 글자만 출력 되겠죠? ㅎㅎ def abc(): data = "abc" for char in data: yield char; #return char; it = iter(abc()); p..

Soft Ware/python 2012.03.10

함수 ~~

파이썬에서는 help 명령어를 치면 함수에 대해 알수 있습니다. help(print); 치면 print에 대해 알수 있습니다. 자 그럼 여기서 사용자가 정의한 함수에 대해서도 알수 있겠죠? 하지만 정보 가 미약합니다 ㅠㅠ 자 그럼 사용자가 정의한 함수에 대해서 정보를 기입해 두면 다른 사용자가 소스를 분석할때 좋겠죠? 키워드는 plus.__doc__ = "return the sum of parameter a, b" 입니다. 사용자가 정의한 함수.__doc__="설명" 이런식으로 이루워졌습니다. ㅎㅎ # -*- coding: utf-8 -*- def factorial(x): """이 함수는 입력한 값에 대한 x*x-1....1 값을 리턴한다""" if x < 1: return 1; return x * fa..

Soft Ware/python 2012.03.10

정의하지 않는 가변 인자 (딕셔너리)

def userURIBuilder(server,port,**user): str = "http://" + server + ":" + port + "/?"; for key in user.keys(): str += key + "=" + user[key] + "&"; return str; print(userURIBuilder("test.com","8080",id="userid",passwd="1234",name="mike",age="20")); 이 경우에는 딕셔너리로 저장된다. 딕셔너리란 사전이란 뜻으로 키 값을 통해서 값을 입력 및 출력 할수 있다 ^^ 딕셔너리는 순서대로 저장 되는것이 아니라 임의로 저장되는데 음 그럼 출력 순서를 모르지 않을까요 하는 생각이 드는데 책이랑 출력값이 같다 ㅠㅠ

Soft Ware/python 2012.03.05

가변인수 !!

1.첫번째 경우 def union2(Data): res=[]; for item in Data: for x in item: if not x in res: res.append(x); return res; union2([["HAM"],["EGG"]]); 이 경우는 리스트를 넘기기 때문에 item 에서 HAM 문자열을 한개로 본다 2. 두번째 경우 def union2(Data): res=[]; for item in Data: for x in item: if not x in res: res.append(x); return res; print(union2(["HAM","EGG"])); 이 경우는 리스트 안에 있는 문자열들을 ["HAM","EGG"] 를 한개로 보고 그 안에 있는 내용을 H A M 한글자씩 item에..

Soft Ware/python 2012.03.05

키워드 인수 !!!

키워드 인수 는 일반 인수 뒤에 위치 합니다. 즉 def connectURI(server,port): str = "http://" + server + ":" + port; return str; print(connectURI("test.com","8080")); print(connectURI("test.com",port="8080")); print(connectURI(port="test.com",server="8080")); 이런식으로 사용할수 있습니다. 하지만 print(connectURI("test.com",server="8080")); 를 선언한다면 오류가 발생합니다. 그이유는 일반인수는 순서대로 server 에 "test.com"에 대입 되고 다시 server에 "8080" 를 대입 할려고 하니깐 ..

Soft Ware/python 2012.03.05

디스패치 오브젝트 중 세마포어 오브젝트와 타이머 오브젝트에 대해서 !!!

뮤텍스 오브젝트는 특정한 스레드만 획득 할수 있었다면 세마포어 오브젝트는 하나 이상의 스레드가 동시에 공유된 자원을 사용 할 수 있도록 허락 합니다 ^^ 그럼으로서 드라이버는 뮤텍스 오브젝트와 달이 얼마나 많은 스레드가 동시에 세마포어 오브젝트를 얻을 수 있는지를 제어 할수 있습니다 . 세마포어 초기 함수를 보면 VOID KeInitializeSemaphore(IN PRKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit) 여기서 Count 는 커널에서 얼마나 많은 스레드가 세마포어 오브젝트를 사용할수 있는지를 Limit는 동시에 사용할수 있는지를 나타낸다 . ------------------------------------------------------------..

비동기 프로시저 콜 < APC > 에 대해서 ~~

IRQL 중에 APC LEVEL이 있습니다. 그 녀석에 대해 알아 보겠습니다 APC 은 비동기 프로시저 호출을 처리할때 재 진입을 제어 하기 위해 커널 모드 루틴에 의해 사용된다고 하네요. 간단한 예를 들어서 알아 보겠습니다. 프로세서 A라는 녀석이 파일 I/O 를 처리 하기 위해 함수를 호출 하였습니다. I/O 관리자는 경로를 찾기 위해 오브젝트 관리자를 호출하여 해당 볼륨을 찾습니다. 그런 다음 I/O 관리자는 IRP를 생성하여 파일 시스템 드라이버를 호출합니다. 파일 시스템 드라이버는 캐싱 관리자를 호출하여 해당 파일이 캐싱 되어 있으면 시스템 버퍼에 메모리를 복사 하던지 맵핑 합니다 . 자 그럼 다시 돌아와서 프로세서 A는 그동안 무엇을 하고 있을까요? 비동기 프로시저 라는 의미는 파일 입출력 하..

디스패처 오브젝트 중 뮤텍스 오브젝트

뮤텍스 오브젝트는 공유 자원을 사용 하기 위해 경쟁 상태에 있는 스레드들의 동기화를 위한 방법을 제공 한다 . 뮤텍스 오브젝트는 하나의 스레드만이 주어진 시간에 공유 된 자원을 접근할수 있다고 하네요 ^^ 뮤텍스 와 스핀 록의 차이점으로는 1. 뮤텍스는 특정한 스레드 컨텍스트에서만 획득할수 있습니다. 즉 그말은 해제할때고 특정한 스레드 컨텍스트에서만 해제 할수 있다는 말이죠 ㅎㅎ 2. 뮤텍스 오브젝트에 대한 제어를 얻으면 커널은 발생할수 있는 데드록을 피하기 위해 특별한 커널 APC 이외에는 다른 어떤 APC도 전달 되지 않도록 처리합니다 3. 모든 뮤텍스는 뮤텍스 오브젝트를 사용하기 전에 현재 사용중인 뮤텍스 보다 더 낮은 레벨이어야 만 합니다 . 4. 뮤텍스 오브젝트는 획득 한 순서대로 정확히 해제 ..