• 学习3:函数


    1. 函数参数

    1) 必选参数(非关键字参数形式)

    def test(name,age):
        print name,age
                    
    test('tom',28)
    test(age='10', name='lik')

    输出结果:
    tom 28
    lik 10
    [Finished in 0.2s]
    说明:函数定义的必选参数,调用函数时候参数的个数以及位置要分别对应;如果在调用时候想不按照位置顺序传递,那么必须指定参数名,这个叫指定关键字参数

    2) 默认参数(关键字参数形式)

    def test(name='tom',age='20'):
        print name,age
                    
    test(28)
    test()
    test(age='28')

    输出结果:
    28 20
    tom 20
    tom 28
    [Finished in 0.2s]
    说明:函数定义的参数带有默认值,这个叫默认参数。针对默认参数,函数调用时候可以不指定参数值,也可以指定参数名重新赋值,也可以不指定参数名此时按参数顺序传递;
    另外默认参数要定义为不可变对象,不要定义为可变对象如list,否则会发生逻辑问题,如下每次调用test时候teacher默认参数的值没有被清空。

    def test(name='tom',teacher=[]):
        teacher.append('ll')
        print teacher
                    
    test()
    test()

    3) 非关键字可变参数

    针对必选参数样式的参数,但是又不是必选参数,我们可以定义为非关键字可变参数*args.

    args是一个list或者tuple,通过在前面加一个*就表示list或者tuple中的单个元素,从而表示多个必选样式的可选参数值

    def test(*args):
        print args
        for arg in args:
            print arg
    
    test('tom', 18)
    test('tom', 20, 'address')  #函数在调用时候直接使用必选参数形式,这些参数会自动被组装成一个元组
    params = ['tim', 20,'address','work']
    test(*params)  
    params = ('tim', 20,'address','work','home')
    test(*params)  #函数在直接使用列表或元组调用时候,要带上*

    输出结果:

    ('tom', 18)
    tom
    18
    ('tom', 20, 'address')
    tom
    20
    address
    ('tim', 20, 'address', 'work')
    tim
    20
    address
    work
    [Finished in 0.1s]

    4)关键字可变参数

    针对默认参数样式的参数,但是又不是必选参数,我们可以定义为关键字可变参数**kw

    kw是一个字典,通过在前面加一个**就表示字典中的元素,从而表示多个默认参数样式的可选参数值

    def test(**kw):
        for (key,value) in kw.items():
            print key,kw[key]
                    
    test(name='tom',age='20')   #函数在调用时候直接使用关键字参数形式,这些参数会自动被组装成一个字典
    print '---'
    kw={'name':'tom','age':'30','height':'180'}
    test(**kw)                 #函数在调用时候直接使用字典形式,注意要带上**

    输出结果:

    age 20
    name tom
    ---
    age 30
    name tom
    height 180
    [Finished in 0.1s]

    5) 混合参数

    混合参数定义,必须遵守参数定义顺序:必选参数->默认参数->非关键字可变参数->关键字可变参数。另外默认参数最好定义为不可变对象,不要定义为list。

    混合参数调用,必须遵守参数设置顺序:关键字参数之后不能再出现非关键字参数。通俗的说就是有指定参数名的参数之后,不能再出现没有指定参数名的参数。

    def test(name,age,*args,**kw):
        print name,age
        print args
        print kw
    
    
    test('tom', 18)
    print '----'
    test('tom',18,'grade','address')
    print '----'
    test('tom',18,grade='3',address='suzhou')
    print '----'
    test('tom',18,'3',address='suzhou')

    输出结果:

    tom 18
    ()
    {}
    ----
    tom 18
    ('grade', 'address')
    {}
    ----
    tom 18
    ()
    {'grade': '3', 'address': 'suzhou'}
    ----
    tom 18
    ('3',)
    {'address': 'suzhou'}
    [Finished in 0.1s]

    下面是一些错误的调用方法, 违背了规则:关键字参数之后不能再出现非关键字参数

    test(name='tom', 18)
    test('tom', 18, grade='3','address')

    2. 函数执行

    1)函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕并将结果返回。哪怕是在循环中循环还未结束也会结束函数执行。
    如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return
    2) 空函数,如果想定义一个什么事也不做的空函数,可以用pass语句:

    def nop():
        pass

    3) pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
    4) 调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError: my_abs() takes exactly 1 argument (2 given)
    但是如果参数类型不对,Python解释器就无法帮我们检查.所以需要时候可以先对参数类型做检查。
    5) 返回多个值,比如return x,y,实际返回的是一个元祖(x,y)

  • 相关阅读:
    ASP.NET ZERO 学习 JTable的ChildTable用法
    ASP.NET ZERO Core Application 学习笔记
    uploadify ASP.net 使用笔记
    金额的加减乘除运算
    利用autoit自动关闭指定标题窗口
    Struts2源代码解读之Action调用
    利用btrace工具监控在线运行java程序
    自己实现的简单MVC框架(类似Struts2+Spring)
    简单实用后台任务执行框架(Struts2+Spring+AJAX前端web界面可以获取进度)
    mybatis源代码分析:mybatis延迟加载机制改进
  • 原文地址:https://www.cnblogs.com/lypy/p/6369417.html
Copyright © 2020-2023  润新知