【python】函数调用

函数

方法:

def func_name(param1, param2){
    # 执行语句...
    return val
}
# 调用函数
func_name(param1 = p1, param2 = p2)
func_name(param2 = p2, param1 = p1)

参数:

参数 描述
def 定义函数所使用的关键字,所有的函数前面都必须使用该关键字。
func_name 函数的名称。
param1 函数的形参1。
param2 函数的形参2,函数可以有任意多个形参。
return 后面接函数的返回值,函数的返回值只能有一个,可以是任意的数据类型。

 

1.例如

#def sub(a, b):
#    return a - b
def sub(a: int, b: int): #实参:四餐类型
    return a - b
ret = sub(a = 1024, b = 512)
print("sub =", ret)
ret = sub(b = 512, a = 1024)
print("sub =", ret)

 

值传递与引用传递

在python中, 根据函数的参数 的数据类型不同,可以将函数参数的传递方式分为按值传递和引用传递。如果实参的类型为不可变类型,比如 字符串、数字 和 元组 等,那么参数的传递方式就是按值传递,如果实参的类型为可变类型,比如列表 和 字典 等,那么参数的传递方式就是按引用传递。

数据类型 传递方式
字符串 值传递
数字 值传递
元组 值传递
列表 引用传递
字典 引用传递

 

 

函数注解

语法:

def func(param1:param1 note, param2:param2 note=default val)->return val note:
    pass

参数:

参数 描述
param1 形参1。
param1 note 形参1 的注解。
param2 形参2。
param2 note 形参2 的注解。
default val 形参2的默认值。
val note 返回值的注解。

说明

我们定义了一个带函数注解的函数 func,该函数接受两个参数,第一个参数为 param1,第二个参数为 param2,返回一个返回值。

其中 param1 note 是对参数 param1 的说明信息,param2 note 是对参数 param2 的说明信息,default val 是参数 param2 的默认值。

return val note 是对该函数返回的值的说明信息。

 

获取函数注解信息详解

print(func_name.__annotations__)

参数

参数 描述
func_name 需要获取注解信息的函数。

说明

我们使用 func_name.__annotations__ 语句可以获取函数名为 func_name 的注解信息。

 

def my_sum(num1:'开始的数', num2:'结束的数'=100)->'开始数到结束数所有数的和':
    res = 0
    for i in range(num1, num2+1):
        res = res + i
    return res
sum_res = my_sum(1, 50)
print("sum_res =", sum_res)
sum_res = my_sum(1)
print("sum_res =", sum_res)
print(my_sum.__annotations__)

输出:

sum_res = 1275
sum_res = 5050
{'num1': '开始的数', 'num2': '结束的数', 'return': '开始数到结束数所有数的和'}

 

局部函数

在大多数编程语言中,函数 的定义一般只能在 全局作用域,即定义的函数都是全局函数,而在 Python 中,函数不仅可以定义在全局作用域,还可以在函数内部定义函数。在函数内部定义的函数,被称为局部函数,局部函数对外部是隐藏的,局部函数只能包含该函数的函数体内调用。

1. 例子:

def print_info():
    def print_start():
        print("====Start======")
    def print_end():
        print("====End======")
    print_start()
    print("Site:HaiCoder, Module:Python")
    print_end()

# 在函数内部定义并调用函数
print_info()

输出:

====Start======
Site:HaiCoder, Module:Python
====End======

 

2. 例子:


def num_handle(t, num1, num2):
    def add(num1, num2):
        return num1 + num2
    def sub(num1, num2):
        return num1 - num2
    def mul(num1, num2):
        return num1 * num2
    if t == "add":
        return add(num1, num2)
    if t == "sub":
        return sub(num1, num2)
    if t == "mul":
        return mul(num1, num2)

# 在函数内部定义并调用函数
add_result = num_handle("add", 10, 20)
print("add_result =", add_result)
sub_result = num_handle("sub", 10, 20)
print("sub_result =", sub_result)
mul_result = num_handle("mul", 10, 20)
print("mul_result =", mul_result)

输出:

add_result = 30
sub_result = -10
mul_result = 200

 

def func(d):
    d.a = 2
    d.b = 3


class test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

def funcb():
    d = test(1, 2) # 1
    func(d)                   # 2
    print(d.a)
    print(d.b)

funcb()

 

 

class test01(object):
    def __init__(self, a):
        self.a = a

class test02(object):
    def __init__(self, b):
        self.b = b


class test03(object):
    def __init__(self, test01, test02):
        self.test01 = test01
        self.test02 = test02

    def update(self):
        self.test01.a = 3
        self.test02.b = 5

def func():
    test1 = test01(1)
    test2 = test02(2)

    test3 = test03(test1, test2)
    test3.update()

    print(test1.a)
    print("==")
    print(test2.b)
    print("==")
    print(test3.test01.a)
    print("==")
    print(test3.test02.b)

func()

 

posted @ 2023-06-06 19:02  苏格拉底的落泪  阅读(31)  评论(0编辑  收藏  举报