参数详解

参数详解

1.位置参数

  位置形参

    在函数定义阶段括号内由左到右填写的变量名

  位置实参

    在函数调用阶段括号内由左到右传入的数据值

 

  关键字实参(可以打破位置顺序传值)

    在函数调用阶段以形参名=数据值的形式强行给指名道姓的传值

 

  """
  1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
  2.位置参数在绑定的时候多一个不行少一个也不行
  """

    '''格式越简单的越靠前 格式越复杂的越靠后'''

 

默认参数

  默认形参 

    函数在定义阶段预先给形参赋的值 

      1.该形参在函数调用阶段如果不给值 则使用默认的
      2.该形参在函数调用阶段也可以继续给值 则使用你给的

# 定义学员注册功能
def register(name, age, gender='male'):
    print('%s:%s:%s' % (name, age, gender))
register('jason', 18)
register('tony', 28)
register('kevin', 38)
register('lili', 18, 'female')
register('lili', 18, gender='female')

  """
  位置形参与默认值形参在定义的时候
  位置形参必须在默认值形参的前面
  """
  '''格式越简单的越靠前 格式越复杂的越靠后'''

 

 

可变长参数

  可以接受多余实参的形参

  *号在形参中的使用

    用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名

# 1.函数无论传入多少位置参数都可以正常运行
def func(x,y,*a):
    print(x,y,a)
func()  # ()
func(1)  # (1,)
func(1, 2, 3, 4, 5, 6, 7)  # (1, 2, 3, 4, 5, 6, 7)
func(1,2)  # 1 2 ()
func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
func(1,2)  # 1 2 (3, 4, 5, 6, 7, 8, 9)

 

 

  **号在形参中的使用

    用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名

# 2.函数无论传入多少关键字参数都可以正常运行
def index(x, y, **b):
    print(x, y, b)
index()  # {}
index(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
index(y=2, x=1)  # 1 2 {}
index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}

 

 

  (*args, **kwargs):联用

# 3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
def index(*a,**b):
    print(a,b)
index()  # () {}
index(1,2,3,4)  # (1, 2, 3, 4) {}
index(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
index(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
"""
墨守成规
    可变长形参 *与**后面的变量名其实是可以随便定义的
    但是python中推荐使用
        *args  
        **kwargs 
def index(*args, **kwargs):
    pass
"""

 

  *号在实参中的使用

    会将列表、元组内的元素打散成位置参数的形式一一传值

def index(a, b, c):
    print(a,b,c)
new_list = [11,22,33]
index(new_list)  # 肯定不行  列表是一个整体 相当于一个实参
index(new_list[0],new_list[1],new_list[2])  # 可以
'''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入'''
def index1(*args):
    print(args)
new_list1 = [11,22,33,44,55,66,77,88,99]
index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)

 

 

  **号在实参中的使用

    会将字典内的键值对打散成关键字参数传入

def index2(**kwargs):
    print(kwargs)
new_dict = {'username':'jason','pwd':123}
index2(**new_dict)  # index2(username='jason',pwd=123)
# {'username': 'jason', 'pwd': 123}

 

 

函数参数补充(了解)

  命名关键字参数

def register(name,age,*,sex,height):
        pass

register('jason',18,'male',183)
register('lili',18,sex='male',height='1.8m') #正确使用
    """
    sex height在传入实参的时候必须以关键字参数的形式

    ps:该类型的参数几乎不用 也几乎很少能碰到
    """

 

 

END

 

posted @ 2021-11-15 18:54  Snails蜗牛  阅读(364)  评论(0编辑  收藏  举报