기본 문법

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같은 애들도 내부적으로 다 클래스.













모듈


파이썬이 모듈을 참조하는 순서
  1. 같은 디렉터리
  2. 환경변수 PATH
  3. 파이썬 표준라이브러리 위치


소스는 인텔리제이 참조





파일 - 할까 말까 고민함
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/


python에 대한 이미지 검색결과




Share this

Related Posts

Previous
Next Post »