2、Python 是弱类型?那是你还不会调教它

144 阅读2分钟

👀 你以为 Python 是“弱类型”,其实它只是灵活而有趣。 今天我们不讲概念,我们来玩点类型魔法


✅ 本文目标

  • 掌握 type()isinstance() 基本用法
  • 理解隐式类型转换 + 强制类型转换
  • 编写一个智能输入助手:用户输入啥都能处理

🧠 第一关:认识类型的本质

print(type("hello"))    # <class 'str'>
print(type(123))        # <class 'int'>
print(type(3.14))       # <class 'float'>
print(type(True))       # <class 'bool'>

还可以判断类型:

num = 42
print(isinstance(num, int))     # True
print(isinstance(num, str))     # False

🔧 第二关:类型转换的正确姿势

✅ 强制转换

age = "30"
age_int = int(age)
print(age_int + 1)   # 31
score = 98.5
print(str(score) + " 分")  # "98.5 分"

⚠️ 注意:不是所有字符串都能转数字!

print(int("abc"))  # ❌ ValueError

你需要做保护:

if "abc".isdigit():
    print(int("abc"))
else:
    print("不是数字,别转")

🧠 第三关:写一个智能输入助手

自动判断用户输入类型,转成 int/float/bool/str,返回统一结果

def smart_input(prompt):
    raw = input(prompt)
    
    if raw.isdigit():
        return int(raw)
    try:
        return float(raw)
    except ValueError:
        pass

    if raw.lower() in ["true", "false"]:
        return raw.lower() == "true"
    
    return raw  # 默认是字符串

💻 运行:

image.png


🔥 第四关:加点骚操作(输入识别日期)

from datetime import datetime

def smart_input_v2(prompt):
    raw = input(prompt)

    try:
        return int(raw)
    except:
        pass

    try:
        return float(raw)
    except:
        pass

    if raw.lower() in ['true', 'false']:
        return raw.lower() == 'true'

    try:
        return datetime.strptime(raw, "%Y-%m-%d")
    except:
        return raw

val = smart_input_v2("输入点啥试试:")
print(f"🧪 值:{val},类型:{type(val).__name__}")

🧪 运行结果:

image.png


💡 项目拓展方向

  • 添加对 JSON 格式的支持(尝试 json.loads
  • 返回值 + 类型封装成字典,方便后续处理
  • 封装为模块 from smart_input import get_input

🧠 总结

Python 的类型系统虽然不像 Java/C++ 那么严格,但它有非常清晰的动态强类型模型

下次再有人说「Python 是弱类型语言」,你可以用一句话回怼:

“不是弱,是灵活强大。”