Python快速精通4 - 函数的参数详解

2019-05-29  本文已影响0人  小马哥China

2,函数的参数详解

2.1 参数用法1: 调用函数时,按照形参位置输入参数

定义函数的时候,会在参数列表里面指定形式参数,所谓形参类似一个占位声明的意思,等函数被调用的时候传递给函数这个"黑匣子"实际的参数,谁调用谁传入实际参数

# 形式参数: 下面是一个函数的声明,length与width就是形式参数
def area(length,width):
    '''这里是函数文档,一般用于介绍函数的功能及使用: 根据传递进来的参数长与宽,计算面积'''
    return length*width

# 函数说明文档: 这里是对函数文档的调用
help(area)

# 实际参数: 这里是对area函数的调用,在调用的时候传入实际参数
print('面积: ',area(1,1))
Help on function area in module __main__:

area(length, width)
    这里是函数文档: 根据传递进来的参数长与宽,计算面积

面积:  1

2.2 参数用法2: 关键词参数的使用

有一种场景,假设我现在在调用一个函数saveData(name,age,email,address,school),这个函数有多个参数,调用的时候如果传参顺序没摆放正确,函数即使不会抛出异常,结果也不是你期望的,python给出这样的方式避免错误,那就是在调用时候,我们给实际参数指定形式参数的名字.如下面例子:

def saveData(name,age,email,address,school):
    print("数据已经成功保存.\nName: {0}的\nAge:{1}\nEmail:{2}\nAddress:{3}\nSchool:{4}".format(name,age,email,address,school))

# 调用的时候,给每个参数指定形参的名字(关键词参数),即使实际参数和形式参数的顺序不对应也没有关系.
saveData(name='Jack',school='杭州师范',email='JackMa@alibaba.com',age=55,address='杭州西湖')
    
数据已经成功保存.
Name: Jack的
Age:55
Email:JackMa@alibaba.com
Address:杭州西湖
School:杭州师范

2.3 参数用法3: 参数默认值

def saveUser(name='小白',gentel='Male',school='Tsinghua University'):
    print('Name:{0}\nGentel:{1}\nSchool:{2}'.format(name,gentel,school))

saveUser('小菜','Female','PKU')
print()

saveUser(name='Jack')
print()

saveUser()
Name:小白
Gentel:Male
School:Tsinghua University

Name:Jack
Gentel:Male
School:Tsinghua University

Name:小菜
Gentel:Female
School:PKU

2.4 参数用法4: 可变个数的参数

# 函数功能: 录入作者和作者的代表作
def saveAuthor(name,*books):
    print('AuthorName:',name)
    if len(books)>=1:   #检查books是否有内容,有的话打印,其实可以简洁一点,改成下面代码的写法
        print('该作者的作品如下:')
        for book in books:
            print('\t',book)
saveAuthor('金庸','射雕英雄传','笑傲江湖','天龙八部')
print()
saveAuthor('吴承恩','西游记')
print()
saveAuthor('小马哥')
AuthorName: 金庸
该作者的作品如下:
     射雕英雄传
     笑傲江湖
     天龙八部

AuthorName: 吴承恩
该作者的作品如下:
     西游记

AuthorName: 小马哥
# 函数功能: 录入作者和作者的代表作
def saveAuthor(name,*books):
    print('AuthorName:',name)
    if books:
        print('该作者的作品如下:')
        for book in books:
            print('\t',book)
saveAuthor('金庸','射雕英雄传','笑傲江湖','天龙八部')
print()
saveAuthor('吴承恩','西游记')
print()
saveAuthor('小马哥')
AuthorName: 金庸
该作者的作品如下:
     射雕英雄传
     笑傲江湖
     天龙八部

AuthorName: 吴承恩
该作者的作品如下:
     西游记

AuthorName: 小马哥

可变长度的参数,在参数列表中是可以处于任意位置的,但要注意,调用函数时候,要对其它的参数指定参数名称,否则,会被收集到可变参数内,如下面例子

# 函数功能: 录入作者姓名,国籍和作者的代表作
def saveAuthor(name,*books,country):
    print('AuthorName:{0},Contry:{1}'.format(name,country))
    if books:
        print('该作者的作品如下:')
        for book in books:
            print('\t',book)
saveAuthor('金庸','射雕英雄传','笑傲江湖','天龙八部',country='China')
print()
saveAuthor('吴承恩','西游记',country='China')
print()
saveAuthor('小马哥',country='China')
AuthorName:金庸,Contry:China
该作者的作品如下:
     射雕英雄传
     笑傲江湖
     天龙八部

AuthorName:吴承恩,Contry:China
该作者的作品如下:
     西游记

AuthorName:小马哥,Contry:China

Python在支持可变长度参数的同时,还能进一步接收为可变长度的参数指定参数名,语法很简单: 在定义函数的时候,这种参数前面加两个星号,先掌握上面这些

2.5 参数用法5: 为函数传递一个参数集合

record=('xiaobai',22,'Male','xiaobai@google.com')
def printRecord(name,age,gentle,email):
    print('Name:{0}\tAge:{1}\tGentle:{2}\tEmail:{3}'.format(name,age,gentle,email))

# 我们熟悉的传参方式
printRecord(record[0],record[1],record[2],record[3])    #假如有更多参数也要这么输入进去吗?

#python给出的优雅简洁的方式
printRecord(*record)
Name:xiaobai    Age:22  Gentle:Male Email:xiaobai@google.com
Name:xiaobai    Age:22  Gentle:Male Email:xiaobai@google.com
上一篇 下一篇

猜你喜欢

热点阅读