2018년 2월 27일 화요일

파이썬 요약

Pythonにおけるタブ補完について正しいものを選択肢から選びなさい。
正解: 変数とモジュール名の補完はインタープリタの起動時に自動で有効になっており、[Tab]キーで補完機能が呼び出せる。


-여러 줄로 된 문자열(multiline string) ''' or """
-입력은 이런게 가능
a = int(input('첫 번째 숫자를 입력하세요: '))    # int를 사용하여 입력 값을 정수로 변환
b = int(input('두 번째 숫자를 입력하세요: '))    # int를 사용하여 입력 값을 정수로 변환

print(a + b)
-한번에 두개 입력받기
변수1, 변수2 = input(문자열).split(기준문자)
-이런걸 맵으로 하면 이쁘다
a, b = map(int, input('숫자 두 개를 입력하세요: ').split())
-출력시 가운데 문자 붙임
print(1, 2, 3, sep=', ') , end='' 는 그냥 뒤에 붙여줘,
-몫과 나머지 한번에
quotient, remainder = divmod(5, 2)
-모듈 이름 지정
import 모듈 as 새이름
-모듈의 일부만
from 모듈 import 변수
from math import sqrt
from math import sqrt as s
from 패키지.모듈 import 변수 as 새이름, 함수 as 새이름, 클래스 as 새이름
 from urllib.request import Request as r, urlopen as u
-모듈해제
del math
-모듈 다시가져오기
importlib.reload(math)
- python에 -m 옵션을 지정해서 pip를 실행할 수도 있습니다. -m 옵션은 모듈을 실행하는 옵션이며 pip도 모듈입니다.
インタープリンタを起動時のオプション「-m」の説明として適切なものを選びなさい。正解: モジュールの指定を行う。
sudo pip install requests 또는
python -m pip install requests
-리스트에 추가하기 팁
>>> a = [0, 0, 0, 0, 0]
>>> b = a
>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
a is b
list( for 변수1 in 리스트1 if 조건식1 
        for 변수2 in 리스트2 if 조건식2
         ...
        for 변수n in 리스트n if 조건식n)
a = [i * j for j in range(2, 10) for i in range(1, 10)] 구구단
>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]
>>> x = {'a': 10, 'a': 20, 'c': 30, 'd': 40, 'e': 50}
>>> x['a']    # 키가 중복되면 가장 뒤에 있는 값만 사용함
20
>>> x    # 중복되는 키는 저장되지 않음
{'a': 20, 'c': 30, 'd': 40, 'e': 50}
단, 키에는 리스트와 딕셔너리를 사용할 수 없습니다.
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.popitem()
('d', 40)
>>> x
{'a': 10, 'b': 20, 'c': 30}
popitem()은 딕셔너리에서 임의의 키-값 쌍을 삭제합니다(파이썬 3.6 이상에서는 맨 뒤에 있는 값을 삭제합니다). 그리고 삭제된 키-값 쌍을 튜플로 반환합니다.
x = {key: value for key, value in dict.fromkeys(keys).items()}
  • 딕셔너리[키][키] = 값 처럼 딕안에 딕도가능
  • 세트는 리스트나 딕셔너리와 달리 세트 안에서 세트를 사용할 수 없습니다.
>>> a = {1, 2, 3, 4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
add(요소)는 세트에 요소(값)를 추가합니다.remove(요소)는 세트에서 특정 요소(값)를 삭제하고 요소가 없으면 에러를 발생시킵니다.discard(요소)는 세트에서 특정 요소(값)를 삭제하고 요소가 없으면 그냥 넘어갑니다. 다음은 세트 a에 3이 있으므로 3을 삭제하고, 5는 없으므로 그냥 넘어갑니다.pop()은 세트에서 임의의 요소(값)를 삭제하고 해당 요소를 반환합니다. 만약 요소가 없으면 에러를 발생시킵니다.
>>> a = {i for i in 'pineapple' if i not in 'apl'}
>>> a
{'e', 'i', 'n'}
import pickle
 
name = 'james'
age = 17
address = '서울시 서초구 반포동'
scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}
 
with open('james.p', 'wb') as file:    # hello.txt 파일을 바이너리 쓰기 모드(rb)로 열기
    pickle.dump(name, file)
    pickle.dump(age, file)
    pickle.dump(address, file)
    pickle.dump(scores, file)

파이썬 객체를 파일에 저장할 때는 pickle 모듈의 dump를 사용합니다.

>>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(*x)
이름:  name
나이:  age
주소:  address

즉, 딕셔너리를 한 번 언패킹하면 키를 사용한다는 뜻이 됩니다. 따라서 **처럼 딕셔너리를 두 번 언패킹하여 값을 사용하도록 만듭니다
>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**x)
이름:  홍길동
나이:  30
주소:  서울시 용산구 이촌동
이때는 a.copy()  해서 해결
b = list() 또는 b = []
>>> a = [1, 2, 3]
>>> a[len(a):] = [10, 20]
>>> a
[1, 2, 3, 10]
-for 인덱스 , 값 in enumerate(리스트)
>>> a = [38, 21, 53, 62, 19]
>>> for index, value in enumerate(a):
...     print(index, value)
0 38
1 21
-a.sort(reverse=True)
- b = list(i for i in range(10))    # 0부터 9까지 숫자를 생성하여 리스트 생성
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-d = [i * 2 for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
-b = [i + 5 for i in range(10) if i % 2 == 1]    # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성
[6, 8, 10, 12, 14]
-a = list(map(str, range(10)))
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
-문자열과 반복문
>>> for i in 'Hello':
...     print(i, end=' ')
...
H e l l o
-람다
lambda 매개변수1, 매개변수2: 반환값
>>> list(map(lambda x: x + 10, [1, 2, 3]))
[11, 12, 13]
>>> f = lambda x: x + 10
>>> list(map(f, [1, 2, 3]))
[11, 12, 13]
-람다예제2
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: str(x) if x % 3 == 0 else x, a))
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]

-클래스 사용하기
class 클래스이름:
    def 메서드(self):
        코드
>>> class Person:
...     def greeting(self):
...         print('Hello')
...
james = Person()
james.greeting()    # 안녕하세요.
-비공개 속성은 __속성과 같이 이름이 __(밑줄 두 개)로 시작해야 합니다. 단, __속성__처럼 밑줄 두 개가 양 옆에 왔을 때는 비공개 속성이 아니므로 주의해야 합니다.
-속성뿐만 아니라 메서드도 이름이 __(밑줄 두 개)로 시작하면 클래스 안에서만 호출할 수 있는 비공개 메서드가 됩니다.
-추상클래스
from abc import *

class 추상클래스이름(metaclass=ABCMeta):
    @abstractmethod
    def 메서드이름(self):
        코드
-제네레이터 yeild
def number_generator():
    yield 0
    yield 1
    yield 2

for i in number_generator():
    print(i)

** fizz buz
print('Fizz' * (i % 3 == 0) + 'Buzz' * (i % 5 == 0) or i)

0 comments:

댓글 쓰기