zoukankan      html  css  js  c++  java
  • 函数基础

    什么是函数?

      函数是指将一段代码通过函数名封装起来,具备某一功能的工具

      函数是逻辑结构化和过程化的一种编程方法

    使用函数的好处:

    1.   代码的组织结构清晰,可读性强
    2.   减少代码的重复性
    3.   方便管理,维护简单

    函数的分类:

    1.   内置函数:python解释器定义好的,自带的函数  例如:len() ; max() ; min()
    2.   自定义函数:内置函数所提供的功能是有限的,我们需要根据自己的要求,定义一些具有特定功能的函数    





    函数的使用原则:先定义,再调用

    函数的定义:只检测语法,不执行代码(语法错误会在函数定义时检测出来;而代码的逻辑错误只有在执行时才会被检测出来)
        1.有参函数:需要接收函数调用时传来的参数,才能执行相应的逻辑
                def 函数名(形式参数1,形式参数2...):
                   '''注释'''
                   函数体
                return 返回值
                函数名(实际参数1,实际参数2...)
        2.无参函数:函数调用时,不需要传参,执行相应的逻辑
                def 函数名():
                   '''注释'''
                   函数体
                return 返回值
                函数名()
        3.空函数:写项目时,设计代码的逻辑结构
                def 函数名(形式参数1,形式参数2...):
                   '''注释'''
                   pass

    函数的调用:通过函数名找到内存地址,再对函数进行调用
    1.     语句形式:函数名(实际参数1,实际参数2...)
    2.     表达式形式:3*len(‘hello’)
    3.     当做另一个函数的参数:range(len(‘hello’))

    函数的返回值:return
      调用函数时,遇到return,立即终止函数的执行,并return返回值
      函数体内,可以有多个返回值,但只能执行一次(类似于if判断)
    1.     无return    返回None
    2.     return一个值  返回原值
    3.     return多个值  以元组形式返回多个值
      什么时候应该有返回值:
        调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
        通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
      什么时候不应该有返回值:
        调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
        通常无参函数不需要有返回值





    函数的参数:(形式参数,实际参数)
    形参:在定义函数时,括号内的参数为形参,相当于变量名
    实参:在调用函数时,括号内的参数为实参,相当于变量值
    在调用阶段,实参才会绑定给形参;调用结束,解除绑定
    排序:位置参数,默认参数,*args,命名关键字参数,**kwargs

    一。位置参数:按照从左到右的顺序依次定义的参数
    位置形参:必须被传值的参数,多一个不行,少一个也不行
    位置实参:与形参按照位置一一对应
    def foo(x,y):
    print(x,y)
    foo(1,2)


    二:关键字参数:在函数调用阶段,按照key=value的形式定义实参
    可以不依赖位置而指名道姓地给形参传值
    需要注意的问题(可以与位置实参混用,但是):
    1. 位置实参必须在关键字实参的前面
    2. 不能为一个形参重传值
    def foo(x,y):
    print(x,y)
    print(foo(1,2,y=20))


    三:默认参数:在定义函数阶段,已经为形参赋值了,
    意味着在调用阶段可以不传值;也可以传值,但以所传的值为准
    注意的问题:
    1 默认参数的值,只在定义时赋值一次
    2 位置形参应该在默认参数的前面
    3 默认参数的值应该是不可变类型
    def foo(x,y=11):
    print(x,y)
    foo(1,y=2)


    四。可变长参数
    实参可变长度指的是:实参值的个数是不固定
    而实参的定义形式无非两种:1、位置实参,2、关键字实参
    针对这两种形式的实参个数不固定,相应的,形参也要有两种解决方案
    *
    **

    针对按照位置定义的溢出的那部门实参,形参:*args
    *将溢出的位置实参,以元组的形式,赋值给args;如果没有溢出,args=None
    def func(x,y,z,*args):
    print(x,y,z)
    print(args)
    func(1,2,3,4,5,6)
    func(1,2,3,*[4,5,6])/func(1,2,3,*(4,5,6))/func(*[1,2,3,4,5,6] ===》 func(1,2,3,4,5,6)
    实参中出现*,将[]或()打散,变为func(1,2,3,4,5,6)形式

    针对按照关键字定义的溢出的那部分实参,形参:**kwargs
    **将溢出的关键字实参,以字典的形式,赋值给kwargs;如果没有溢出,kwargs=None
    def foo(x,y,**kwargs): # kwargs={'a':1,'z':3,'b':2}
    print(x,y)
    print(kwargs)
    foo(y=2,x=1,z=3,a=1,b=2)
    foo(1,2,z=3,a=1,b=2)
    foo(y=1,x=2,**{'a':1,'b':2,'c':3}) #foo(x=2,y=1,c=3,b=2,a=1)
    foo(**{'x':1,'a':1,'b':2,'c':3}) #foo(x=1,c=3,b=2,a=1)
    实参中出现**,将{}打散,变为foo(x=1,c=3,b=2,a=1)形式


    五。命名关键字参数(了解):形参中,在*后定义的参数
    特性:必须按照关键字实参的形式传值
    def foo(x,y,*,a,b):
    print(x,y,a,b)
    foo(1,2,a=3,b=4)

    def foo(x,y,*args,a,b):
    print(args)
    print(x,y,a,b)
    foo(10,22,33,44,a=2,b=3)

    def foo(x,y=20,*args,a=1,b):
    print(args)
    print(x,y,a,b)
    foo(10,b=3)
    foo(10,22,33,44,a=2,b=3)






























  • 相关阅读:
    手机通讯录实现
    leetcode
    android 上手维修设备和推断启动服务
    MVC Code First (代码优先)
    10000阶乘
    telnet发电子邮件
    nodejs显现events.js:72抛出错误
    指针
    脑洞门大开思维工具:六顶思考帽
    C#实现CAD数据转shape或mdb
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/7747064.html
Copyright © 2011-2022 走看看