Python 函数类型系统

  • Post category:Python

Python 作为一种动态类型语言,其函数类型系统则更加灵活和方便。在 Python 函数定义中,无需声明函数的参数类型、返回值类型,而是会在函数调用的运行时根据实际的数据类型来判断函数的正确性。

定义函数

定义一个函数需要使用关键字 def,后接函数名、括号内的参数列表和冒号。函数体中的内容缩进一个 Tab 或者四个空格。

可以定义函数所需的参数和其类型,例如:

def func_name(name: str, age: int) -> str:
    return f"My name is {name}. I'm {age} years old."

上述代码中,函数 func_name 有两个参数:nameage,类型分别为 strint。返回值的类型为 str

调用函数

在 Python 中调用函数时,可以按照函数定义时参数的顺序传递参数,也可以使用关键字来对应参数。例如:

result = func_name("Tom", 25)
print(result)

调用函数 func_name 时传递了两个参数,分别是 "Tom"25。最终的输出为 "My name is Tom. I'm 25 years old."

此外,在调用函数时还可以使用关键字参数的方式进行传递,这在函数参数比较多时可以提高代码的可读性。例如:

result = func_name(name="Jerry", age=30)
print(result)

使用关键字参数时,顺序可以与函数定义时的不同,只要参数的名称一致即可。最终的输出为 "My name is Jerry. I'm 30 years old."

函数参数

Python 的函数参数可以分为以下几种:

  • 位置参数 位置参数是最常用的一种参数,它们按照顺序进行传递。例如:

“`python
def func_name(name, age):
return f”My name is {name}. I’m {age} years old.”

result = func_name(“Tom”, 25)
print(result)
“`

输出结果为:My name is Tom. I'm 25 years old.

  • 默认参数 默认参数是一种特殊的位置参数,当调用函数时没有传入此参数时,函数将使用默认值。例如:

“`python
def func_name(name, age=25):
return f”My name is {name}. I’m {age} years old.”

result = func_name(“Tom”)
print(result)
“`

输出结果为:My name is Tom. I'm 25 years old.

  • 可变参数 可变参数允许您传递任意数量的参数。星号 * 用于表示可变参数。例如:

“`python
def func_name(*names):
return f”My friendships are {‘, ‘.join(names)}.”

result = func_name(“Tom”, “Jerry”, “Spike”)
print(result)
“`

输出结果为:My friendships are Tom, Jerry, Spike.

  • 关键字参数 关键字参数也是一种特殊的参数,它们按照名称进行传递。语法使用双星号 **。例如:

“`python
def func_name(**kwargs):
return f”Hi {kwargs[‘name’]}. You are {kwargs[‘age’]} years old.”

result = func_name(name=”Tom”, age=25)
print(result)
“`

输出结果为:Hi Tom. You are 25 years old.

返回值

Python 函数可以返回任意类型的值,包括标量、元组、列表、字典等。在函数的最后使用关键字 return 来返回一个值。例如:

def func_name(x, y):
    return x + y, x - y, x * y, x / y

result = func_name(10, 5)
print(result)

输出结果为 (15, 5, 50, 2.0)

示例说明

下面是一个示例说明:假设你要编写一个程序,可以将不同长度的名字拼接在一起并输出。

def concat_names(*names):
    return ' '.join(names)

result = concat_names('Tom', 'Jerry', 'Spike')
print(result)

输出结果为 Tom Jerry Spike

另一个示例是生成一个说出所有参数名称和类型的字符串的函数:

def print_args(*args, **kwargs):
    args_str = ", ".join(str(arg) for arg in args)
    kwargs_str = ", ".join(f"{k}={v}" for k, v in kwargs.items())
    return args_str + (f", {kwargs_str}" if kwargs_str else "")

result = print_args(1, 2, 'a', name='Tom', age=25)
print(result)

输出结果为 1, 2, a, name=Tom, age=25