Skip to content

Instantly share code, notes, and snippets.

View FuruNov's full-sized avatar

Takanobu Furuhashi (古橋 敬信) FuruNov

View GitHub Profile
/*-- scss:defaults --*/
@import url(https://fonts.googleapis.com/css?family=Josefin+Sans&display=swap);
@import url(https://fonts.googleapis.com/css?family=Fira+Mono&display=swap);
@import url(https://fonts.googleapis.com/css?family=Zen+Kaku+Gothic+Antique:500&display=swap);
@import url(https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@500&display=swap);
// fonts
$font-family-sans-serif: "Noto Sans JP", "Zen Kaku Gothic Antique", sans-serif !default;
$font-family-monospace: "Fira Mono", monospace !default;
@FuruNov
FuruNov / curry.py
Created March 29, 2023 12:39
カリー化するデコレータ
def curry(func):
def curried(*args):
if len(args) == func.__code__.co_argcount:
return func(*args)
return lambda x: curried(*args, x)
return curried
@curry
@FuruNov
FuruNov / flip.py
Created March 29, 2023 11:53
関数の引数を入れ替える Python 関数
import functools
def flip(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
new_args = args[::-1]
return func(*new_args, **kwargs)
return wrapper
@FuruNov
FuruNov / apply_decorators_to_functions.py
Created March 27, 2023 23:25
複数の関数へ一括に複数のデコレータを適用する Python プログラム
from functools import wraps
def decorator1(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Decorator 1")
return func(*args, **kwargs)
return wrapper
def decorator2(func):
@FuruNov
FuruNov / no_reassign.py
Created March 27, 2023 22:50
関数の指定した引数への再代入を禁止する Python プログラム
def no_reassign(*arg_names):
def decorator(func):
def wrapper(*args, **kwargs):
original_args = args # 引数をコピーしておく
result = func(*args, **kwargs) # 関数を実行する
# 指定した引数が変更された場合に例外を発生させる
for i, arg_name in enumerate(arg_names):
arg_value = kwargs.get(arg_name, args[i])
if arg_value != original_args[i]:
raise TypeError("cannot reassign argument '{}'".format(arg_name))
@FuruNov
FuruNov / constantSpace.py
Created March 27, 2023 00:32
定数を管理する Python クラス
class ConstantSpace:
def __init__(self, **kwargs):
# ユーザーが指定した値を格納する辞書
self._data = kwargs
def __setattr__(self, name, value):
# 既存の属性を変更しようとした場合はエラーを発生させる
if name in self._data:
raise AttributeError(f"'ConstantSpace' object attribute '{name}' is read-only")
# 新しい属性を追加しようとした場合はエラーを発生させる
@FuruNov
FuruNov / infix_with_symbol.py
Last active March 26, 2023 23:34
中置演算子を擬似的に定義する Python プログラム
class Infix:
def __init__(self, func):
self.func = func
def __ror__(self, other):
return Infix(lambda x: self.func(other, x))
def __or__(self, other):
return self.func(other)
@FuruNov
FuruNov / log_args.py
Last active March 25, 2023 10:43
関数の呼び出しに用いた引数をロギングする Python プログラム
import inspect
def log_arguments(func):
def wrapper(*args, **kwargs):
signature = inspect.signature(func)
bound_arguments = signature.bind(*args, **kwargs)
bound_arguments.apply_defaults()
args_list = []
for name, value in bound_arguments.arguments.items():
arg_type = (
@FuruNov
FuruNov / flip.py
Last active March 25, 2023 10:27
関数の引数を逆順にして新しい関数を作成する関数
import functools
def flip(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
new_args = args[::-1]
return func(*new_args, **kwargs)
return wrapper
@FuruNov
FuruNov / compose.py
Created March 25, 2023 09:50
引数に取った関数の合成関数を返す関数
def compose(*functions):
def inner(arg):
for function in reversed(functions):
arg = function(arg)
return arg
return inner
def add2(x):
return x + 2