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


    在python中,变量没有类型,一个对象的引用,类型属于对象
    变量的本质上是一个占位符!通常用小写字母命名变量。
        -----------------------------------------函数式编程------------------
    一:语法

        def 函数名(参数列表):
            函数体
        (函数名命名一般用小写字母 + 单下划线数字等组合)
    二:常用函数的类型

        (1)带参数的函数:参数须以正确的顺序传入函数
        (2)默认参数函数:未传递参数,则会使用默认参数,默认参数不在最后,会报错!
        (3)关键字参数:函数调用使用关键字参数来确定传入的参数值
        (4)不定长参数:函数能处理比当初声明时更多的参数,
        
            ①*args中所有的变量都会被包装成一个元组存放所有未命名的变量
            ②**args中所有变量都会被包装成一个字典

        (5)声明函数时,参数中星号 * 可以单独出现,*之后的的参数必须用关键字传入

        (6)匿名函数,使用lambda函数创建匿名函数

            ①lambda 只是一个表达式,函数体比 def 简单很多
            ②lambda的主体是一个表达式,而不是一个代码块
            ③函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

    三:python 函数的参数传递:

        不可变类型:

        类似 c++ 的值传递,如 int、string、tuple。
        如fun(a),传递的只是a的值,没有影响a对象本身。
        比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身.

        可变类型:

        类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,        
        修改后fun外部的la也会受影响

        python 中一切都是对象,严格意义我们不能说值传递还是引用传递,
        我们应该说传不可变对象和传可变对象

    四:变量作用域
        
        python 中的作用域一般有四种:
        L (Local) 局部作用域
        E (Enclosing) 闭包函数外的函数中
        G (Global) 全局作用域
        B (Built-in) 内建作用域
    查找规则是L->E->G->B

        Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,
    其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说
    这些语句内定义的变量,外部也可以访问。

    五:全局变量与局部变量

        定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

        当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
        (1)global用来修改全局变量的值
        (2)nonlocal要修改嵌套作用域(enclosing 作用域,外层非全局作用域)
        中的变量则需要 nonlocal 关键字了

    六:函数调用中的技巧(重要)

        函数名.__doc__获取函数的帮助文档
        函数名可以作为另一个函数的形参
        多个返回值以元组的方式返回

        内部函数,不修改全局变量可以访问全局变量!!
        内部函数,修改同名全局变量,则python会认为它是一个局部变量!!
        

    七:关于命名

        (1)文件名:全小写,可以使用下划线
        (2)函数名:小写,小驼峰原则
        (3)变量名:全部小写,下划线连接
        详细的命名规则参考PEP8

    八:几个特殊的函数(跟老乔学Python)
        ------------函数式编程------------------
        lambda
        map
        reduce
        filter
        ------------暂留------------------

      1 # --------------------------------------------------------------------------#
      2 # 函数的语法及调用
      3 # --------------------------------------------------------------------------#
      4 
      5 
      6 def func(func_name, number):        # 函数的定义
      7     """打印输入的任何字符串"""
      8     print(func_name, number)
      9     return 'Done'
     10 
     11 
     12 func('func_1', 'faith')             # 函数的调用
     13 
     14 # --------------------------------------------------------------------------#
     15 # 不定长参数函数,封装成元组
     16 # --------------------------------------------------------------------------#
     17 
     18 
     19 def func_1(func_name, *number):
     20     """
     21     打印输入的任何字符串
     22     """
     23     print(type(number))
     24     print(func_name, number)
     25     return 'Done'
     26 
     27 
     28 func_1('func_1', 1, 2, 2, 3)
     29 
     30 
     31 def func_2(func_name, number):   #
     32     print(type(number))
     33     print(func_name, number)
     34     return 'Done'
     35 
     36 
     37 func_2('func_2', (1, 2, 2, 3))
     38 
     39 
     40 def func_3(func_name, *number):
     41     print(func_name)
     42     print(number[3])            # 根据元组index中一部分变量
     43     print(number[4])
     44     return 'Done'
     45 
     46 
     47 func_3('func_3', 1, 2, 2, 3, 'aaa', 'abc')
     48 
     49 
     50 # get out question: the number of index isn't known in most case!
     51 # --------------------------------------------------------------------------#
     52 # 不定长参数函数,封装成字典
     53 # --------------------------------------------------------------------------#
     54 
     55 
     56 def func_4(func_name, **number):  # 可变参数必须在函数参数的最后
     57     # print(type(number))
     58     print(func_name, number)
     59     return 'Done'
     60 
     61 
     62 func_4('func_4', name='faith')
     63 
     64 # --------------------------------------------------------------------------#
     65 # 命名关键字函数
     66 # --------------------------------------------------------------------------#
     67 
     68 
     69 def func_5(a, x, c, *, china, uk):
     70     print('func_5:', china, uk)
     71     print(a, x, c)
     72 
     73 
     74 func_5(1, 2, 3, china='bJ', uk='rs')    # 调用时必须加上关键字
     75 # func_5(1, 2, 3, 'bJ', 'rs')
     76 
     77 # --------------------------------------------------------------------------#
     78 # 函数应用之-递归
     79 # --------------------------------------------------------------------------#
     80 
     81 
     82 def my_sum(i):
     83     if i < 0:
     84         raise ValueError    # 抛出错误
     85     elif i <= 1:
     86         return i
     87     else:
     88         return i + my_sum(i - 1)
     89 
     90 
     91 print(my_sum(1.4))
     92 
     93 # --------------------------------------------------------------------------#
     94 # 传递不可变对象实例
     95 # --------------------------------------------------------------------------#
     96 
     97 
     98 def change_int(a):
     99     a = 10
    100 
    101 
    102 b = 2
    103 change_int(b)
    104 print(b)         # 结果是2
    105 # --------------------------------------------------------------------------#
    106 # 传递可变对象实例
    107 # --------------------------------------------------------------------------#
    108 
    109 
    110 def change_me(mylist):
    111     mylist.append([1, 2, 3, 4])
    112     print("函数内取值: ", mylist)
    113     return
    114 
    115 
    116 myList = [10, 20, 30]
    117 change_me(myList)
    118 print("函数外取值: ", myList)
    119 
    120 # --------------------------------------------------------------------------#
    121 # 函数内修改全局变量的值
    122 # --------------------------------------------------------------------------#
    123 
    124 money = 200  # 模块里面的全局变量
    125 
    126 
    127 def add_money():
    128     global money
    129     money = money + 1
    130     return money
    131 
    132 
    133 print("修改后的值money = ", add_money())
    134 
    135 
    136 # --------------------------------------------------------------------------#
    137 # 匿名函数
    138 # --------------------------------------------------------------------------#
    139 sum_1 = lambda arg1, arg2: arg1 + arg2
    140 
    141 # 调用sum函数
    142 print("相加后的值为 : ", sum_1(10, 20))
    143 print("相加后的值为 : ", sum_1(20, 20))
    144 
    145 # 单独编译一个文件时候输出结果
    146 if __name__ == "__main__":
    147     pass




  • 相关阅读:
    struts2 ajax传值
    s:iterator遍历
    JavaScript闭包
    组合继承与寄生组合式继承
    JSP EL表达式详细介绍
    js判断字符串是否包含中文或英文
    jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
    HTML5--新增结构元素(2)
    HTML5--新增全局属性(1)
    nodejs的安装配置(nvm-windows)
  • 原文地址:https://www.cnblogs.com/faithyiyo/p/9717878.html
Copyright © 2011-2022 走看看