from typing import Any, Tuple


def 取首个重复成员(元组数据: Tuple[Any, ...]):
    """返回元组中首个被识别为重复的成员。

    功能说明:
        - 这个函数用于返回元组中首个被识别为重复的成员。
        - 常用于从元组中读取某个成员、某一段数据，或者计算出一个统计结果。
        - 如果当前数据不适合处理，函数会返回约定好的结果，方便新手直接判断这次是否成功取到值。

    说明:
        - 从左到右扫描，一旦某成员第二次出现，就返回该成员。

    Args:
        元组数据: 待统计的元组。

    Returns:
        找到时返回该成员；未找到或失败时返回 ``None``。
    """
    try:
        if not isinstance(元组数据, tuple):
            return None

        已见成员 = []
        for 元素 in 元组数据:
            if 元素 in 已见成员:
                return 元素
            已见成员.append(元素)
        return None
    except Exception:
        return None


if __name__ == "__main__":
    print("===== 示例1：基础首个重复成员 =====")
    数据 = (1, 2, 3, 2, 4, 1)
    print("结果:", 取首个重复成员(数据))

    print("\n===== 示例2：重复成员出现在更后面 =====")
    数据 = ("a", "b", "c", "d", "b")
    print("结果:", 取首个重复成员(数据))

    print("\n===== 示例3：没有重复 =====")
    数据 = (1, 2, 3)
    print("结果:", 取首个重复成员(数据))

    print("\n===== 示例4：空元组 =====")
    数据 = ()
    print("结果:", 取首个重复成员(数据))

    print("\n===== 示例5：包含不可哈希成员 =====")
    数据 = ([1], [2], [1], [3])
    print("结果:", 取首个重复成员(数据))

    print("\n===== 示例6：应用场景-找出首个重复扫码结果 =====")
    扫码记录 = ("SN001", "SN002", "SN003", "SN002", "SN004")
    print("结果:", 取首个重复成员(扫码记录))



