函数的返回值及参数

1.为什么要用函数

如果不用len()这个Python内置函数统计“字符串”的长度,该如何获取长度?

s="hello word"
n=0
for i in s:
    n+=1
print(n)

现在要计算另一个“字符串”的长度,“hello wuxi”

s="hello wuxi"
n=0
for i in s:
    n+=1
print(n)

现在产生了一个问题:实现相同的功能,代码冗余。

而python内置的len()函数,读起来简单,一看便知这个功能。而上面的两组代码“可读性差”

print(len(s1))
print(len(s2))

2.初始函数定义与调用

def func():
    代码1
    代码2
    ...
func()

注意事项:

一、def 关键字开头,后面接函数名加()

二、函数名的命名规范和“变量名”相同。只能包含字符串、下划线和数字且不能以数字开头、要见名知意。

三、函数的注释。用上下三引号表示

四、函数的调用。函数名加括号

三、函数的返回值

使用len()方法会得到一个“返回值”

l = [1,2,3,4,5]
res=len(l)
print(res)

一、return关键字

return是函数返回值的关键字,没有他,返回值为None。

可返回任意类型的数值

1.1没有返回值

下面就是无return,则返回None的例子

def mylen():
    """计算s1的长度"""
    s1 = "hello world"
    n = 0
    for i in s1:
        n = n+1
#函数调用
str_len = mylen()
print(str_len)
#结果为None

1.2只写一个return

return后面不写其他内容也返回None,既然没有返回内容,那为什么要写return,因为return还有一个用法:结束整个函数

def func():
    print(111)
    return
res=func()
print(res)
View Code

1.3返回一个值

则返回return后的内容

def func():
    print(111)
    return 1
ret = func()
print(ret)
View Code

 注意return和返回值之间要有空格

1.4返回多个值

  返回多个值,并以元祖形式括起来。因为在Python中用逗号分隔的值就被认为是元祖

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

  返回多个值并以元祖形式返回,可以考虑用多个值接收

def func():
    return [1,2],[3,4]
res=func()
print(res)
#([1, 2], [3, 4])
View Code

  可以考虑用多个值接收。使得据结果不为元祖

def func():
    return 1,['a','b'],'e'
res=func()
a,b,c=res
print(a,b,c)
View Code

  返回的是元祖形式,若不想以元祖形式返回,则可以用容器抱起来

  因为元祖是用来存放多个值的

def func():
    return [[1,2],[3,4]]
res=func()
print(res)
#结果[[1, 2], [3, 4]]
View Code

 四、函数的参数

  没有参数,我们只能统计固定的长度。有了函数的参数,就可以计算任何内容的长度了

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

  我们依据参数告诉函数要计算的字符长度是谁的。这个过程就是传参的过程

  形参和实参

  参数分为定义函数阶段括号内的(形参)。还有调用调用函数时括号内的“实际参数(实参)”。

  传递多个参数

     多个参数之间用逗号分隔

def my_max(x,y)

  位置参数

    站在实参角度

      1.按位置实参(正常传值)

ma = mymax(10,20)

      2.关键字实参

ma = mymax(y = 10,x = 20)

      3.关键字和位置实参混合

       注意:位置实参必须在关键字实参的前面

ma = mymax(10,y = 20)

   默认参数

      在函数的定义阶段,形参(变量名)就已经被赋值了
      # 在调用的时候可以不为默认值形参传值,默认使用定义阶段就已经绑定的值
      # 在调用的时候如果可以给默认值形参传值 传了那么就使用你传的值

      将变化较小的值设置成默认参数,有需要改变的,可以重新设置  

def stu_info(name,sex = "male"):

      参数陷阱:默认参数是一个可变数据类型。比如是列表

def func(a,l=[]):
    l.append(a)
    # return ls
    print('点名簿包含:%s'%l)
func('wuxi')
func('sll')
func('zdq')
View Code

  可变长参数

     按照位置传值,多余的值同一由args接收,保存成元祖(元祖就是用来接收多个值的)

     *在实参中会将列表、元祖、集合、字符串打散成位置实参(for循环)一一传入函数中。

func(*[1,2,3])
#func(1,2,3)

     **在实参中会将字典拆分成k=value的形式。

func(**{‘x’:1,'y':2})
func(x=1,y=2)

    *在形参中

    接收多余的位置实参,不接收关键字实参

    **形参

    接收关键字实参,保存成字典形式

原文地址:https://www.cnblogs.com/ZDQ1/p/11157717.html