Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数

  Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的。

挺有意思的,本文主要参照Liaoxuefeng的Python教程。

#必选参数
def quadratic(a, b, c):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or not isinstance(c, (int, float)):
        raise TypeError('bad operand type')
    if a == 0:
        return -c / b
    else:
        return (math.sqrt(b * b - 4 * a * c) - b)/ 2.0 / a, ( - math.sqrt(b * b - 4 * a * c) - b)/ 2.0 / a
print(quadratic(2, 3, 1))
print(quadratic(1, 3, -4))

def pow(x, n = 2):
    s = 1
    while(n):
        n -= 1
        s *= x
    return s
print(pow(2,5))

def add_end(L = []):
    L.append('End')
    return L
print(add_end())
print(add_end())

def add_end(L = None):
    if L is None:
        L = []
    L.append('End')
    return L
print(add_end())
print(add_end())

#可变参数
def calc(*nums):
    sum = 0
    for i in nums:
        sum += math.pow(i, 2)
    return sum
num = [1,2]
print(calc(1,2))
print(calc(*num))

#关键字参数
"""关键字参数有什么用?它可以扩展函数的功能。"""
"""比如,在person函数里,我们保证能接收到name和age这两个参数,"""
"""但是,如果调用者愿意提供更多的参数,我们也能收到。"""
"""试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,"""
"""利用关键字参数来定义这个函数就能满足注册的需求。"""
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'others:', kw)
    if 'School'in kw:
        print("有School 信息")
person("李金旭", 11, School = ['Neu','Swun'], Contry = 'China')

#命名参数
'''如果要限制关键字参数的名字,就可以用命名关键字参数,
    例如,只接收city和job作为关键字参数。这种方式定义的函数如下:'''
def person(name, age, *, city, job):
    print(name, age, city, job)
person("李金旭", 11, city = ['Neu','Swun'], job = 'China')

def person(name, age, *argv):
    print(name, age, argv)
person("李金旭",11,'Neu')

def person(name, age, *, city, job):
    print(name,"is", age," years old in ", city, "as a ",job)
person("李金旭",11,city = "Bejing", job = "IT front to end Engineer")

#参数组合
'''
    在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。
    但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
'''
'''
    *args是可变参数,args接收的是一个tuple;
    **kw是关键字参数,kw接收的是一个dict。
'''
def func1(a, b, c = 0, *argv, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def func2(*argv, **kw):
    print(argv, kw)
args = (1,2,3,4)
kw = {'Name':'李金旭', 'Age': 11}
func2(args, kw)

哎,论文还没看完,又搞了半天这些乱七八糟的。。。烦

posted on 2016-06-10 11:21  暴力的轮胎  阅读(1116)  评论(0编辑  收藏  举报

导航