首页 > 代码库 > Python 函数的参数知识汇总

Python 函数的参数知识汇总

函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆

一、函数的参数分为:

  1. 位置参数
    1. 1 def power(x):           # x 就是power(x)的一个位置参数,我们调用power(x)必须传入一个参数x
      2     return x * x

       

  2. 默认参数
    1. 1 def power(x, n=2):  #修改后的power()函数有两个位置参数,调用函数时如果传入两个参数,会依次传给x,n;
      2     s = 1          #如果仅仅传入一个参数的话,那么n=2就是一个默认参数,默认为2,这就是默认参数
      3     while n > 0:
      4         n = n - 1
      5         s = s * x
      6     return s

      1)使用默认参数,可以降低调用函数的难度;
      2)设置默认参数时,要遵照必须参数在前,默认参数在后的原则;
      3)设置多个参数时,变化频繁的参数放到前面,变化频率低的可以放到后面作为默认参数;
      4)定义默认参数要牢记一点,默认参数必须指向不变对象。

  3. 可变参数
    1. 1 def calc(*numbers):
      2     sum = 0
      3     for n in numbers:
      4         sum = sum + n * n
      5     return sum

      1)定义一个可变参数,需在参数前加一个 * 号,在函数内部可变参数接收的是一个tuple,在调用函数时可以传入任意个参数;
      2)如果参数本身是个list或者tuple,调用函数时需要在list或者tuple前加个 * ,把list/tuple变成可变参数传进入;

      1 >>> nums = [1, 2, 3]
      2 >>> calc(*nums)    #calc(*[1,2,3])也是可以的
      3 14

       

  4. 关键字参数
    1. 1 def person(name, age, **kw):
      2     print(name:, name, age:, age, other:, kw)
      3 
      4 
      5 >>> person(Bob, 35, city=Beijing)
      6 name: Bob age: 35 other: {city: Beijing}
      7 >>> person(Adam, 45, gender=M, job=Engineer)
      8 name: Adam age: 45 other: {gender: M, job: Engineer}

      关键字参数运行你传入0个或者多个 含有参数名的参数 ,这些带有参数名的参数在函数内部自动封装成一个dict;
      当然也可以把一个dict转化成关键字参数(在字典前加上 ** )传入函数; 

    2. >>> extra = {city: Beijing, job: Engineer}
      >>> person(Jack, 24, city=extra[city], job=extra[job])
      name: Jack age: 24 other: {city: Beijing, job: Engineer}
      
      
      >>> extra = {city: Beijing, job: Engineer}
      >>> person(Jack, 24, **extra)
      name: Jack age: 24 other: {city: Beijing, job: Engineer}
  5. 命名关键字参数
    1. 如果要管控关键字参数的传入,可以通过kw审查:
      def person(name, age, **kw):
          if city in kw:
              pass #可替换为检查语句
          if job in kw:
              pass #可替换为检查语句
          print(name:, name, age:, age, other:, kw)

       但是调用者仍可以传入不受限制的关键字参数

    2. 如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:
      def person(name, age, *, city, job):
          print(name, age, city, job)

      和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。
      调用方法如下:

    3. >>> person(Jack, 24, city=Beijing, job=Engineer)
      Jack 24 Beijing Engineer
    4. 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
      def person(name, age, *args, city, job):
          print(name, age, args, city, job)

       

    5.  命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。

      命名关键字参数可以有缺省值,从而简化调用:

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

二、参数组合:

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。

  1. 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)
    
    
    >>> f1(1, 2)
    a = 1 b = 2 c = 0 args = () kw = {}
    >>> f1(1, 2, c=3)
    a = 1 b = 2 c = 3 args = () kw = {}
    >>> f1(1, 2, 3, a, b)
    a = 1 b = 2 c = 3 args = (a, b) kw = {}
    >>> f1(1, 2, 3, a, b, x=99)
    a = 1 b = 2 c = 3 args = (a, b) kw = {x: 99}
    >>> f2(1, 2, d=99, ext=None)
    a = 1 b = 2 c = 0 d = 99 kw = {ext: None}
    
    
    >>> args = (1, 2, 3, 4)
    >>> kw = {d: 99, x: #}
    >>> f1(*args, **kw)
    a = 1 b = 2 c = 3 args = (4,) kw = {d: 99, x: #}
    >>> args = (1, 2, 3)
    >>> kw = {d: 88, x: #}
    >>> f2(*args, **kw)
    a = 1 b = 2 c = 3 d = 88 kw = {x: #}

     

Python 函数的参数知识汇总