python3 函数

发布时间:2019-09-27 07:05:58编辑:auto阅读(1888)

    形式参数:
    实际参数:固定数参数
    默认参数:给参数一个默认值,赋予新值时覆盖默认值。
    位置参数:sys.argv[XX]
    
    代码名称、函数、变量不可以与系统默认参数、模块名字相同
    
    if __name__ == '__main__':
    __name__:
        在主动调用的时候返回__main__(意思就是主动调用这个函数)
        在被动调用的时候返回__foo__(像导入模块的时候,顺带到这个地方,并不是要执行它的时候返回foo)
        所以在if __name__ == '__main__':下面的代码是属于在主动调用的时候才执行。
        前向引用:
        def foo():
            print('in foo')
            bar()   #此时函数的内容并没有执行,当调用的时候才开始真正的执行函数
    
        #foo()  如果这个时候调用foo()函数的话,会报错,因为bar函数还没有生成
        def bar():
            print('in bar')
    
        foo()
    
    内部函数/内嵌函数:
        def foo():
            print('in foo')
            def bar():
                print('in foo-bar')
            bar()
    
        foo()               
        #函数bar()只能在foo函数内部调用,foo函数结束bar则结束,类似于局部变量的意思
    
    函数操作符:
        使用一对圆括号()调用函数,如果没有圆括号,只是对函数的引用
        任何输入的参数都必须放置在括号中
        调用:把函数执行一遍
        引用:把函数本身指向引用者
        >>> def func():
        ...     return 'hello wlrkd'
        ... 
        >>> a = func()
        >>> b = func
        >>> a
        'hello wlrkd'
        >>> b
        <function func at 0x7f90fc1afe18>
        >>> b()
        'hello wlrkd'
    
    关键字参数:
        关键字参数的概念仅仅针对函数的调用
        这种理念是让调用者通过函数调用中的参数名字来区分参数
        这样规范允许参数缺失或者不按顺序
        def get_ingo(name, age):
            print('%s is %s years old' % (name, age))
    
        get_ingo('bob', 23)
        get_ingo(23, 'bob')
        get_ingo(age=23, name='bob')
        #get_ingo(age=23, 'bob')  #错误,关键字参数必须在后
        #def func(age=23, name):    #错误,定义函数时,有默认值的参数必须在后
        # get_ingo(23, name='bob')    #错误,name变量得到了多个值
        # get_ingo('bob', 23, 24)     #错误,调用函数时,实参个数要与形参个数相同
        get_ingo('bob', age=23)
    
    参数组:
        python允许程序员执行一个没有显示定义参数的函数      
        相应的方法是通过一个把元组(非关键字参数)或字典(关键字参数)作为参数组传递给函数
    
        def get_args(*args):  #一个*号代表以元组形式接收参数
            print(args)
    
        def get_kwargs(**kwargs):   #两个*号代表以字典形式接收参数
            print(kwargs)
    
        def get_info(name, age):
            print('%s is %s years old' % (name, age))
    
        if __name__ == '__main__':
            get_args()
            get_args('abc')
            get_args(10, 20,30, 40)
            get_kwargs()
            get_kwargs(name='bob', age=25) 
            info = ['bob', 23]
            get_info(*info) #在实参传递的时候以一个*号,代表字符串字符串、元组、列表
            info_dict = {'name':'azj', 'age':25}
            get_info(**info_dict)   #两个*号代表的是字典的含义,将字典进行传递
    
            ()
            ('abc',)
            (10, 20, 30, 40)
            {}
            {'name': 'bob', 'age': 25}
            bob is 23 years old
            azj is 25 years old

关键字