• 深入函数


    Formal Arguments(形式参数)
    Python函数的形式参数集合由在调用时要传入函数的所有参数组成,这参数与函数声明中的参数列表精确的配对。
    子而写参数包括了所有必要参数:
    1,位置参数
    2,关键字参数
    3,默认参数
    4,可变长参数

    位置参数
    位置参数的传递必须与函数声明是定义的函数顺序匹配。

    >>> def foo(name,age):
    ... print("My name is %s, I am %d years old" % (name,age))
    ...
    >>> foo('alben',18)
    My name is alben, I am 18 years old

    如果函数定义了位置参数,那么在调用的时候,函数必须按顺序传递,如果顺序搞错就有可能发生异常
    >>> foo(18,'alben')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 2, in foo
    TypeError: %d format: a number is required, not str

    Python还是把18作为第一个参数传递给了函数,这时候就引发了TypeError异常,%d要求的是int不是str,传入的alben是一个str

    2,关键字参数
    >>> foo(age=18,name='alben')
    My name is alben, I am 18 years old
    这样的函数传递方式就是关键字函数,在传递的时候就不需要严格按照定义参数的顺序。

    默认参数:
    用途——指定默认参数,如果调用的时候没有指定实参,就用默认值作为实参。
    例如:
    def self_introduction(name,age,work='IT'):
    print("My name is %s. I am %d years old. I am a %s enginner" %(name,age,work))

    self_introduction(age=18,name='alben')

    这时候,因为alben确实就是一个IT工程师,所在在调用函数的时候就不需要给work传递实参了,效果:
    My name is alben.
    I am 18 years old.
    I am a IT enginner


    Why 默认参数:
    默认参数让程序的健壮性上升到极高的级别,因为它们补充了标准位置参数没有提供的一些灵活性。这种简洁极大的
    帮助了程序员,当少几个需要操心的参数时候,生活就不在那么复杂。

    note:
    默认参数可以有多个,但是默认参数必须在形参集合的最后。


    可变长度参数:
    可能会有需要用函数处理可变数量参数的情况,这时可使用可变长度的参数列表。变长的参数在函数声明中不是显示的命令的,
    因为参数的数目在运行之前是未知的,python用2种办法来支持可变长参数。

    非关键字可变长参数(元组)
    * 代表非关键字可变长参数,在声明的时候必须在默认参数后面。
    例如:
    >>> def foo(*arg):
    ... for i in arg:
    ... print(i)
    ...
    >>> foo(1,2,3,4,5)
    1
    2
    3
    4
    5

    关键字变量参数(字典)
    在我们有不定数目或者额外集合的关键字的情况下,参数被放入一个字典中,字典中的键为参数名,值为对应的参数值。
    >>> def foo(**arg):
    ... for eacharg in arg:
    ... print("xarg: %s = %s" % (eacharg,arg[eacharg]))
    ... dict1 = arg
    ... return dict1
    ...
    >>> foo(name='alben',age=18,work='enginner')
    xarg: work = enginner
    xarg: name = alben
    xarg: age = 18
    {'work': 'enginner', 'name': 'alben', 'age': 18}

  • 相关阅读:
    ASP.NET SignalR HubPipelineModule
    MongoDB新版本特性
    Xamarin向iOS和Android引入C# Async支持
    Redis开源文档《Redis设计与实现》[转]
    WCF的追踪分析工具——SvcPerf
    Windows Azure移动服务更新,支持Android、活动目录和更多语言,并支持在东亚地区部署服务
    社区网站系统 jsGen
    单元测试同时支持 NUnit/MSTest
    .NET的微型Web框架 Nancy
    通过二维码登录(CSC模式)
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/7005742.html
Copyright © 2020-2023  润新知