# ============================位置参数=====================
#位置参数就是平常很常见的形参
def pwoer_0(x):     #此处的x就是位置参数
    return x*x


#============================默认参数=======================
def power_1(x,n=2): #默认参数
    s=1
    while n>0:
        n=n-1
        s*=x
    return s

print(power_1(3))

def add_end(L=None):        # !!!默认参数必须指向不变对象,否则重复使用函数会出错
    if L is None:
        L = []
    L.append('END')
    return L


#======================可变参数================================
#可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

num=[1,2,3]
calc(*num)  #可以通过这种方式传递list



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

def person(name, age, **kw):        #kw即使关键字参数
    print('name:', name, 'age:', age, 'other:', kw)

person('bob', 35,city='beijing')


#=====================命名关键字参数======================
#效果同关键字参数一样,只不过规定了接受的参数的key的名字
def person(name, age, *, city, job):        #采用一个*来分隔位置参数和命名关键字参数
    print(name, age, city, job)