zoukankan      html  css  js  c++  java
  • python-函数

    函数

    1. 函数是什么?

      定义:

    1. 一组语句通过一个名字(函数名)封装

    2. 通过调用函数名执行

    3.函数可以带参数

    def test():     # 定义一个函数
        print('test')
        
    
    test()  # 调用一个函数
    def abc(a, b):  # 定义一个abc函数,可以带参数
    
        c = a+b
        return c    # 代表函数的结束并返回计算结果
        print('结果是',c)    #这句不会执行
    
    
    resu = abc(3, 4)   # 调用函数abc    函数返回的结果赋给参数
    print(resu)

    特性:

    1.减少重复代码

    2.程序变得可扩展

    3.变得易维护

    2. 函数参数

    1. 形参

      1.调用时分配内存单元,结算时释放内存单元。            ——》如下:当函数执行完时str的值就不能在函数外面使用了

      2.函数内部有效,函数执行完结束后主函数不能使用这个参数。  ——》str只有在test函数里有效

    2. 实参

      1.可以是常量、变量、表达式、函数。  ——》a是变量

      2.调用函数时,要预先赋值。  ——》a要先赋值,才能进行传进函数里进行运算。

    def test(str):     # str——》形参
        print('test', str)
    
    
    a = '哈哈'
    test(a)  # a——》实参

    3. 默认

      在定义函数时指定。

      调用函数时有值传入,使用函数的值。

      调用函数时没有值传入,使用默认参数的值

    4. 关键

      位置参数——函数传参时必须按照函数定义的位置填。

      关键参数——使用关键参数,传参时可以不按位置填。

    def test(str, age, county='CN'):     # county='CN'默认参数,
        print('test', str, age, county)  # county 有传值——》用函数的值 ;没传值——》用定义的值
    
    
    a = '哈哈'
    test(a, 22, county='JP')  # a:位置参数
    test(a, age=22)  # age=22 关键参数;关键参数必须放在位置参数后

    5. 非固定

      不确定用户传入多少个参数。

      1.*args——》返回元组

      2.**kwargs——》返回字典

    def func(*args, **kwargs):  # *args和**kwargs这个就是非固定参数
        name = args[0]   # args 返回的是一个元组
        password = kwargs['password']  # kwargs返回的是一个字典
        print(type(args), type(kwargs))
        print(name, password)
    
    
    func('abc', password='123')  # 非固定参数值传入方式 'abc'=>args ,'password=123'=>kwargs

    输出:
    <class 'tuple'> <class 'dict'>
    abc 123

    3. 函数返回

    1.类型

      1.函数里可以没有return语句

    2. 函数没return——函数返回值为None

    3. 函数有return——函数执行结果

    2. 值的数量

      1.一个——可以为一个变量

      2.多个——可以为多个变量,每个变量用逗号分隔,以元组方式返回

    3. 状态

       1.遇到return语句,函数停止执行,并返回执行结果。

       2.return指定函数的结束

       3.可以返回任意数据类型

    def abc(a, b):
        c = a+b
        return a, b, c   # 返回多个变量
    
    
    num1, num2, resu = abc(3, 2)  # 返回几个要接几个
    print(num1, num2, resu)

    4. 变量

    1. 全局  

      定义在函数外部,变量全局有效

    2. 局部

      定义在函数内部,函数执行时分配内存空间,执行完释放。

      函数外面不能调用局部变量

    name = "全局变量"  # name 在函数外,哪里都有他份
    
    
    def in_or_out():
        name = "局部变量"
        print("这是in", name)  # name 在函数内部有效执行完不关他的事
    
    
    in_or_out()
    
    print("这是out", name)

    output:
    这是in 局部变量
    这是out 全局变量

    3. 作用域

      程序变量可用的范围

    5. 其他函数

      1.嵌套

      函数里嵌套一个函数

    #嵌套函数
    name = "123"
    
    
    def change_name():
        name = "456"
    
        def change_name2():
            name = "789"
            print("第3层打印", name)
    
        change_name2()  # 调用内层函数
        print("第2层打印", name)
    
    
    change_name()
    print("最外层打印", name)

    2. 匿名

      不需要显式的指定函数名

    #1.这段代码 显式函数
    def calc(x, y):
        return x**y
    
    
    print(calc(2, 5))
    
    
    #2.换成匿名函数
    calc2 = lambda x, y: x**y
    print(calc2(2, 5))

    2. 高阶

      2.1一个函数,它的参数接收了另一个函数作为其参数

    # 第一种情况:函数名可以用作参数
    def func():  
        print('func')
    
    
    def func2(f):    # 1.定义一个函数   3.func2这个函数称高阶函数
        f()
        print('func2')
        
        
    func2(func)    # 2. func2的参数是函数名func
    def add(x, y, f):      # 1、一个函数 add()。
        return f(x) + f(y)  # 3、这个add()函数称为高阶函数。
    
    
    res = add(3, -6, abs)   # 2、add()它的参数接收了另一个函数abs作为其参数。
    print(res)

       2.2一个函数,它的返回值是另一个函数。

    # 第二种情况:函数的返回值是另一个函数
    def func():       # 1.定义一个函数 3.func这个函数称高阶函数
        def func3():
            return 'a'
        return func3   # 2.这个函数的返回值是另一个函数
    
    
    func3 = func()
    print(func3())

    3. 递归

    一个函数在内部调用自身本身,这个函数就是递归函数。

    def calc(n):
        print(n)
        if int(n/2) == 0:
            return n
        return calc(int(n/2))  # 在函数的内部调用自身
    
    
    calc(10)
    #递归应用1:
    #现有一个需求:需要把一个数除5次并把第5次结果的值返回
    #递归的返回值:
    def calc2(n, count):
        print(n, count)
        if count < 5:
            return calc2(n/2, count+1)   # 返回前面几层数据
        else:
            return n     # 返回最里层数据
    
    
    res = calc2(188, 1)
    print(res)

    4. 内置

    Python预先加载好的

  • 相关阅读:
    【Java学习系列】第3课--Java 高级教程
    【夯实PHP基础】nginx php-fpm 输出php错误日志
    【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
    【架构设计】分布式文件系统 FastDFS的原理和安装使用
    【13】2016.12.13 周二--《小结2016》
    【诗词歌赋】2016.12.15 周四--文言鸿儒《年终的日常》
    【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
    【夯实Nginx基础】Nginx工作原理和优化、漏洞
    【夯实PHP基础】PHP的反射机制
    HTML DOM简易学习笔记
  • 原文地址:https://www.cnblogs.com/AYxing/p/8620854.html
Copyright © 2011-2022 走看看