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

    1. 什么是函数
    在程序具备某一功能的工具=》函数
    事先准备好工具=》函数的定义
    遇到应用场景、拿来就用=》函数的调用

    分为两大类:
    1. 内置函数
    2. 自定义函数


    2. 为何要用函数
    1. 代码冗余
    2. 程序的组织结构不清晰,可读性差
    3. 扩展性差

    3. 如何用函数
    函数的使用必须遵循一个原则:
    1. 先定义
    定义语法:
    def 函数名(参1,参2,参3,...):
    """
    文档注释
    """
    代码1
    代码2
    代码3
    ...
    return 值

    2. 后调用
    函数名()


    一:定义阶段:只检测语法,不执行代码
    def func():
        print('from func 1')
        print('from func 2')
    二.调用阶段:开始执行函数体代码
    def foo()
        print('from foo')
        bar()
    
    foo()
    def bar():
        print('from bar')
    
    
    def foo():
        print('from foo')
        bar()
    
    foo()
    
    
    def foo():
        print('from foo')
        bar()
    def bar():
        print('from bar')
    foo()

    三:定义函数的三种形式
    # 三:定义函数的三种形式
    # 1. 无参函数
    # def func():
    #     print('from func')
    #
    # func()
    
    # 2. 有参函数
    # def max2(x,y):
    #     # x=1
    #     # y=2
    #     if x > y:
    #         print(x)
    #     else:
    #         print(y)
    #
    # max2(1,2)
    # max2(3,4)
    
    
    # 3. 空函数
    # def register():
    #     pass
    四:调用函数的三种形式
    # 1 语句形式
    # def func():
    #     print('from func')
    #
    # func()
    # 2 表达式形式
    # def max2(x,y):
    #     if x > y:
    #         return x
    #     else:
    #         return y
    #
    # res=max2(1000,2000) * 12
    # print(res)
    #
    # res=len('hello')
    # print(res)
    
    # 3 函数的调用可以当作另外一个函数的参数传入
    # def max2(x,y):
    #     if x > y:
    #         return x
    #     else:
    #         return y
    #
    # res=max2(max2(1,2),3)
    # print(res)
    1. 什么是函数的返回值
    返回值是函数体代码的运行成果

    2. 为何要有返回值
    需要拿到函数的处理结果做进一步的处理,则函数必须有返回值

    3. 如何用
    return 返回值的特点:
    1. 返回的值没有类型限制,也没有个数限制
    I: return或者函数没return:返回值None
    II: return 值:返回的就是该值本身
    III: return 值1,值2,值3:返回元组(值1,值2,值3)

    2. return是函数结束运行的标志,函数内可以有多个return,但只要执行一次函数就立即结束,
    并且将return后的值当作本次调用的结果返回
    # def func():
    #     # return 1,1.2,'aaa',[1,2,3]
    #     pass
    # res=func()
    # print(res)
    
    
    def func():
        print('aaaa')
        return 1
        print('bbb')
        return 2
        print('ccc')
        return 3
    
    
    func()

    一 函数的参数分为两大类:

    1.形参:在定义函数时括号内指定的参数(变量名),称之为形参

    2.实参:在调用函数时括号内传入的值(变量值),称之为实参

    二者的关系:在调用函数时,实参值(变量值)会传给形参(变量名),这种绑定关系在调用函数时生效,调用结束后解除绑定
    def func(x,y)
        x=1
        y=2
        print(x,y)
    
    func(1,2)
    #print(x)
    a=1
    b=2
    func(a,b)

    二 函数参数详解
    1.形参
    1.1 位置形参:在定义阶段,按照从左到右的顺序依次定义的形参
    特点:必须被传值
    def func(x,y,z)
        print(x,y,z)
    
    func(1,2.3)
    func(1,2,3,4)
    func(1,2,)
    1.2 默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参
    特点:在定义阶段已经有值,意味着调用阶段可以不用为其传值
    注意点:位置形参必须放在默认形参的前面
    def func(x,y=2)
        print(x,y)
    func(1)
    func(1,333333)
    
    def register(name,age,sex='male'):
         print(name,age,sex)
    
     register('靓仔',18,)
     register('小红',28,)
     register('小黑',38,)
     register('花姑娘',16,'female')
    1.3 形参中*与**的用法
    1.形参中带*:*会将溢出的位置实参存成元组的形式然后赋值其后变量名
    def func(x,y,*args):
      print(x,y,args)
    func(1,2,3,4,5,6)

    2.形参中带**:**会溢出的关键字实参存成字典的格式然后赋值其后变量名
    def func(x,y,**kwargs):
        print(x,y,kwargs)
    func(1,y=2,z=3,m=1,n=2)




    2.实参
    2.1 位置实参:在调用阶段,按照从左到右的顺序依次传入的值
    特点:这种传值方式会与形参一一对应

    2.2 关键字实参:在调用阶段,按照key=value的格式传值
    特点:可以完全打乱位置,但任然能为指定的形参传值
    func(z=3,y=2,x=1)

    注意:可以混用关键字实参与位置实参,但是
    1.同一个形参只能被赋值一次
    2.位置实参必须跟在关键字实参的前面

    func(1,z=3,y=2)
    func(1,z=3,y=2,x=333)
    func(x=1,2,z=3)

    2.3实参中*与**的用法
    1.实参中带*:先将实参打散成位置实参,然后再与形参做对应

    def func(x,y,z):
        print(x,y,z)
    func(**{'x':1,'z':3,'y':2})#func(z=3,y=2,x=1)
    def index(x,y,z):# args=(1,2,3,4,5) 
        print(x,y,z)
    def wrapper(*args,**kwargs):# args=(1,2,3,4,5) kwargs={'c':3,'b':2,'a':1}
        index(*args,**kwargs)#index(*(1,2,3,4,5),**{'c':3,'b':2,'a':1}) #index(1,2,3,4,5,a=1,b=2,c=3)
    #index(1,z=3,y=2)
    
    wrapper(1,2,3,4,5,a=1,b=2,c=3)
    
    wrapper(1,z=3,y=2)























  • 相关阅读:
    【各种排序系列之】归并排序
    【LeetCode练习题】Candy
    【LeetCode练习题】Minimum Window Substring
    【LeetCode练习题】Partition List
    【Java之】多线程学习笔记
    【Java】使用Runtime执行其他程序
    【各种排序系列之】快速排序法
    Bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 最短路,神题
    Bzoj 1901: Zju2112 Dynamic Rankings 树套树,线段树,平衡树,Treap
    Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
  • 原文地址:https://www.cnblogs.com/BestSkye/p/10027006.html
Copyright © 2011-2022 走看看