Python-函数

函数:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

1)在 python 中,类型属于对象,变量是没有类型的:

  a = [1,2,3]

  a = 'sdf'

  以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象

2)函数 

  def a():

    语句

3)函数调用

  a()

4)传参:

  【1】必传参数 :def a(str):。函数调用 a()。不穿参数,代码会报错。

  【2】关键字参数:传参的变量在方法调用时才定义。

  【3】默认参数:方法在定义时,已经给参数赋值了。调用是如果没有传参,则使用方法定义时的值。

  【4】不定长参数:

    第一种:参数前面一个*号,打印出来的参数是tuple

        def a(a1,*a2);

          语句

    第二种:参数前面一个**号,打印出来的参数是dictionary

        def a(a1,**a2):

          语句

  【5】传参里面有*代替的。*后面的参数在调用方法是,必须是关键字传参。

5)匿名函数,a = lambda(a1,a2,a3:a1+a2*a3)。冒号前面是定义的参数,冒号后面是参数的运算。a 指向lambda返回值。lambda的调用同方法的调用

6)return语句。

  【1】return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

  【2】return之后的语句是不执行的

7)变量作用域

  【1】L (Local) 局部作用域,E (Enclosing) 闭包函数外的函数中,G (Global) 全局作用域,B (Built-in) 内置作用域(内置函数所在模块的范围)

      1】局部作用域引用全局的变量是可以使用,但是不能修改全部变量指向新的值。即不能修改变量。下面的代码是会报错的。

        num = 2

        def a():

          num = 3

        如果想改,重新声明变量的作用域。

        num = 2

        def a():

          global num

          num = 3

      2】如果全局变量是可变类型,list和dictionary。可以在局部作用域修改变量指向的值。下面的代码是不会报错的

        num = [1,2,3]

        def a():

          num[1] = 22

      3】同理,L (Local) 局部作用域 需要更新 E (Enclosing) 闭包函数外的函数中,需要关键字 nonlocal 重新声明变量。

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

  【3】执行以下代码会报错

      a = 10 

      def test():

        a = a + 1

        print(a)

      test()

    修改为下面代码不会报错。

      a = 10 

      def test(a):

        a = a + 1

        print(a)

      test()

    说明:已经定义的变量,再函数中再次用到相同的变量,

      

  

 

 

 

 

 

    

  

posted @ 2019-03-05 20:22  不流的水  阅读(136)  评论(0)    收藏  举报