Python 内置函数的可能的实现
本帖最后由 永恒的蓝色梦想 于 2020-3-20 11:16 编辑这里为大家带来楼主写的内置函数的可能的实现{:10_327:} 如果各位鱼油有问题或意见,欢迎在评论区留言~
abs() 函数def abs(x,/):
try:
return x if x>0 else -x
except:
raise TypeError(f"bad operand type for abs(): '{type(x).__name__}'")
all() 函数def all(iterable,/):
for i in iterable:
if not i:
return False
return True
any() 函数def any(iterable):
for i in iterable:
if i:
return True
return False
callable() 函数def callable(cls):
return hasattr(cls,'__call__')
divmod() 函数def divmod(a,b):
try:
if (res:=a.__divmod__(b)) is not NotImplemented:
return res
except:
pass
try:
if (res:=b.__rdivmod__(a)) is not NotImplemented:
return res
except:
raise TypeError(f"unsupported operand type(s) for divmod(): '{type(a).__name__}' and '{type(b).__name__}'")
issubclass() 函数def issubclass(cls,class_or_tuple,/):
if tuple in class_or_tuple.__mro__:
for i in class_or_tuple:
if i in cls.__mro__:
return True
return False
elif type in class_or_tuple.__mro__:
return class_or_tuple in cls.__mro__
else:
raise TypeError("issubclass() arg 2 must be a class or tuple of classes")
isinstance() 函数def isinstance(obj,class_or_tuple,/):
try:
return issubclass(type(obj),class_or_tuple)
except TypeError:
raise TypeError("isinstance() arg 2 must be a type or tuple of types")
enumerate() 函数def enumerate(iterable,start=0):
for i in iterable:
yield start,i
start+=1
filter() 函数def filter(function, iterable,/):
if function is None:
for i in iterable:
if i:
yield i
else:
for i in iterable:
if function(i):
yield i
print() 函数def print(*values,sep=None,end=None,file=None,flush=False):
if sep is None:
sep=' '
elif not isinstance(sep,str):
raise TypeError(f'sep must be None or a string, not {type(sep).__name__}')
if end is None:
end='
'
elif not isinstance(end,str):
raise TypeError(f'end must be None or a string, not {type(end).__name__}')
if file is None:
from sys import stdout as file
file.write(sep.join((str(i) for i in values))+end)
if flush:
file.flush()
map() 函数class map:
def __init__(self,func,/,*iterables):
if iterables:
self.__func=func
self.__iterators=tuple((iter(i) for i in iterables))
else:
raise TypeError("map() must have at least two arguments.")
def __reduce__(self):
return self.__class__,self.__iterators
def __iter__(self):
return self
def __next__(self):
return self.__func(*(next(i) for i in self.__iterators))
max() 函数def max(iterable,/,*vars,key=None,default=None):
if vars:
if default is not None:
raise TypeError("Cannot specify a default for max() with multiple positional arguments")
greatest=iterable
flag=key(greatest)
else:
iterator=iter(iterable)
if default is None:
try:
greatest=next(iterator)
except StopIteration:
raise ValueError("max() arg is an empty sequence")
else:
greatest=default
if key is None:
for var in vars:
if var>greatest:
greatest=var
return greatest
else:
flag=key(greatest)
for var in vars:
if (k:=key(var))>flag:
flag=k
greatest=var
return greatest
min() 函数def min(iterable,/,*vars,key=None,default=None):
if vars:
if default is not None:
raise TypeError("Cannot specify a default for min() with multiple positional arguments")
least=iterable
flag=key(least)
else:
iterator=iter(iterable)
if default is None:
try:
least=next(iterator)
except StopIteration:
raise ValueError("min() arg is an empty sequence")
else:
least=default
if key is None:
for var in vars:
if var<least:
least=var
return least
else:
flag=key(least)
for var in vars:
if (k:=key(var))<flag:
flag=k
least=var
return leastpow() 函数def pow(base,exp,mod=None):
if mod is None:
return base**exp
elif isinstance(base,int) and isinstance(exp,int) and isinstance(mod,int):
res=1
base%=mod
while exp:
if exp&1:
res=res*base%mod
base=base**2%mod
exp>>=1
else:
raise TypeError("pow() 3rd argument not allowed unless all arguments are integers")zip() 函数class zip:
def __init__(self,*iterables):
self.__iterators=tuple((iter(i) for i in iterables))
def __iter__(self):
return self
def __next__(self):
return tuple((next(i) for i in self.__iterators))
def __reduce__(self):
return self.__class__,self.__iterators 自占沙发{:10_327:}
页:
[1]