python-函数

函数的意义

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。自己也可以创建函数,这被叫做用户自定义函数。

函数的定义:

  • def 关键字开头,空格之后接函数的名称和圆括号,最后加上一个":".
  • def 是一个关键字,是不可以改变的。
  • 空格 是为了将关键字和函数名分开,一般的空1个空格。
  • 函数名:函数名只能包含字符串、下划线和数字其不能也数字开头,要有一定表达函数的功能。
  • 括号是必须加。
  • 一般还会给函数的参数进行相应的说明,应该写在函数的下面的第一行,增强代码的可读性。

函数的调用:
函数的调用就是函数加上():fun()

函数的返回值

函数的返回值:分别是没有返回值、返回一个值、返回多个值,也关键字return [返回对象]

没有返回值

1.
def func():  # 函数的定义
    s = "abc"
    for i in s:
        print(i * 2)  # 打印
ret = func()
print(ret)  # None  没有返回值则为None

2.
def func():  # 函数的定义
    s = "abc"
    for i in s:
        print(i * 2)  # 打印

    return    # 加上一个return 没有加上任何对象

ret = func()

print(ret)  # 返回的还是None

当函数中遇见return 则就结束函数体

def test():
    print("aaa")  
    return   # 程序执行到这里,就结束,后面的代码将不执行
    print("bbb")  

test()  # aaa

一个返回值

def test():
    b = 20
    c = 30
    a,b= b,c

    return a  # 返回参数a
t = test()
print(t)  # 20

多个返回值

返回多个值是也元组的形式进行返回

def test():
    b = 20
    c = 30
    a, b = b, c

    return a, b, c


t = test()
print(t)  # (20, 30, 30)

1.遇到return,此函数结束,return后面的东西将不会在执行
2.return 返回值

 关于返回值:

 如果return什么都不写或者干脆就没写return,返回的结果就是None

 如果return后面写了一个值,返回给调用者这个值

 如果return后面写了多个结果,,返回给调用者一个tuple(元祖),调用者可以直接使用解构获取多个变量

函数的参数

在函数调用的时候具体指定的值,就是参数:

def 函数(参数):
	函数体

测试:

def test(x):
    print("传递的参数是{}".format(x))

test(12)  # 传递的参数是12

参数

参数可以分为:

  • 形式参数 在函数声明的位置的变量叫形式参数 def func(a) a就是形式参数
  • 实际参数 在函数调用的时候给函数传递的值。fun("test") "test"就是实际参数
  • 传递参数 给函数传递信息的时候将实际的参数传给形式参数的过程叫做传参。

参数的分类

实参的角度

位置参数
def max_(x, y):
    return x if x > y else y


ret = max_(12, 23)  # 按照位置进行传参数
print(ret)  # 23
关键字参数
def max_(x, y):
    return x if x > y else y


ret = max_(x=12, y=23)  # 关键字进行传递参数
print(ret)  # 23
混合参数
def max_(x, y):
    return x if x > y else y


ret = max_(12, y=23)  # 位置参数和关键字参数混合在一起使用
print(ret)  # 23

注意:位置参数必须在关键字参数的前面,对于一个形参只能赋值一次

形参的角度

1.按照位置传值:位置参数。
def max_(x, y):
    return x if x > y else y


ret = max_(12, 23)  
print(ret)  # 23

如果不传递参数
def max_(x, y):
    return x if x > y else y


ret = max_() # TypeError: max_() missing 2 required positional arguments: 'x' and 'y'
print(ret
2.将变化比较小的值设置成默认数值:默认参数。
def max_(x, y = 20):  # y = 20 默认参数
    return x if x > y else y


ret = max_(10)
print(ret)  # 20
ret1 = max_(10, 30)
print(ret1)  # 30

默认参数如果是一个可变的数据类型
def append_(l, li=[]):

    li.append(l)
    print(li)

append_(2)
append_(3)
append_(4)
append_("abcd")
append_([45,45])  # [2, 3, 4, 'abcd', [45, 45]]


3.可接收所有的位置参数与关键字参数:动态参数。
def test(*args, **kwargs):
    print(args)
    print(kwargs)


test(1,2,3,4,"abdas", False, True, (78, "abc"), name ="Yang", age = 78)  # 
# (1, 2, 3, 4, 'abdas', False, True, (78, 'abc'))
# {'name': 'Yang', 'age': 78}

关于*args和**kwargs中打散和聚合的问题

def test1(a, b, d=0, *args, c=1, **kwargs):  # 将数据放在*args之前,关键字参数会被替换
    print(a, b, c, args, kwargs, d)   # 将数据放在**kwargs之前,关键字参数是默认参数
    # 1 2 1 (5, 6) {'r': 2, 'y': 78} 3
    print(*args)  # 元组打散  5 6
    print(*kwargs)  # 打散 返回key  r y
test1(1, 2, 3, 5, 6, r=2, y=78)
********************************************************************
dic = {"a": "b"}

def test(**kwargs):
    print(kwargs)  # {"a": "b"}
    print(*kwargs)  # "a"

test(**dic)  # a=b

li = [1, 3, 2]
def test(*args):  #
    print(args)  # args:(1, 3, 2)
    print(*args)  # args:1 3 2

test(*li)  # 1 3 2

偏函数

固定函数中的一些参数,返回一个新的函数

rom functools import partial

def three_num_add(a, b, c):
    """
    三个数字相加
    :return: int
    """
    return a + b + c


new_func = partial(three_num_add, c=10)  # 将c的参数进行保存

ret = new_func(10, 20)  # 在新的函数中传入a,b参数
print(ret)  # 40
原文地址:https://www.cnblogs.com/yangchangjie150330/p/10523896.html