python函数5种参数

1.位置参数(正常传参)

就是固定的参数,函数中定义多少个参数,调用函数的时候后就传递多好个参数

# 位置参数

def power(x,n):
    num=0
    while n>1:
        num=num+x*x
        n=n-1
    return num
print(power(2,5))#16
2.默认参数(给定一个默认值)
首先注意: 

(1)默认参数要放在最后面,不然会有误会,编译器不知道从哪个数开始算他不是默认参数
(2)默认参数必须指向不变对象
当函数中有部分参数的值在大部分时间是固定的时候,可以预先给它一个值。不用每一次都输入。当然有特殊情况的时候依然可以给它附一个新的值。 

def power(x,n=2):
    num=0
    while n>1:
        num=num+x*x
        n=n-1
    return num
print(power(2))  #4
3.可变参数(*加参数名,表示此参数可变)
第1种方式:

可变的参数指的是列表(list),数组(tuple).因为其中的数据是可以改变的,将列表和数组作为参数传入函数中,所以函数的参数也是可变的

第一种方法:使用 * 放在参数名前,作为可变参数的标志

def calc(*number):
    sum = 0
    for n in number:
        print ('n=',n)
        print(sum)
        sum = sum + n * n
    return sum
number=[2,5]
print('calc',calc(number[0],number[1]))  #29
#这里如果要使用列表的话,一定要如此写,不然会有:IndexError: tuple index out of range的报错
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第2种方式:将*放在被传递的参数前

def calc(number0,number1):
    sum = 0
    while number1>1:
        sum = sum + number0* number0
        number1-= 1
    return sum
print(calc(*[2,5])) #16
4.关键字参数(**加参数名,可以传入不同的参数)

函数可以传入不指定个数的参数。
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

当想要多传参数的时候,需要带上参数名。
也可以先组成一个dict ,当做参数传进去

def information(name,**kwargs):
    print('name,dosomething:',name,kwargs)
information('simple1_6',something='write python blog')
#name,dosomething: simple1_6 {'something': 'write python blog'}
5.命名关键字参数(参数+*+参数,后面的参数都是可变参数)
def information(name,something,*,zhuangtai):
    print("name:",name,'do',something,'zhuangtai:',zhuangtai)
information('simple1_6','write python blog',zhuangtai='come')
#name: simple1_6 do write python blog zhuangtai: come

总结:

*args and **kwargs

用*args和**kwargs只是为了方便并没有强制使用它们.

当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数:

相似的,**kwargs允许你使用没有事先定义的参数名:

你也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给*args和**kwargs.命名参数在列表的最前端.

*args和**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面.

转自  https://blog.csdn.net/simple1_6/article/details/79452421

猜你喜欢

转载自blog.csdn.net/dss875914213/article/details/80800133