perf_counter()
and process_time()
- https://stackoverflow.com/q/25785243/10103236
char.isdigit()
char.isupper()
char.islower()
print(float(''.join(filter(str.isdigit, x))))
Extract number from a string
SomeStr.endswith(('multiple', 'suffixes'))
Lista = [1,1,2,2,1,1]
a.count(1)
>>> 4
PEP 448 – Additional Unpacking Generalizations
* iterable unpacking operator
** dictionary unpacking operators
The unary ~ (invert) operator yields the bitwise inversion of its integer argument.
>>> print(*[1], *[2], 3)
1 2 3
>>> dict(**{'x': 1}, y=2, **{'z': 3})
{'x': 1, 'y': 2, 'z': 3}
>>> for i in a:
... if a[i] == 1:
... del a[i]
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
당연하게도 iteration 중에는 iteration 대상인 dictionary 변경이 불가하다. 다른 대상은 가능한 것 같다.
https://stackoverflow.com/a/1669524
가상 환경의 장점은
sudo apt update
sudo apt install python3.<version> python3.<version>-venv
가상환경 생성python3.<version> -m venv ~/<venv_dir_name>
을 이용해서 가상환경을 생성할 수 있다.
예로 python3.7을 사용해 가상환경을 생성 한다고 하면
python3.7 -m venv ~/venv_py37
으로 실행
가상환경 이용source ~/<venv_dir_name>/bin/activate
을 통해 가상환경을 활성화 할 수 있다.
아까의 예를 사용한다면
source ~/venv_py37/bin/activate
를 통해 가능하다.
가상환경 상에서pip --version ; python --version
을 확인하면 설정했던 python version으로 실행이 된다.
가상환경을 좀 더 편히 사용하기 위해 ~/.bashrc에alias <nickname>='source /home/yongbeom/venv_py37/bin/activate'
를 추가한다. 그리고source ~/.bashrc
로 .bashrc 를 현재 환경에 업데이트 한 후,<nickname>
을 사용하면 쉽게 가상환경을 사용할 수 있다.
가상환경 탈출(?)
가상환경을 벋어나고자 한다면 deactivate
를 command 창에 치면 나갈 수 있다.
class Color:
PURPLE = '\033[95m'
CYAN = '\033[96m'
DARKCYAN = '\033[36m'
BLUE = '\033[94m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
END = '\033[0m'
print(f'{Color.BOLD}Hello World !{Color.END}')
>>> import re
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
# Will be splitting on: , <space> - ! ? :
>>> filter(None, re.split("[, \-!?:]+", "Hey, you - what are you doing here!?"))
['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']
기본적인 사용법:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()
name or flags
- 옵션 문자열의 이름이나 리스트, 예를 들어 foo 또는 -f, –foo.action
- 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.nargs
- 소비되어야 하는 명령행 인자의 수.const
- 일부 action 및 nargs 를 선택할 때 필요한 상숫값.default
- 인자가 명령행에 없는 경우 생성되는 값.type
- 명령행 인자가 변환되어야 할 형.choices
- 인자로 허용되는 값의 컨테이너.required
- 명령행 옵션을 생략 할 수 있는지 아닌지 (선택적일 때만).help
- 인자가 하는 일에 대한 간단한 설명.metavar
- 사용 메시지에 사용되는 인자의 이름.dest
- parse_args() 가 반환하는 객체에 추가될 어트리뷰트의 이름.
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
충돌하는 옵션은 그룹으로 묶어 사용한다.
dest
선택 인자 액션의 경우, dest
의 값은 보통 옵션 문자열에서 유추됩니다. ArgumentParser 는 첫 번째 긴 옵션 문자열을 취하고 앞의 --
문자열을 제거하여 dest
의 값을 만듭니다. 긴 옵션 문자열이 제공되지 않았다면 dest
는 첫 번째 짧은 옵션 문자열에서 앞의 -
문자를 제거하여 만듭니다. 문자열이 항상 유효한 어트리뷰트 이름이 되도록 만들기 위해 중간에 나오는 -
문자는 _
문자로 변환됩니다. 아래 예제는 이 동작을 보여줍니다.
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-f', '--foo-bar', '--foo')
>>> parser.add_argument('-x', '-y')
>>> parser.parse_args('-f 1 -x 2'.split())
Namespace(foo_bar='1', x='2')
>>> parser.parse_args('--foo 1 -y 2'.split())
Namespace(foo_bar='1', x='2')
DataFrame.sort_values(self, by, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’)
Sort by the values along either axis.
>>> df.sort_values(by='col1', ascending=False, na_position='first')
col1 col2 col3
3 NaN 8 4
4 D 7 2
5 C 4 3
2 B 9 9
0 A 2 0
1 A 1 1
ascending: 오르는, 상승하는 (ant. descending)
# timer.py
import time
class TimerError(Exception):
"""A custom exception used to report errors in use of Timer class"""
class Timer:
def __init__(self):
self._start_time = None
def start(self):
"""Start a new timer"""
if self._start_time is not None:
raise TimerError(f"Timer is running. Use .stop() to stop it")
self._start_time = time.perf_counter()
def stop(self):
"""Stop the timer, and report the elapsed time"""
if self._start_time is None:
raise TimerError(f"Timer is not running. Use .start() to start it")
elapsed_time = time.perf_counter() - self._start_time
self._start_time = None
print(f"Elapsed time: {elapsed_time:0.4f} seconds")