学堂 学堂 学堂公众号手机端

Python:函数

lewis 6年前 (2019-07-10) 阅读数 8 #技术
函数

执行特定任务以完成特定功能的一段代码

函数的意义代码复用异常实现细节提高可维护性提高可读性、便于调试函数的创建调用创建方法
def 函数名 ([入参]):
    函数体
    [return xxx]
调用方法
函数名([实际参数])
示例
def add(a, b):
    return a + b


res = add(10, 20)
print(res)  # 30
函数的参数传递位置实参根据形参的位置进行实参传递,位置对应
def add(a, b):  # a,b为形参,在函数的定义处
    return a + b


res = add(10, 20)  # 10,20为实参,在函数的调用处
print(res)  # 30
关键字实参根据形参的名称进行实参传递
def add(a, b):  # a,b为形参,在函数的定义处
    return a + b


res = add(b=10, a=20)  # 10,20为实参,在函数的调用处
print(res)  # 30
函数调用时的参数转化列表元素转化为位置实参时,使用 *
字典元素转化为关键字实参时,使用 **
def fun(a, b, c):
    print('a =', a, end='\t')
    print('b =', b, end='\t')
    print('c =', c, end='\t')


lst = [1, 2, 3]
# fun(lst)  # 报错
fun(*lst)  # a = 1 b = 2 c = 3
print()
dic1 = {'a': 100, 'b': 200, 'c': 300}
fun(a=10, b=20, c=30)  # a = 10    b = 20    c = 30
print()
fun(**dic1)  # a = 100    b = 200    c = 300
函数调用对参数的影响
def fun_demo(a, b):
    print('arg1:', a)  # arg1: 11
    print('arg2:', b)  # arg2: [1, 2, 3]
    a = 100
    b.append(10)
    print('arg1:', a)  # arg1: 100
    print('arg2:', b)  # arg2: [1, 2, 3, 10]


n1 = 11
n2 = [1, 2, 3]
print('n1:', n1)  # n1: 11
print('n2:', n2)  # n2: [1, 2, 3]
fun_demo(n1, n2)
print('n1:', n1)  # n1: 11
print('n2:', n2)  # n2: [1, 2, 3, 10]

可变对象受函数内部修改操作的影响。
不可变对象不受函数体内操作的影响。

函数的参数定义函数定义默认值参数

函数定义时,给形参设置默认值,只有与默认值不符的情况才需要传递实参。


def fun(a, b=10):
    print(a, b)


fun(100)  # 100 10
fun(100, 200)  # 100 200
个数可变的位置参数

定义参数时,无法确定传递的位置实参个数时,使用可变位置参数。

使用 * 定义个数可变的位置形参参数结果为一个元组个数可变的位置形参只能有一个
def fun1(*args):
    print(args)


fun1(10, 20, 30)  # (10, 20, 30)
fun1(10)  # (10,)
个数可变的关键字参数

定义参数时,无法确定传递的关键字实参个数时,使用可变关键字参数。

使用 ** 定义个数可变的关键字形参参数结果为一个字典个数可变的关键字形参只能有一个
def fun2(**args):
    print(args)


fun2(a=10, b=20, c=30)  # {'a': 10, 'b': 20, 'c': 30}
fun2(a=10)  # {'a': 10}

个数可变的位置形参和关键字可变的同时存在时,位置形参要放在关键字形参

强制使用关键字传参

函数定义时,形参参数之间加入 * ,之后的参数在函数调用时,只能采用关键字传参的方式。

def fun(a, b, *, c, d):
    print('a =', a, end='\t')
    print('b =', b, end='\t')
    print('c =', c, end='\t')
    print('d =', d, end='\t')


fun(a=10, b=20, c=30, d=40)  # a = 10    b = 20    c = 30    d = 40
fun(10, 20, c=30, d=40)  # a = 10    b = 20    c = 30    d = 40
# fun(10, 20, 30, 40)  # TypeError: fun() takes 2 positional arguments but 4 were given
函数定义时的形参的顺序问题
def demo1(a, b, *, c, d, **args):
    pass


def demo2(*args, **args2):
    pass


def demo3(a, b=10, *args, **args2):
    pass
函数的返回值

函数的返回值为多个时,返回结果为元组

def fun1(num):
    odd = []
    even = []
    for item in num:
        if item % 2 == 0:
            odd.append(item)
        else:
            even.append(item)
    return odd, even


arr = [1, 2, 3, 4, 5, 6]
b = fun1(arr)
print(b)  # ([2, 4, 6], [1, 3, 5])

函数没有返回值时,return可以省略。
函数的返回值为1个时,返回其类型。
函数是否需要返回值,视情况而定。

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门