函数参数类型声明失效?为何字符串拼接未返回'12'?
嘿,这俩问题本质上都和Python的**类型提示(Type Hints)**机制有关,我给你唠明白:
1. 函数参数的数据类型声明为何不起作用?
Python是一门动态类型语言,你写在参数后面的: str只是类型注解,不是强制的类型约束。也就是说:
- 它的作用是给开发者自己、IDE(比如PyCharm)或者静态类型检查工具(比如mypy)看的,用来提升代码可读性和提前发现潜在类型问题;
- Python解释器在运行代码的时候,完全不会管这个类型注解,你传什么类型的参数进去它都照收不误,不会自动做类型转换,也不会报错(除非代码逻辑本身因为类型不匹配出错)。
2. 为何以下代码未返回'12'?
先看你给出的代码:
def foo(a:str, b:str): print(a+b) foo(1,2)
输出3而不是'12'的原因很直接:
- 你给参数声明了
str类型,但实际传入的是整数类型的1和2,Python运行时不会因为你写了: str就自动把整数转成字符串; +运算符的行为是由操作数的类型决定的:对整数来说就是加法,对字符串来说才是拼接。所以这里两个int相加,结果自然是3。
如果想得到预期的'12',有两种办法:
- 传入字符串类型的参数:
foo('1', '2'); - 在函数内部显式转换类型,比如把参数转成字符串后再拼接:
def foo(a:str, b:str): print(str(a) + str(b)) foo(1,2) # 现在会输出'12'
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

