std 입력
a= input(“insert : ”);
std 출력
a=1;
b=2;
c=3;
print("a: " + str(a) + " b: "+ str(b) + " c: " + str(c)); # 자바형식
print("a: %d b: %d c: %d" % (a,b,c)); # C형식
print("a: {0} b: {1} c: {2}".format(a,b,c)); # 스트링 포맷
print("a: {x} b: {y} c: {z}".format(z=c,y=b,x=a));
print("a: {x:02d} b: {y:02.2f} c:{z:02d}".format(x=a,y=b,z=c));
자료형 - 자잘한건 건너뛰겠다!!
리스트
mylist=[1,"2",3.03]; # 형이 없다
print(mylist);
mylist.append([4,5,6]); # 형이 없어서 컨테이너도 넣는다
print(mylist);
자바스크립트와 비슷한 특징 , 나머지api는 다른 언어와 비슷함 , insert,delete, index등등
세트
a = {1,2,3};
b = {3,4,5,6};
print(a.union(b));
print(a.intersection(b));
print(a-b);
print(b-a);
print(a|b);
print(a&b);
튜플
t = (1,2,3)
print(t);
print(t*3);
print(t[0:2]);
사용법은 리스트와 같지만 리드온리 자료형, 속도는 당연히 더 빠름
사전
d = dict(a=1,b=2,c=3);
d1 = {'a':1,'c':3,'b':2};
print(d);
print(d1);
for k,v in d.items(): # keys(), values()
print(k,v);
자료형 데이터 조작을 할때 유의할점은 다 레퍼런스카피가 이루어진다. 그래서 아래와같은 함수를 사용하거나 직접 값을 대입해서 넣어주어야한다.
#!/usr/bin/python
import copy
a = [1,2,3];
b= a;
print(id(a),id(b));
b = copy.deepcopy(a)
print(id(a),id(b));
제어
if
# 직관적으로 범위를 줄수가 있다
a=5;
if 1 < a <= 10:
print("1~10");
elif 10 < a <= 20:
print("10~20");
else:
print("else");
money = 10;
item = "apple" if money > 100 else "banana"; ## 삼항 연산자를 이렇게 쓴다
print(item);
for
for n in [2,3,4,5,6,7,8,9]:
print("-- {}단 --".format(n));
for i in [1,2,3,4,5,6,7,8,9]:
print("{} * {} = {}".format(n,i,n*i));
---
for i in [1,2,3]:
if i==4:
break;
else:
print("no break"); #for 문이 break를 거치지 않고 정상 종료된경우 출력
---
range - 수열튜플을 생성한다.
for i in range(10,20,3):
print(i);
함수
def test(a=10,b=20):
return a;
print(test());
-----
a=0;
def test():
a=10; ## 전역변수에 값이 할당되지 않는다. 전역변수를 사용하고 싶다면 global 키워드 사용
return a;
print(test());
---
def test(a,b):
print("a={} , b={}".format(a,b));
test(b=111,a=222); ## 순서를 바꿔도 이름으로 지정을 할수 있다.
---
def test(*args): # 가변인자
for i in args:
print(i);
test(1,2,3,3,4,5,5,6,7,8,89,9);
------
def test(test , **args): # 가변인자를 맵으로 만들어서 쓸수 있는데 이건 왜 필요한지 모르겠군
print(test);
for k,v in args.items():
print("key={} value={}".format(k,v));
test("test", id="aaa",pw="123123",age="ewrerwe");
--------
def test():
pass ## 아무것도 안한다는데 정말 왜있는지 모르겠군 문법을 : 으로 만들어서 이딴게 필요한게 아닌가 싶다
클래스
클래스 변수 , self 변수
#!/usr/bin/python
class Test:
a="test"
print("Test.a = " + Test.a);
aa = Test();
aa.a = "AAAAA"
print("aa.a = "+ aa.a);
Test.a = "ttttt";
print("Test.a = " + Test.a);
print("aa.a = " + aa.a);
bb = Test();
bb.a ="BBBBB";
print("aa.a = " + aa.a);
print("bb.a = " + bb.a);
print("Test.a = " + Test.a);
Test.a = "RRRRR"
print("aa.a = " + aa.a);
print("bb.a = " + bb.a);
print("Test.a = " + Test.a);
cc = Test();
cc.a = "CCCCC";
Test.a = "ZZZZZ";
print("aa.a = " + aa.a);
print("bb.a = " + bb.a);
print("cc.a = " + cc.a)
print("Test.a = " + Test.a);
print("Test.a : " + str(id(Test.a)) + " aa.a : " + str(id(aa.a)) + " bb.a : " + str(id(bb.a)) + " cc.a: " + str(id(cc.a)) + " ") ;
self 변수를 지정하지 않으면 내부적으로 클래스 변수를 사용하게 된다. 잡스크립트와 유사
객체를 생성하여 클래스변수와 같은 변수에 값을 할당하게 된다면 그 시점에서 객체변수가 만들어지게 된다.
생성시점은 값을 대입하는 순간 자동으로 만들어지기때문에 문제가 없지만 사용할때 변수가 없다면 에러~~
어지간하면 동적으로 변수를 만들기보다는 미리 변수를 할당시켜놓고 사용하는게 뒤탈이 없을것 같다.
--------
class test:
def __init__(self):
print("생성자");
def __del__(self):
print("소멸자");
def testtest():
t = test();
testtest();
--------------
class TTT:
def __init__(self):
print("생성자");
def __del__(self):
print("소멸자");
def print(self):
print("멤버 함수");
def staticPrint():
print("스태틱 함수");
TTTTTT = staticmethod(staticPrint);
## 스태틱함수이기 때문에 객체로 호출하면 오류가 나네 , 오류가 안나게 하려면 staticmethod() 시발 근데 병신같이 이름을 또 새로 줘야함
def classPrint(cls): # 병신개새끼가 필수도 아니고 암묵적으로 받는단다
print("클래스 함수");
CCCCC = classmethod(classPrint);
#찾아보니 위에처럼 병신처럼 안써도 아래같이 쓰면 됨
@staticmethod
def staticDecorator():
print("Fuck static");
@classmethod
def classDecofator(cls):
print("Fuck class");
def testtest():
t = TTT();
return t;
t = testtest();
t.print();
t.TTTTTT();
#TTT.classPrint(TTT); ## 여기서 병신처럼 클래스를 넣어줘야함 안넣어줄라믄 classmethod사용
TTT.CCCCC
t.staticDecorator();
t.classDecofator();
---------
#연산자 중복정의
class Myint:
def __init__(self):
self.number = 0;
def __init__(self,number):
self.number = number;
def __add__(self, other):
return Myint(self.number + other.number);
def print(self):
print(self.number);
a = Myint(10);
b = Myint(20);
a.print();
b.print();
c = a+b;
c.print();
http://blog.eairship.kr/287 연산자 중복 정의를 할수 있는 애들
------
상속
class Super:
def __init__(self):
pass
def print(self):
print("super");
class Impl(Super):
def __init__(self):
Super.__init__(self);
def print(self):
print("impl");
i = Impl();
s = Super();
i.print();
s.print();
print(isinstance(i,Super));
print(isinstance(s,object));
print(isinstance(10,object))
# 다른 객체지향 언어와 같이 모든 객체는 object를 상속받음, 근데 파이썬이 워낙 병신가타서 3버전부터임, 이걸보면 설계가 얼마나 병신가티되어있었는지 알수 있을거 같다. 참고로 정수 10같은 애들도 내부적으로 다 클래스.
모듈
파이썬이 모듈을 참조하는 순서
- 같은 디렉터리
- 환경변수 PATH
- 파이썬 표준라이브러리 위치
소스는 인텔리제이 참조
파일 - 할까 말까 고민함
f = open("test.txt","w"); ## b : binary , a : append
f.write("a;sidfhjpoaisjdfo;ihas;dfiads");
f.close();
r = open("test.txt","r");
lines = r.readlines()
for line in lines:
print(line)
r.close();
예제 다운 : https://github.com/huiDragon81/PythonNetworkTest/