Python笔记:day5之函数的参数

函数的参数

  • 位置参数

一个新的名词:按照位置顺序进行赋值的参数。

def position (x,y,z):
    print('体积:',x*y*z)
    return

运行结果:
position(1,2,3)
  • 默认参数

很熟悉吧,哈哈哈。 

一般来说,变化大的参数放在前面,变化小的参数放在后面,变化小的参数就可以作为默认参数。

默认参数可以不按顺序传进去

def position (x,y=2,z=3):
    print('体积:',x*y*z)
    return
运行结果:
position(1)
position(1,2)
position(1,z=2)           #越过y给z传参

默认参数的坑 ,且看如下代码:

def add_end(L=[]):
    L.append('END')
    return L
print(add_end())
print(add_end())
print(add_end())

运行结果:
['END']
['END', 'END']
['END', 'END', 'END']

原因:Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。 

None这个不变对象来实现:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

运行结果:
['END']
['END']
['END']
  • 可变参数(个数可以变,nb吧)

         先举一个几个整数求和的例子

def sum1_0 (L):        #这个是利用list进行求和的
    a=0
    for number in L:
        a=a+number
    return a


def sum2_0 (*L):            #这个是利用可变参数求和的
    a=0
    for number in L:
        a=a+number
    return a

q=[1,2,3,4,5,6]

print(sum1_0([1,2,3,4,5,6]))
print(sum1_0(q))
print(sum2_0(1,2,3,4,5,6))        #参数的个数可以变化,在函数里被组装成tuple
print(sum2_0(*q))                 #*q表示q这个list的所有元素作为可变参数传进去
运行结果:
21
21
21
21
  • 关键字参数(更amazing了是不是) 
def student(name,grade,**GPA):            #GPA是关键字参数,可以理解成可选项
    print('姓名:',name,'成绩:',grade, '绩点及排名等:',GPA)

student('Bob',95)
student('Bob',95,绩点=3.5)       
student('Bob',95,绩点=3.5,排名=1)          #关键字参数的个数不确定,最终会被组装成字典

Bob={'绩点':3.5,'排名':1}
student('Bob',95,绩点=Bob['绩点'],排名=Bob['排名'])
student('Bob',95,**Bob)             #也可以传入一个字典,但要变成一个关键字参数,即加上**

运行结果:
姓名: Bob 成绩: 95 绩点及排名等: {}
姓名: Bob 成绩: 95 绩点及排名等: {'绩点': 3.5}
姓名: Bob 成绩: 95 绩点及排名等: {'绩点': 3.5, '排名': 1}
姓名: Bob 成绩: 95 绩点及排名等: {'绩点': 3.5, '排名': 1}
姓名: Bob 成绩: 95 绩点及排名等: {'绩点': 3.5, '排名': 1}
  • 命名关键字参数

                    作用:限制关键字参数的名字,就可以用命名关键字参数 

def person1_0(name, age, *, city, job):
    print(name, age, args, city, job)


def person2_0(name, age, *args, city, job):
    print(name, age, args, city, job)


person1_0('bob',15,city='纽约',job='工程师')
person2_0('bob',15,1,2,3,city='纽约',job='工程师')

运行结果:
bob 15  纽约 工程师
bob 15 (1, 2, 3) 纽约 工程师

命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。.

如果有可变参数,如上述的 *args则不需写*了

上述几种参数还可以组合使用

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

 

 

猜你喜欢

转载自blog.csdn.net/yszdzjt/article/details/81411379
今日推荐