Вы хотите проверить, является ли ваш первый элемент списком или кортежем, подобным этому:
(вам нужно проверить экземпляр, в случае, если пользователь просто использует одно целое, например, ваш код потерпит неудачу)
def for_each(func, *args):
if len(args) == 1 and (isinstance(args[0], tuple) or isinstance(args[0], list)): # You can even check on Iterable by importing collections.abc.Iterable
args = args[0]
for arg in args:
func(arg)
Однако вы можете пойти дальше и позволить пользователю вводить несколько Iterable
, а не только кортежи или списки, например:
from collections.abc import Iterable
from itertools import chain
def do_something(arg):
print("done", arg)
def for_each(func, *args):
if all(map(lambda x: isinstance(x, Iterable), args)) and not any(map(lambda x: isinstance(x, str), args)):
args = chain(*args)
for arg in args:
func(arg)
for_each(do_something, [0, 1], [0, 2])