初识函数

1.什么是函数:

函数就是具有某种功能的工具

2.函数的作用:

提高开发效率

减少代码冗余

提高程序的扩展性

3.如何定义一个函数

基本式:def+函数名(参数):

def:定义一个函数的关键字

函数名:函数名的命名规则变量名一致

    a.不能用关键字命名

    b.函数名的命名也要左到见名知意

def func():
    pass

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

4.函数的调用:

基本式:函数名+括号

func()

ps:函数必须先定义在使用,定义了的函数可以在任意位置使用

  函数名只要加了括号就会立即执行函数体代码

    代码中遇到函数名加括号优先级最高,先执行函数再看下面的代码

5.函数的返回值

def my_len():
    s = 'hello world'
    n = 0
    for i in s:
        n += 1
    print(n)

res = my_len()
print(res)  # None

自己编写的函数没有返回值,只能执行固定的打印操作,只能固定的统计某一容器的长度,当我们需要对函数运行的结果进行处理时,这时候就需要一个和返回值

函数内想要有返回值必须用关键字return,其分为以下几种情况:

  1.不写return

  2.只写return

  3.写return None

  4.写return返回一个值

  5.写return返回多个值

5.1不写return,函数默认返回None

def func():
    print('hahaha')
res = func()
print(res)  # None

5.2只写return:返回的时None,还有结束函数的作用

def func():
    l = ['jason','egon','tank']
    while True:
        for i in l:
            if i == '11':  # 当i为11的时候 直接结束函数运行
                # break
                return
                # print('asdasdkljlsjadl')  # 这一行代码拥有都不会运行
            print(i)
res = func()
print(res)  # None

5.3写return None返回值时None,同时结束函数运行

def func():
    a +=1
    return None
    print('happy')  # 不会执行,函数在return处直接结束
res = func()
print(res)  # None

5.4写return返回一个值,这个值可以时任何类型

def func():
    return '123'
def func1():
    return [1,2,3]
def func2():
    return {'name':'jason'}
def func3():
    return (1,)
def func4():
    return {1,2,3,4,5}
def func5():
    return True
print(func(),func1(),func2(),func3(),func4(),func5())

5.5写return返回多个值,返回值的形式为元组

def func():
    return 1,2,3,4  
res = func()
print(res)  # 返回的是(1, 2, 3, 4)


def func1():
    return 'a','b','c' 
res = func1()
print(res)   # ('a', 'b', 'c')

def func2():
    return [1,2,3],[1,2,3],[1,2,3] 
res1 = func2()
print(res1)   # ([1, 2, 3], [1, 2, 3], [1, 2, 3])


def func3():
    return {'name':'zhang'},{'username':'wang'},{'user_name':'jia'}  
res2 = func3()
print(res2)  # ({'name':'zhang'},{'username':'wang'},{'user_name':'jia'})
View Code

5.6返回的多个值若不想return处理,可以自己手动加自己想要的数据类型

def func4():
    return [[1,2,3,4],[1,2,3,4],[1,2,34]]
res = func4()
print(res)  # [[1,2,3,4],[1,2,3,4],[1,2,34]]

6.函数的参数

6.1函数参数的两大类型

  形参:在定义函数阶段,括号内的变量名

  实参:在函数调用阶段括号内实际传入的值

6.2形参和实参的关系

  形参相当于变量名,实参相当于变量的值

  函数传参的过程及时给形参变量名赋值的过程

ps:形参和实参的绑定关系置在函数的调用阶段有效,函数运行结束关系自动解除,只在函数体内部有效,函数外部无任何影响

6.3一个完整函数的简易结构

  

def  函数名(形参1,形参2,形参3...):
  '''
  函数的注释(按住shift敲三个引号,然后回车,会自动出现)
  在此处简述函数的作用
  :param 形参1:对形参1的解释
  :param 形参2:对形参2的解释
  :param 形参3:对形参3的解释
  :return:对函数返回值的解释
  '''
函数体代码1 函数体代码2 ...
return 函数的返回值

7.位置参数

7.1位置形参

位置形参:在函数定义阶段按照位置从左到右依次书写的变量名

ps:位置形参在定义阶段必须给其传值,且在调用函数阶段多一个实参或者少一个实参都不行

def my_max(x,y):
    print(x,y)
    if x > y:
        return x
    else:
        return y
res = my_max(1)  # 在调用函数的时候 少一个实参不行
res = my_max(1,2,3)  # 在调用函数的时候 多一个实参也不行

res = my_max(20,10)  # 20

7.2位置实参

位置实参:在函数调用阶段传入函数的参数会按照位置一一对应给形参

位置实参的几种方式:1.按位置传参

           2.关键字传参

           3.位置传参加关键字传参

def func(x,y,z):
    pass
func(1,2,3)  # 位置传参
func(x=1,y=2,z=3)  # 关键字传参
func(1,z=3,y=2)  # 混用
func(x=1,2,z=3)  # 报错,位置传参必须在关键字传参前面

ps:在函数调用阶段,位置参数必须在关键字参数前面,且同一个形参不能被多次传值

8.默认值参数

默认值参数:在函数定义阶段,形参就已经被赋值了

ps:在调用阶段可以不给默认参数传值,因为在定义阶段就已经被赋值了。

  如果在调用阶段给默认传输传值了,那么就用新传入的值

  在定义阶段默认值参数必须放在位置形参后面

def func(x,y=100):
    pass
def func1(y=100,x):  # 报错,位置参数要在默认值参数之前
    pass
def func2(x,y=100):
    if x >= y:
        return x
    
    return y
func2(20,10)  # 20

9.可变长参数(*和**)

*:在形参中可以接收实参中溢出的位置实参,以元组的形式赋值给*后面的变量名

def func(x,y,*z):
    print(x,y,z)  # z = (3, 4, 5, 6) 
func(1,2,3,4,5,6)    

*:在实参中将列表,元组,集合中的元素打散成位置形参的形式传函数

def func(x,y,z):
    pass
func(1,*[2,3])  # 将列表[2,3]打散传值给y,z *的内部可以看成是for循环

ps:*只能接收实参中的位置参数不能接收关键字参数

**:在形参中可以i接受溢出的关键字参数,以字典的形式赋值给**后面的变量名

def func(x,y,**z):
    print(x,y,z)  # z = {'z': 1, 'a': 1, 'b': 2, 'c': 3}
func(x=1,y=2,z=1,a=1,b=2,c=3)
# **会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字字典的value就是关键字的名字指向的值  将字典交给**后面的变量名

**:在实参中会把字典才成key=value的形式按照关键字参数传给函数

def func(x,y,z):
    print(x,y,z)
d = {'x':1,'y':2,'z':333}
func(**d)   #和func(x=1,y=2,z=333)等价
原文地址:https://www.cnblogs.com/z929chongzi/p/11158446.html