python函数参数与文档

函数参数

1.位置参数

定义形式:

def func(p1, p2, ...):
    pass

实例:

#位置参数,调用时传入的实参必须与形参一一对应(包括个数与位置)
def introduce(name, age):
    print("I am {0}, and I am {1} years old.".format(name, age))
    
introduce("zhangsan", 18)

运行结果:

I am zhangsan, and I am 18 years old.

 

2.关键字参数

定义形式与位置参数相同

实例:

#正确的调用方式
introduce(name="lisi", age=20)
introduce(age=20, name="lisi")
introduce("lisi", age=20)

运行结果:

I am lisi, and I am 20 years old.
I am lisi, and I am 20 years old.
I am lisi, and I am 20 years old.

ps. 函数定义形式都是一样的,只是在调用的时候传入实参的时候形式不同:

1)若实参的个数与位置和形参都一样,则可以不必声明对应的形参名称。

2)若传参时顺序不同或想给后面的默认参数传参,则必须声明实参传给了哪个形参。

 

3.默认参数

定义形式:

默认参数必须位于普通参数的后面

def func(p1, p2=v2, p3=v3, ...):
    func body

实例:

def introduce2(name, age, sex="boy", address="shanghai"):
    print("I am {0}, a {2}, and I am {1} years old, living in {3}".format(name, age, sex, address))

introduce2("zhangsan", 18)
introduce2("zhangsan", 18, "girl")
introduce2("zhangsan", 18, address="beijing")
introduce2(sex="girl", name="zhangsan", age=18)

运行结果:

I am zhangsan, a boy, and I am 18 years old, living in shanghai
I am zhangsan, a girl, and I am 18 years old, living in shanghai
I am zhangsan, a boy, and I am 18 years old, living in beijing
I am zhangsan, a girl, and I am 18 years old, living in shanghai

 

4.收集参数

当你不知道会有多少个参数传入进来的时候,可以使用收集参数将他们全部传入进来,也可以不传参。

1)普通收集参数

定义形式:

def func(*args):
    func body

实例:

def introduce3(*args):
    print(type(args))
    print('Hello everyone, I am going to tell you something about myself')
    for i in args:
        print(i)

print('位置收集参数'.center(50,"#"))
introduce3()
print('*'*30)
introduce3("zhangsan", 18)
print('*'*30)
introduce3("zhangsan", 18, "boy")

运行结果:

######################位置收集参数######################
<class 'tuple'>
Hello everyone, I am going to tell you something about myself
******************************
<class 'tuple'>
Hello everyone, I am going to tell you something about myself
zhangsan
18
******************************
<class 'tuple'>
Hello everyone, I am going to tell you something about myself
zhangsan
18
boy

2)关键字收集参数

定义形式:

def func(**kwargs):
    func body

实例:

print('关键字收集参数'.center(50,"#"))
def introduce4(**kwargs):
    print(type(kwargs))
    for k,v in kwargs.items():
        print(k,'-----',v)

introduce4()
print('*'*30)
introduce4(name="lisi", age=18, sex="man", hobby="music")

运行结果:

#####################关键字收集参数######################
<class 'dict'>
******************************
<class 'dict'>
name ----- lisi
age ----- 18
sex ----- man
hobby ----- music

 

5.解包参数

当你的普通参数位于一个列表中,或者关键字参数位于一个字典中,直接传入列表或字典只能代表一个参数,可以使用解包参数将它们的每一个元素传给不同的参数。

1)列表解包参数

定义形式:

调用函数时:func(*list)

实例:

print('列表解包参数'.center(50,"#"))
zhangsan = ["zhangsan", 18, "boy"]
introduce2(*zhangsan)
print('*'*50)
introduce3(*zhangsan)

运行结果:

######################列表解包参数######################
I am zhangsan, a boy, and I am 18 years old, living in shanghai
**************************************************
<class 'tuple'>
Hello everyone, I am going to tell you something about myself
zhangsan
18
boy

2)字典解包参数

定义形式:

调用函数时:func(**dict)

实例:

print('字典解包参数'.center(50,"#"))
lisi = {
    'name':'zhangsan',
    'age':18,
    'sex':'man',
    'hobby':'reading'
}
introduce4(**lisi)

运行结果:

######################字典解包参数######################
<class 'dict'>
name ----- zhangsan
age ----- 18
sex ----- man
hobby ----- reading

6.参数的混合使用

定义与调用顺序:普通位置参数,普通收集参数,默认参数,关键字收集参数

实例:

def stu(name, age, *args, sex="boy", **kwargs):
    print('Hi guys, I am happy to tell you about myself, my name is {0}, a {2}, {1} years old'.format(name, sex, age))
    for i in args:
        print(i)
    for k,v in kwargs.items():
        print(k,'----',v)
        
stu("zhangsan",18)
print('*'*30)
stu("lisi", 20, "girl")
print('*'*30)
stu("lilei", 18, 'shanghai', 'freshman', hobby="dancing", state="single")

运行结果:

Hi guys, I am happy to tell you about myself, my name is zhangsan, a 18, boy years old
******************************
Hi guys, I am happy to tell you about myself, my name is lisi, a 20, boy years old
girl
******************************
Hi guys, I am happy to tell you about myself, my name is lilei, a 18, boy years old
shanghai
freshman
hobby ---- dancing
state ---- single

 

函数文档

定义形式:

def func(p1, p2, ...):
    '''
    func document
    parameters statament
    return statament
    '''
    func body

实例:

def stu(name, age, *args, sex="boy", **kwargs):
    '''
    this is the func document, where you can get help message
    :param name: your name
    :param age: your age
    :param args: other info
    :param sex: your sex
    :param kwargs: other info 
    :return: print the the screen return none
    '''
    pass

print(stu.__doc__)
print('*'*30)
help(stu)

运行结果:

 

    this is the func document, where you can get help message
    :param name: your name
    :param age: your age
    :param args: other info
    :param sex: your sex
    :param kwargs: other info 
    :return: print the the screen return none
    
******************************
Help on function stu in module __main__:

stu(name, age, *args, sex='boy', **kwargs)
    this is the func document, where you can get help message
    :param name: your name
    :param age: your age
    :param args: other info
    :param sex: your sex
    :param kwargs: other info 
    :return: print the the screen return none

 

 

 

 


posted @ 2019-03-30 14:45  yeoli  阅读(247)  评论(0)    收藏  举报