• Python函数-函数参数、返回值


    函数

    1、函数是什么?

           函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫         做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

          定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

    2、使用函数的好处:

        (1)简化代码
        (2)提高代码的复用性
        (3)代码可扩展

    3、python中函数的定义:

          定义函数使用def关键字,后面是函数名,函数名不能重复

    4、函数的参数

          函数在调用的时候,可以传入参数,有形参和实参

          形参

                 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

          实参

    •    实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。         
    •    函数调用结束返回主调用函数后则不能再使用该形参变量。
    •    简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数。

    举个例子:

    def hello():  # 定义函数
        # pass占位
        print('hello')  # 函数体
    # 调用函数
    hello()
    
    # 函数不调用不会被执行
    def write_file(file_name, content):
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(content)
    # 调用函数
    write_file('函数', '今天学习函数')
    write_file('函数2', '今天学习函数2')   #可调用多次

    函数的返回值

    •   每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None。
    •   函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。
    •   为什么要有返回值呢,是因为在这个函数操作完之后,它的结果在后面的程序里面需要用到。
    •   函数中的返回值使用return,函数在遇到return就立即结束。

    举个例子:

    def read_file(file_name):
        with open(file_name, encoding='utf-8') as f:
            content = f.read()
            # print(content)
            return content  # 函数的返回值
            # 函数没有写返回值的时候,默认返回的是None
    
    result = read_file('函数')
    print(result)
    
    # return俩作用:
            # 1、返回数据
            # 2、函数里只要遇到return(return必须写子函数里面),函数立马结束
    def t():
        for i in range(5):
            print('ccx')
            return
    t()

    函数练习

    # 1、传参
    # 2、把入参转成字符串
    # 3、判断参数小数点的个数是否是为1
    # 4、判断小数点前面的是否为整数
    # 5、判断小数后面是否为整数
    def is_float(s):
        s = str(s)
        if s.count('.') == 1:
            left, right = s.split('.')  # 1.1[1,1]
            if right.isdigit() and left.isdigit():
                if int(right) != 0 or int(left) != 0:  # 0.0判断是否不是0.0
                    return True
            if left.startswith('-') and left.count('-') == 1:
                num = left[1:]
                if num.isdigit() and right.isdigit():
                    if int(right) != 0 or int(left) != 0:
                        return True
        return False
    
    print(is_float('-0.1'))

    运行结果:

    True

    函数的四种形参类型:

    1、位置参数:

    •  位置参数,字面意思也就是按照参数的位置来进行传参,比如说上面的calc函数,x和y就是位置参数(必传的),有几个位置参数在调用时就传几个,否则报错。
    •  那如果有多个位置参数的话,记不住哪个位置传哪个了怎么办,可以使用位置参数的名字来指定调用。

    举个例子:

    # 位置参数
    def b(name, age):  # 必填参数,位置参数,一一对应
        pass
    b('ccx', 18)

           比如,上面的那个calc函数也可以使用calc(y=1,x=2)这样来调用,这种调用方式叫做关键字传参。

    2、默认参数:

    •   默认参数就是在定义形参的时候,给函数默认赋一个值。
    •   比如说数据库的端口,默认给它一个值,这样就算你在调用的时候没传入这个参数,它也是有值的。
    •   so,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义。

    举个例子:

    # 默认值参数
    def op_file(file, content=None):
        print(file)
        print(content)
    op_file('user.txt', 'user1')

    运行结果:

    user.txt
    user1

    默认值参数练习

    # 默认值参数练习
    def op_file(file, content=None):  # 默认值参数
        with open(file, 'a+', encoding='utf-8') as f:
            if content:
                f.write(str(content))
            else:
                f.seek(0)
                result = f.read()
                return result

    3、可变参数:

    •   可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。
    •   可变参数也是非必传的。
    # 可变参数
    def send_sms(*args):  # ‘*’个数不受限制,放到一个list里面
        print(args)
    send_sms(2, 4, 5, 68)
    # 注:
    # 这个是不是必须传的--非必传
    # 是否限制参数个数--不限
    # args是个什么--元组

    运行结果:

    (2, 4, 5, 68)

    4、关键字参数:

    •   关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个,当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面。
    •   使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。
    # 关键字参数
    def t(**kwargs):  # 传入时必须得指定关键字
        print(kwargs)
    t(age=18, name='bj')

    运行结果:

    {'age': 18, 'name': 'bj'}

    四种参数混合用(一般很少有人这样用)

    • 必填参数、默认值、可变参数、关键字参数 必须得按照这个顺序来
    • 必填参数必须写到默认值参数前面
    • 默认参数必须在可变参数前面
    • 可变参数必须在关键字参数前面
    # 四种参数连用
    def test(name, content=None, *args, **kwargs):
        print(name)
        print(content)
        print(args)
        print(kwargs)

    举个例子:

    def test(name, phone, qq, addr, sex):
        print(name)
        print(phone)
        print(qq)
        print(addr)
        print(sex)
    
    test('183', 'mingzi', '1111', 'beijing', '')  # 须一一对应
    test(age=36, addr='beijing', qq='1111', sex='xxx', name='xx')  # 指定关键字参数阔以
    test('xiaoming', '1823423', qq='xxx', sex='xxx', addr='xxxx')  # 这个阔以
    test('xiaoming', '1823423', qq='xxx', sex='xxx', 111)  # 错误的,不能这么写
    open('file', 'w', encoding='utf-8')
  • 相关阅读:
    基于ROS-Unity的移动机器人虚实交互场景构建方法的研究
    ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-
    ROS#资讯汇总(ROS、C#、.NET和Unity3D)
    论文阅读:A review and comparison of ontology-based approaches to robot autonomy ALBERTO
    商业RDF三元组数据库AllegroGraph
    Qt编写的项目作品30-录音播放控件(雨田哥作品)
    Qt编写的项目作品29-RTSP播放器+视频监控(海康SDK版本)
    Qt编写的项目作品28-RTSP播放器+视频监控(mpv版本)
    Qt音视频开发23-通用视频控件
    Qt音视频开发22-通用GPU显示
  • 原文地址:https://www.cnblogs.com/ccxm/p/12839968.html
Copyright © 2020-2023  润新知