• python学习之路(七)


    今天更新一下有关于函数的知识点~

    函数是什么?

    函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

    函数分为面向对象,面向过程和函数式编程。

    定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

    特性:

    1. 减少重复代码
    2. 使程序变的可扩展
    3. 使程序变得易维护

    语法定义

    def name() :   #name 是函数名称
        print("hello world")
        return 0     #返回值可有可无,可以是任何值或者函数或者表达式,可以是任何东西,不写的话返回NONE
    
    name()

     

    当然,函数是可以传参数的,比如下面:

    def asd(x,y):  #xy都是形参
        print(x,y)
    asd(1,2)   #1,2是实参
    asd(x=1,y=2)
    asd(1,y=2)
    以上三种传参方法都是正确的,但需要注意的是第三种方法,位置参数是必须要优先的,如果写成asd(2,x=1)程序是不会把2传给y的。

    还有一种方法是传默认参数,多用于设置默认值或者连接数据库端口号,这种相当于设定了初始值,如果想修改也能修改。

    def test(x,y=8080):
        print(x,y)
    
    test (443)
    结果是输出 443,8080
    如果是
    test(443,80)
    那么输出就是 443,80

    函数不光可以传单个参数,也可以传参数组,可以用元祖或者字典去传值,方法如下:

    def test(*args):   #*args将接收的N个数值转换成元祖,放在元祖中传值
        print(args)
    test(1,2,3,4,5)

    def test(**kwargs): #这是将字典传入函数
      print(kwargs['name'])
    test(name='xiaoming',age=22)
    结果是xiaoming

    不光可以传入单一类型的值,还能组合传入:

    def test(name,age=18,*args,**kwargs):
        print(name,age,args,kwargs)
    test('xiaoming',24,1,2,3,4,sex='man')

    局部变量和全局变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
    简而言之,全局变量就是在程序顶部写的,局部变量
     
    嵌套函数和递归
     
    嵌套函数
    name = "xiaoming"
     
    def change_name():
        name = "xiaowang"
     
        def change_name2():
            name = "xiaofang"
            print("第3层打印",name)
     
        change_name2() #调用内层函数
        print("第2层打印",name)
     
     
    change_name()
    print("最外层打印",name)

    递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    ef calc(n):
        print(n)
        if int(n/2) ==0:
            return n
        return calc(int(n/2))
     
    calc(10)
     
    输出:
    10
    5
    2
    1

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    匿名函数:

    匿名函数就是不需要显式的指定函数,匿名函数主要是和其它函数搭配使用。如下面所示

    def calc(n):
        return n**n
    print(calc(10))
     
    #换成匿名函数
    calc = lambda n:n**n
    print(calc(10))

    内置函数:

    python中有很多已经写好的函数,可以直接调用。

    具体操作方法请见:https://docs.python.org/3/library/functions.html?highlight=built#ascii

      

  • 相关阅读:
    EF6 Code First 模式更新数据库架构
    bootstrap-datepicker 插件修改为默认中文
    常用网络资源下载
    jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
    AngularJS实现原理
    [个人翻译]GitHub指导文件(GitHub Guides[Hello World])
    年后跳槽如何准备?
    前端学数据库之子查询
    Ionic实战 自动升级APP(Android版)
    读书笔记:《HTML5开发手册》Web表单
  • 原文地址:https://www.cnblogs.com/lovelyming/p/7258114.html
Copyright © 2020-2023  润新知