函数进阶

1.缺省函数

函数中含有默认参数

2.可变函数

def calc(numbers):

    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc([1,2,3]) // calc((1,2,3)) 可迭代数据类型
这个例子有意思的是,中间的for循环一定return 要for循环同一级,不然会返回第一个值,写的时候要细心。
上面这个例子可以在一个参数中传入多个数值,并返回一个的值。
此外还有另外的一个方法

def calc(*numbers):


    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

calc(1,2,3)

函数中可传入比声明参数更多的参数。

关键字函数

可变参数函数允许我们可以在一个函数中传入零个或者多个参数并在调用函数时自动封装在一个元组当中。

然而,关键字函数可以传入零个或者多个参数并在调用函数时自动封装在一个字典当中。

实例:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
我们在调用函数时,可以只传入必选函数。
>>> person('Michael', 30)
name: Michael age: 30 other: {}

当然我们也可以传入其他关键字
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

关键字函数的用法:
我们可以现在函数之前准备一个字典,之后再将字典中的元素传入函数之中。
举例:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}

>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
当我们将字典中的元素传入函数中当作参数的时候,我们在调用函数时需要加入 ** 符号,
内部会将要传入的字典做一个浅拷贝,
再将字典中的key:value分别传入函数的参数中。
我们虽然可以定义不用的参数传入到函数当中,但是我们还想对函数加以限制。
使得函数只能传入跟我们预想的内容相关的内容。
命名关键字函数
在命名关键字函数中我们可以选择传入相关参数,或者默认想关参数。
实例1
def person(name, age, *, city, job):
    print(name, age, city, job)
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。
实例2:
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
命名关键字函数在调用函数时需要传入命名关键字参数。
def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)

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

假如函数中没有可变函数 ,同时也没有 * 符号,函数中的参数会被当作位置函数。
在函数中可以通过预先赋值一个元组或者字典,可以被引入函数当中。
tuple = ( 1,2,3,4,5 )
dict =
{'city': 'Beijing', 'job': 'Engineer'}
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)

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)


3.返回多个参数

>>> def weizhi(x,y,lenth,single=0):
nx = x + lenth*math.cos(single)
ny = y + lenth*math.sin(single)
return nx,ny

>>> weizhi(0,0,10,single=45)
(5.253219888177298, 8.509035245341185)

其实最后返回值为一个元组,只是元组可以对应不用位置一一对应。

将结果传入其他函数是也是一一对应的关系。

3.引用传参。

原文地址:https://www.cnblogs.com/user0712/p/8733349.html