编程语言
首页 > 编程语言> > Python函数参数(必选、默认、可变、关键字)

Python函数参数(必选、默认、可变、关键字)

作者:互联网

Python函数参数(必选、默认、可变、关键字)

 

【参考】:https://blog.csdn.net/pql925/article/details/80999086

 

1. 必选参数

必选参数,即使用普通变量标识符标识形参,没有默认赋值或*星号。

def power2(x):
    return x*x

def power3(x):
    return x*x*x

def power(x,n):
    return x**n

power2(5)
## 25
power3(5)
## 125
power(5,2)
## 25

power(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: power() missing 1 required positional argument: 'n'

每个必选参数,在函数调用时,都必须要指定实参对象,如果未指定或少于必选形参个数,则会报错。

必选参数,必须放在其他类型的参数之前,即形参列表的最前面。

 

2. 参数传递

调用函数时,可以按位置依照形参顺序依次传递实参,也可以使用形参赋值的格式,将实参与形参绑定。

参数传递的本质是,实参元组到形参元组的赋值。

power(5,2)
## 25
power(2,5)
## 32
power(n=5,x=2)
## 32

>>> power(n=5,2)
  File "<stdin>", line 1
    power(n=5,2)
               ^
SyntaxError: positional argument follows keyword argument

>>> power(5,x=2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: power() got multiple values for argument 'x'

 

3. 默认参数

默认参数,必须放在必须参数之后。在调用函数时,可以给默认参数传递形参,也可以不传递,还可以

def power(x,n=2):
    return x**n

power(5)
## 25

def enroll(name, gender, age = 18, city = 'Beijing'):
    s = "name: %-10s , gender = %-6s , age : %d , city = %s" %(name,gender,age,city)
    print(s)

enroll("Li", "Male", 30)
## name: Li         , gender = Male   , age : 30 , city = Beijing

enroll("Li", "Male", 30, 'Tianjin')
## name: Li         , gender = Male   , age : 30 , city = Tianjin

enroll("Li", "Male", city = 'Tianjin')
## name: Li         , gender = Male   , age : 18 , city = Tianjin

可以通过形参赋值形式,不按顺序提供参数。

 

4. 可变参数

在形参变量前面加上*单星号,表示此形参可接收的实参个数可变,形参赋值为元组类型。

def sumall(*nums):
    print("nums = ",nums)
    print("Type = ",type(nums))
    return sum(nums)

>>> sumall(1,2,3,4)
nums =  (1, 2, 3, 4)
Type =  <class 'tuple'>
10

>>> ln = [1,2,3,4]  # ln =(1,2,3,4)
>>> sumall(*ln)
nums =  (1, 2, 3, 4)
Type =  <class 'tuple'>
10

def sumall_base(base, *nums):
    print("base = ",base)
    print("nums = ",nums)
    print("Type = ",type(nums))
    return base + sum(nums)

>>> sumall_base(100,1,2,3,4)
base =  100
nums =  (1, 2, 3, 4)
Type =  <class 'tuple'>
110

>>> ln = [1,2,3,4]  # ln =(1,2,3,4)
>>> sumall_base(100,*ln)
base =  100
nums =  (1, 2, 3, 4)
Type =  <class 'tuple'>
110

实参和形参都是元组类型,通过实参到形参的元组赋值完成参数传递。*星号在形参和实参中的作用:

 

5. 关键字参数

当形参变量的名称和个数不确认时,可以使用关键字参数,将传递来的形参和实参,转换为一个字典,赋值给关键字形参。

在形参变量前面加上**双星号,可以定义一个关键字参数。

也可以使用一个字典实参,给函数传递参数,给字典实参前加上**双星号,可以直接将字典对象传递给形参。

def student(id,name,**attr):
    print("id : ",id)
    print("name : ",name)
    for k in list(attr):
        print("%s : %s" %(str(k),str(attr[k])))

>>> student(1,'Li',age=16)
id :  1
name :  Li
age : 16

>>> d = {"age":16}
>>> student(1,'Li',**d)
id :  1
name :  Li
age : 16

标签:必选,power,形参,nums,Python,函数参数,实参,##,name
来源: https://blog.csdn.net/whereiwillgo/article/details/117787662