• 函数的返回值


    函数的返回值

    刚刚我们就写了一个函数,这个函数可以帮助我们计算字符串的长度,并且把结果打印出来。但是,这和我们的len方法还不是太一样。哪里不一样呢?以前我们调用len方法会得到一个值,我们必须用一个变量来接收这个值。

    str_len = len('hello,world')

    这个str_len就是‘hello,world’的长度。那我们自己写的函数能做到这一点么?我们也来试一下。

    函数调用的结果

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        print(length)
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)

    很遗憾,如果你执行这段代码,得到的str_len 值为None,这说明我们这段代码什么也没有给你返回。

    那如何让它也想len函数一样返回值呢?

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)

    我们只需要在函数的最后加上一个return,return后面写上你要返回的值就可以了。

    接下来,我们就来研究一下这个return的用法。

    return关键字的作用

      return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

      这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

    要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

    没有返回值

      不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况。

    不写return 

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        print(length)
    
    #函数调用
    str_len = mylen()
    #因为没有返回值,此时的str_len为None
    print('str_len : %s'%str_len)

      只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数

    只写return  

    def ret_demo():
        print(111)
        return
        print(222)
    
    ret = ret_demo()
    print(ret)

          return None:和上面的两种情况一样,我们一般不这样写。

    def ret_demo():
        print(111)
        return None
        print(222)
    
    ret = ret_demo()
    print(ret)

    返回一个值

          刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。  

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)

      注意:return和返回值之间要有空格,可以返回任意数据类型的值

    返回多个值

      可以返回任意多个、任意数据类型的值

    def ret_demo1():
        '''返回多个值''' 
        return 1,2,3,4
    
    
    def ret_demo2():
        '''返回多个任意类型的值'''
        return 1,['a','b'],3,4
    
    ret1 = ret_demo1()
    print(ret1)
    ret2 = ret_demo2()
    print(ret2)

      返回的多个值会被组织成元组被返回,也可以用多个值来接收

    def ret_demo2():
        return 1,['a','b'],3,4
    
    #返回多个值,用一个变量接收
    ret2 = ret_demo2()
    print(ret2)
    
    #返回多个值,用多个变量接收
    a,b,c,d = ret_demo2()
    print(a,b,c,d)
    
    #用多个值接收返回值:返回几个值,就用几个变量接收
    a,b,c,d = ret_demo2()
    print(a,b,c,d)

      原因:  

    >>> 1,2  #python中把用逗号分割的多个值就认为是一个元组。
    (1, 2)
    >>> 1,2,3,4
    (1, 2, 3, 4)
    >>> (1,2,3,4)
    (1, 2, 3, 4)
    #序列解压一
    >>> a,b,c,d = (1,2,3,4)
    >>> a
    1
    >>> b
    2
    >>> c
    3
    >>> d
    4
    #序列解压二
    >>> a,_,_,d=(1,2,3,4)
    >>> a
    1
    >>> d
    4
    >>> a,*_=(1,2,3,4)
    >>> *_,d=(1,2,3,4)
    >>> a
    1
    >>> d
    4
    #也适用于字符串、列表、字典、集合
    >>> a,b = {'name':'eva','age':18} 
    >>> a
    'name'
    >>> b
    'age'
  • 相关阅读:
    卷积神经网络中的傅里叶变换:1024x1024 的傅里叶卷积
    在不平衡数据上使用AUPRC替代ROCAUC
    论文推荐:TResNet改进ResNet 实现高性能 GPU 专用架构并且效果优于 EfficientNet
    信息安全风险评估
    剑指 Offer
    Docker创建容器时默认的共享内存shm太小报错,程序无法正常运行
    VS Code 连接访问本地主机上的Docker容器
    关于protobuf报错:If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
    训练神经网络时报错:can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
    我学习使用五笔的经验
  • 原文地址:https://www.cnblogs.com/yinfutao/p/12411827.html
Copyright © 2020-2023  润新知