5.Python(函数)

函数

A.定义

1.定义一个函数

#语法
def 函数名(参数1,参数2,参数3,...):
    '''注释'''
    函数体
    return 返回的值

#函数名要能反映其意义

2.函数返回值

(1)函数体内部的语句执行是,一旦执行到return时,函数就执行完毕,并将结果返回。

(2)如果没有return语句,函数执行完毕也会有返回结果,只是结果为none

def test01():
    msg = 'test01'
    print(msg)

print(test01())

(3)return返回一个值

def test02():
    msg = 'test02'
    return msg
print(test02())

(4)return返回一堆值,最后返回的是一个元组

def test03():
    msg = 'test03'
    return 1,2,3,4,'a',['alex'],{'name':'alex'},None

print(test03())

B.函数的参数

1.位置参数,按照从左到右的顺序定义的参数
def calc(x, y):
    t = x**y
    return t
res = calc(2,3)
print(res)

这个函数体验两个参数,都是位置参数,调用函数是,传入的两个值按照位置顺序依次赋给参数x,y

 2.默认参数
def handle(x, type='mysql', name="haha"):
print(x)
print(type)
print(name)
handle('hello')

注意:(1)必须在位置参数后面

             (2)不用默认参数时,要赋新值,会覆盖掉原来的参数

                   a.按顺序依次给

handle('hello', 'maya', 'tiana')

                   b.不想按顺序,就要把参数名写上

handle('hello', name='tiana', type='maya')

          (3)默认参数最大的坑,最好不要把默认参数设置成一个列表,最好是不变对象如str,none

3.可变参数 参数名前面加一个“*”

传入的参数个数不确定,随便多少个都行,下面的例子参数是1,2,3  也可以是别的,个数没有限制

def calc(*numbers):  #计算a*2 + b*2 + c*2 + ……
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
print(calc(1, 2, 3))  

函数内部,参数numbers接收到的是一个元组

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
nums = (1, 2, 3, 4, 5,)
t = calc(*nums)
print(t)

*nums表示把nums这个元组中的所有元素作为可变参数传进去,这种写法相当有用,而且常见

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

4.关键字参数

函数person(),前两个参数是必选参数(位置参数),最后一个是关键词参数kw,起扩展函数的功能

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person("Mike",30, city='Beijing')

 (1)情况一

def foo(x, y, **kwargs):
    print(x, y)
    print(kwargs)
    
    
foo(1, y=2, a=1, b=2, c=3)

(2)情况二

def foo(x, y, **kwargs):
    print(x, y)
    print(kwargs)


dic = {'a': 1, 'b': 2, 'c': 3}
foo(1, y=2, **dic)

**dic表示把dic这个字典的所有key-value值用关键字参数传入到函数的**kwarge参数

5.命名关键字参数 限制关键字参数的名字

(1)命名关键字参数需要一个特殊分隔符“*”,“*”后面的参数被视为命名关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)


person('Jack', 24, city='Beijing', job='Engineer')#命名关键字参数必须传入参数名,这和位置参数不同。

(2)如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

(3)命名关键字参数也可以有默认值

def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)

person('Jack', 24, job='Engineer')

调用时可不传入city参数

6.参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
原文地址:https://www.cnblogs.com/zhaojiayu/p/12562202.html