zoukankan      html  css  js  c++  java
  • 初识函数

    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)等价
  • 相关阅读:
    回旋矩阵
    Python学习手记——了解Python
    My first Qt program
    10种使你的C程序更加高效的方法
    GCC指令
    缓冲思想
    Python学习手记——Whetting your appetite
    分割视图
    MSN Messenger 中的漏洞可能导致信息泄露 (838512)
    ASP.NET Popup Control
  • 原文地址:https://www.cnblogs.com/z929chongzi/p/11158446.html
Copyright © 2011-2022 走看看