永恒的蓝色梦想 发表于 2020-3-20 10:16:14

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

永恒的蓝色梦想 发表于 2020-3-20 11:09:09

自占沙发{:10_327:}
页: [1]
查看完整版本: Python 内置函数的可能的实现