• python基础6函数 柒哥


    Python中函数分两类:内置函数和自定义函数;内置函数放到后面来说,这次主要是自定义函数

    语法:

    使用 def 关键字

    def 函数名(参数列表):
        函数体
    

    注:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号 : 起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
    • 函数定义并不会执行函数体;只有当函数被调用时才会执行此操作

    实例:

    首先定义一个加法函数

    def add(x,y):       #定义一个加法函数
        return x+y      #缩进4个空格
    add(3,4)            #调用函数计算3+4的和
    >>> 7
    

    当一个或多个 形参 具有 形参 = 表达式 这样的形式时,该函数就被称为具有“默认形参值”。
    在形参有默认值的情况下,调用函数的时候就该形参酒可以被忽略,默认形参值会在执行函数定义时从左到右的顺序被赋值。

    def add(x,y=2):       #定义一个加法函数,y形参的默认值为2
        return x+y      #缩进4个空格
    add(3)            #调用函数计算3+2的和
    >>> 5
    

    注:

    • 给形参赋默认值的时候必须将该形参放到没有默认值的形参后方(右侧)

    • def add(x,y=2):     # 有效
      def add(x=2,y):     # 无效
      

    参数

    上面已经提到了形参,可能有些小伙伴不知道形参时什么,下面就介绍一下函数当中的几种参数类型

    • 位置参数
    • 默认值参数
    • 关键字参数
    • 不定长参数
    位置参数

    位置参数,也可以叫必传参数、形参。
    从名字也能看出来,调用函数的时候这个是必须要传的,不然就会报一场了

    def positional(param):
        print(param)
        
    positional()
        
    >>> Traceback (most recent call last):
    >>>     File "test.py", line 13, in <module>
    >>>        positional()()
    >>> TypeError: positional()() missing 1 required positional argument: 'param'
    
    def positional(param):
        print(param)
        
    positional("位置参数")
    
    >>> "位置参数"
    
    默认值参数

    默认值参数,相当于形参的变相(函数定义的时候给形参赋上默认值)
    最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用,比如:

    def add(x, y=3, z=4)
        return x+y+z
            
    # 这个函数可以通过几种方式调用:
    add(2)
    >>> 9
    add(2, 2)
    >>> 8
    add(2, 8, 10)
    >>> 20
    
    关键字参数

    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

    使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值

    def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
        print("-- This parrot wouldn't", action, end=' ')
        print("if you put", voltage, "volts through it.")
        print("-- Lovely plumage, the", type)
        print("-- It's", state, "!")
        
        
    parrot(voltage=1000000, action='VOOOOOM')
    >>> -- This parrot wouldn't VOOOOOM
    >>> if you put 1000000 volts through it.
    >>> -- It's a stiff !
    
    parrot(action='VOOOOOM', voltage=1000000)
    >>> -- This parrot wouldn't VOOOOOM
    >>> if you put 1000000 volts through it.
    >>> -- It's a stiff !
    
    parrot('a thousand', state='pushing up the daisies')
    >>> -- This parrot wouldn't voom
    >>> if you put a thousand volts through it.
    >>> -- It's pushing up the daisies !
    
    # 无效调用
    parrot()                     # 缺少必需的参数
    parrot(voltage=5.0, 'dead')  # 关键字参数后的非关键字参数
    parrot(110, voltage=220)     # 相同参数的重复值
    parrot(actor='John Cleese')  # 未知关键字参数
    

    注:

    • 在函数调用中,关键字参数必须跟随在位置参数的后面
    • 传递的所有关键字参数必须与函数接受的其中一个参数匹配(比如 actor 不是函数 parrot 的有效参数)
    • 它们的顺序并不重要。这也包括非可选参数,(比如 parrot(voltage=1000) 也是有效的)
    • 不能对同一个参数多次赋值
    不定长参数

    不定长参数也叫可变参数
    可以使用任意数量的参数调用函数,这些参数会被包含在一个元组里。
    通常使用*args表示,一般来说,这些 可变参数 将在形式参数列表的末尾,因为它们收集传递给函数的所有剩余输入参数。出现在 *args 参数之后的任何形式参数都是 ‘仅限关键字参数-**kwargs’。

    def concat(*args, sep="/"):
        return sep.join(args)
    
    concat("earth", "mars", "venus")
    >>> 'earth/mars/venus'
    concat("earth", "mars", "venus", sep=".")
    >>> 'earth.mars.venus'
    

    Lambda 表达式

    可以用 lambda 关键字来创建一个小的匿名函数
    Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式

    lambda函数可以引用所包含域的变量

    def make_incrementor(n):
        return lambda x: x + n
        
    f = make_incrementor(42)
    f(1)
    >>> 43
    f(0)
    >>> 42
    

    将lambda小函数作为参数传递

    pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
    pairs.sort(key=lambda pair: pair[1])
    print(pairs)
    >>> [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
    
    文档字符串

    第一行应该是对象目的的简要概述。为简洁起见,它不应显式声明对象的名称或类型,因为这些可通过其他方式获得(除非名称恰好是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。

    如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等。

    Python 解析器不会从 Python 中删除多行字符串文字的缩进,因此处理文档的工具必须在需要时删除缩进。 这是使用以下约定完成的。 文档字符串第一行 之后 的第一个非空行确定整个文档字符串的缩进量。(我们不能使用第一行,因为它通常与字符串的开头引号相邻,因此它的缩进在字符串文字中不明显。)然后从字符串的所有行的开头剥离与该缩进 "等效" 的空格。 缩进更少的行不应该出现,但是如果它们出现,则应该剥离它们的所有前导空格。 应在转化制表符为空格后测试空格的等效性(通常转化为8个空格)

    def my_function():
        """Do nothing, but document it.
    
        No, really, it doesn't do anything.
        """
        pass
        
    print(my_function.__doc__)
    
    Do nothing, but document it.
    
         No, really, it doesn't do anything.
    
  • 相关阅读:
    c++类的大小
    c++面向对象的程序设计
    c++拷贝控制
    vsftpd出现“Response: 500 OOPS: cannot change directory”解决方法(转载)
    CentOS 安装 MRTG 软件完成后的 403 Forbidden(转载)
    Linux服务器 /var/spool/clientmqueue 目录下产生大量文件的删除办法
    mysql修改端口经验
    yum install mysql(转载)
    yum install tomcat
    yun install java
  • 原文地址:https://www.cnblogs.com/qg-666/p/15021511.html
Copyright © 2020-2023  润新知