• Python函数基础


    一、函数概念

    函数是组织好的、可重复使用的,用来实现单一或相关功能的代码段

    函数能提高应用的模块性和代码的重复利用率。Python提供了许多内建函数,也可以自己创建函数,这被叫做用户自定义函数

    函数分类:内置函数、自定义函数

    不使用函数的问题:组织结构不清晰、代码冗余、无法统一管理且维护难度大

    二、定义函数

    函数代码块以def关键词开头,后接函数标识符名称和圆括号()

    任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数

    定义函数的三种形式:无参(只执行一些操作)、有参(根据传进的参数执行相应的逻辑)、空函数(设计代码结构)

    函数的第一行语句可以选择性的使用文档字符串用于存放函数说明

    函数内容以冒号起始,并且缩进

    return[表达式]结束函数,选择性的返回一个值给调用方。不带表达式的return相当于返回None

    函数在定义阶段,只检测语法,不执行代码

    语法:

    def 函数名(参数列表):

        函数体

    实例:

    def hello():
        print('Hello World!')
    
    hello()

    三、 return语句

    return [表达式] 语句用于退出函数,选择性的向调用方返回一个表达式。不带参数值的return语句返回None

    一个函数没有return时则返回None,等同于return None

    return跟一个值则返回该值,值没有数据类型限制

    return跟多个值则返回一个元组

    什么时候需要有返回值:

    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值

    通常有参函数需要有返回值,输入参数经过计算得到一个最终的结果

    什么时候不需要有返回值:

    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值

    通常无参函数不需要有返回值

    实例:

    def my_sum (arg1,arg2):
        total = arg1 + arg2
        return total
    
    res = my_sum(10,20)
    print(res)

    四、函数调用的形式

    1、语句形式,例:foo()

    2、表达式形式,例:res=len('hello')

    3、当做另一个函数的参数,例:range(len('hello'))

    五、 函数的参数

    函数的参数分两种:

      形参:函数中的参数

      实参:提供给函数调用的值

    参数定义顺序:

      位置参数,默认参数,*args,命名关键字参数,**kwargs

    参数赋值方式:

    1、  位置参数:按照从左到右的顺序定义的参数,调用时的数量必须和声明时的一样

    def foo(x,y):
        print(x)
        print(y)
    
    foo(1,2)

    2、  关键字参数:按照“参数名=参数值”的形式定义,参数的顺序可以与声明时不一致。需要注意的是:关键字实参必须在位置实参右边,对同一个形参不能重复传值

    def foo(x,y):
        print(x)
        print(y)
    
    foo(y=2,x=1)

    3、  默认参数:调用函数时,如果没有传递参数,则会使用默认参数。需要注意的是:默认参数必须在位置形参右边,通常应该定义成不可变类型

    def foo(name,age,sex='male'):                   #在定义阶段就已经为形参赋值了
        print(name,age,sex)
    
    foo('zhangsan',age=18)
    foo('lisi',age=20)
    foo('wangwu',21,sex='female')                   #也可以为默认参数赋值

    4、  可变长参数:针对实参在定义时长度不固定的情况,应该从形参的角度找到可以接收可变长实参的方案,这就是可变长参数(形参)。针对位置参数使用*args,关键字参数使用**kwargs

    def foo(x,y,*args):                             #加了*号的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组
        print(x)
        print(y)
        print(args)
    
    foo(1,2,3,4,5,6)
    
    #执行结果如下:
    1
    2
    (3, 4, 5, 6)
    def foo(x,y,**kwargs):                          #加了**的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空字典
        print(x)
        print(y)
        print(kwargs)
    
    foo(x=1,y=2,z=3,a=4,b=5,c=6)
     
    #执行结果如下:
    1
    2
    {'z': 3, 'a': 4, 'b': 5, 'c': 6}

    扩展用法:

    def foo(x,y,*args):
        print(x)
        print(y)
        print(args)
    
    foo(1,2,*(3,4,5,6))                             #实际是:*args = *(3,4,5,6),结果为args = 3,4,5,6。可以简单拆开打回原形
    
    #执行结果如下
    1
    2
    (3, 4, 5, 6)
    def foo(x,y,**kwargs):
        print(x)
        print(y)
        print(kwargs)
    
    foo(x=1,y=2,**{'z':3,'a':4,'b':5,'c':6})
    
    #执行结果如下:
    1
    2
    {'z': 3, 'a': 4, 'b': 5, 'c': 6}

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

    def foo(*args,y):
        print(args)
        print(y)
    
    foo(1,2,3,4,5,y=6)

    六、 函数对象

    函数是第一类对象,即函数可以当做数据传递

    1、  可以被赋值

    def foo():
        print('Hello World!')
    
    f = foo
    f()

    2、  可以当做参数传入

    def foo():
        print('Hello World!')
    
    def wrapper(func):
        func()
    
    wrapper(foo)

    3、  可以当做函数的返回值

    def foo():
        print('Hello World!')
    
    def wrapper(func):
        return func
    
    res = wrapper(foo)
    print(res)

    4、  可以当做容器类型的元素

    def foo():
        print('Hello World!')
    
    dict = {
        'func':foo
    }
    
    dict['func']()
  • 相关阅读:
    strpos 判断字符串是否存在
    TP 自动验证
    label 标签的用法,点label选中单选、复选框或文本框
    str_replace 替换 小技巧
    数据库文件MDF的空间占满了,没有自动增长是怎么回事?
    (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解
    (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析
    (1.16)mysql server优化之buffer pool
    COALESCE函数
    linux网络设置和虚拟机克隆转移之后网卡找不到
  • 原文地址:https://www.cnblogs.com/yanmj/p/7209530.html
Copyright © 2020-2023  润新知