zoukankan      html  css  js  c++  java
  • Python的学习之旅———函数

    函数是什么

    函数就是锤子,就是建好的工具.

    函数分为内置函数 和自定义函数.

    定义一个函数

    def 函数名(参数1,参数2,参数3,...):

    '''注释'''

    函数体

    return 返回的值

    函数需要先定义在调用

    定义阶段 def foo():

    print('from foo')

    bar()

    def bar():

    print('from bar')

    #调用阶段 foo()

    无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印

    有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值

    空函数:设计代码结构

    #定义阶段
    def test_tag(tag,n): #有参数
        print(tag*n)
    def test_msg(): #无参数
        print('hello world')
    #调用阶段
    test_tag('*',12)
    test_msg()
    test_tag('*',12)
    '''
    ************
    hello world
    ************
    '''
    结论:
    定义时无参,意味着调用时也无需传入参数
    定义时有参,意味着调用时则必须传入参数
    空函数
    def ls(dirname): ''' :param dirname: :return: ''' pass

    函数的调用 

    函数的调用:函数名加括号
    1 先找到名字
    2 根据名字调用代码

    函数返回值

    无return->None
    return 1个值->返回1个值
    return 逗号分隔多个值使用元组

    函数调用的三种形式语句形式:foo()

    表达式形式:3*len('hello')

    当中另外一个函数的参数:range(len('hello'))

    形参与实参

    个人认为 形参就是函数def是那一行 def foo(x,y,z).如果最开始就把形参写入默认值 那么我们就说他是 默认参数 实参

    关键字参数的标准是  :实参是 key, value形式

    位置参数:按照从左到右的顺序定义的参数
    位置形参:必选参数
    位置实参:按照位置给形参传值

    可变长参数: 

    可变长指的是实参值的个数不固定
    而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,为了解决这个问题    位置*args,关键字**kwargs

    def fun(a, *args):

    ... print "a is ", a

    ...print "args is ", args

    >>> fun(11,12,34,43)

    a is 11

    args is (12, 34, 43)

    拆数列、传位置参数意味着fun(*l)与fun(1,2,3)是等效的,因为l = [1,2,3]

    命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参(k=v)的形式传递

     1 对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
     2 
     3 仍以person()函数为例,我们希望检查是否有city和job参数:
     4 
     5 def person(name, age, **kw):
     6     if 'city' in kw:
     7         # 有city参数
     8         pass
     9     if 'job' in kw:
    10         # 有job参数
    11         pass
    12     print('name:', name, 'age:', age, 'other:', kw)
    13 但是调用者仍可以传入不受限制的关键字参数:
    14 
    15 >>> person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456)
    16 如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
    17 
    18 def person(name, age, *, city, job):
    19     print(name, age, city, job)
    20 和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
    21 
    22 调用方式如下:
    23 
    24 >>> person('Jack', 24, city='Beijing', job='Engineer')
    25 Jack 24 Beijing Engineer
    26 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
    27 
    28 def person(name, age, *args, city, job):
    29     print(name, age, args, city, job)
    30 命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:
    31 
    32 >>> person('Jack', 24, 'Beijing', 'Engineer')
    33 Traceback (most recent call last):
    34   File "<stdin>", line 1, in <module>
    35 TypeError: person() takes 2 positional arguments but 4 were given
    36 由于调用时缺少参数名city和job,Python解释器把这4个参数均视为位置参数,但person()函数仅接受2个位置参数。
    37 
    38 命名关键字参数可以有缺省值,从而简化调用:
    39 
    40 def person(name, age, *, city='Beijing', job):
    41     print(name, age, city, job)
    42 由于命名关键字参数city具有默认值,调用时,可不传入city参数:
    43 
    44 >>> person('Jack', 24, job='Engineer')
    45 Jack 24 Beijing Engineer
    46 使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数:
    47 
    48 def person(name, age, city, job):
    49     # 缺少 *,city和job被视为位置参数
    50     pass
  • 相关阅读:
    transient关键字详解
    大话设计模式之装饰模式
    springboot读取properties(yml)的几种常用方式
    springboot整合druid数据库连接池并开启监控
    初学js的穷举思想
    循环语句
    条件分支语句
    运算符
    案例(-)
    seo搜索引擎优化
  • 原文地址:https://www.cnblogs.com/surehunter/p/7561193.html
Copyright © 2011-2022 走看看