zoukankan      html  css  js  c++  java
  • python的基础函数以及一些特性

    1.函数基本语法以及特性

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

    特性:1.减少重复代码

         2.使程序变得可扩展

       3.使程序变得易维护

    # 函数的定义
    # 无参数,无返回值类型
    def test1():
        print('test1')
    
    # 无参数,有返回值类型
    def test2():
        return 0
    
    # 有参数,无返回值类型
    def test3(x):
        print(x)
    
    # 有参数,有返回值类型
    def test4(x):
        return 2*x
    
    # 函数的调用
    test1()
    test2()
    test3(3)
    test4(4)
    View Code
    def test(x, y):
        print(x, y)
    
    # 与参数一一对应
    test(3,4)
    View Code

    2.参数与局部变量

    a.形参变量只有在 被调用时才分配内存单元,在调用结束时,即可释放所分配的内存单元,因此,形参只在函数内部有效,函数调用结束返回朱调用函数后则不能再使用该形参变量

    b.实参可以是常量、变量、表达式、函数等,无论实参是克重类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传递给形参,因此应预先用赋值,输入等方法使参数获得确定值。

    # x,y是形参
    def test(x, y):
        print(x, y)
    
    # 3,4是实参
    test(3,4)
    View Code

    c.参数不固定的时候,形参该如何设置呢?

    这时,我们使用*args

    *args:接收N个位置参数,转换成元组的形式

    # 参数不固定
    # 参数组:接收的是位置参数
    # *args:接收N个位置参数,转换成元组的形式
    def test(x, *args):
        print(x)
        print(args)
    
    test(1,2,3,4)
    test(*(3,4,5))
    View Code

    d.**kwargs:把N个关键字参数,转换成字典的方式

    # **kwargs:把N个关键字参数,转换成字典的方式
    # 关键字参数字典处理,字典传值
    def test(**kwargs):
        print(kwargs)
        print(kwargs['name'])
    
    # 方式一
    test(name='x', age=2)
    # 方式二
    test(**{'name':'x', 'age':2})
    View Code

    e.默认参数

    # 默认参数:给定默认值,如果给形参传值,则会打印传值,否则会打印默认值
    def test(x, y=5):
        print(x)
        print(y)
    
    x = 4
    test(x)
    y = 7
    test(x,y)
    View Code

    3.返回值

    定义:要想获得函数的执行结果,可以使用return语句把结果返回

    注意:1.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,所以,return语句代表着函数的结束

         2.如果未在函数中指定return,那么这个函数的返回值为None

    # x,y是形参,
    def test(x, y):
        print(x, y)
        # return是返回值标识,该函数返回x+y的值
        return x + y
    
    # 3,4是实参
    test(3,4)
    print(test(3,4))
    View Code

    4.递归

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

    特性:1.必须有一个明确的结束条件,否则发生循环导致内存泄漏,程序崩溃

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

       3.递归效率不高,递归层次过多会导致栈溢出,在计算机中,函数调用时通过栈stack这种数据结构实现的,

        每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会建一层栈帧,由于栈的大小不是无限的,

        所以递归调用次数过多,导致栈溢出。

    def calcute(n):
        print(n)
        if int(n / 2) > 0:
            return calcute(int(n/2))
        print('-->',n)
    
    calcute(10)
    View Code

    5.局部变量和全局变量

    school = 'Oldboy edu.'
    
    #快捷键 command+/
    def change_name(name):
        # 绝对不允许这样使用全局变量,函数会被多次调用,这个全局变量的值不确定因素影响项目
        # global string
        # string = 'adsfasdf'
    
        # 修改全局变量:global school
        global school
        school = 'ANHUI'
        print('before change:', name)
        # 局部变量:生命在函数内部,在函数内部生效,这个函数就是这个变量的作用域
        name = 'ALEX'
        print('after change:', name)
        print('--学校:%s---' %school)
    
    name = 'alex'
    
    change_name(name)
    print(name)
    print(school)
    
    # print(string)
    
    # 复杂的类型都可以修改,字符串和数值不可以修改
    names = ['alex','hack','rain']
    def change_names():
        print(names)
        names[0] = '金角大王'
        print('在里面',names)
    
    
    change_names()
    print(names)
    View Code

     

  • 相关阅读:
    互联网协议入门
    【HTTP】图解HTTPS
    《计算机本科生理想的学习计划》
    VC++ TinyXML
    TinyXML 在vs2010 VC++使用
    Hadoop2.4.1入门实例:MaxTemperature
    xcode6
    Android利用广播监听设备网络连接(断网)的变化情况
    编程算法
    Google的Guava之IO升华
  • 原文地址:https://www.cnblogs.com/zhoutf/p/9109758.html
Copyright © 2011-2022 走看看