美文网首页
Python学习笔记(十)—函数和变量

Python学习笔记(十)—函数和变量

作者: Shawpoo的 | 来源:发表于2017-12-20 22:24 被阅读17次

    转载请注明出处:http://www.jianshu.com/p/db00f2baf91a
    本文出自Shawpoo的简书
    我的博客:CSDN博客

    【Python学习笔记专栏】:http://blog.csdn.net/column/details/17658.html

    一、Python中的函数

    1、函数的定义与调用

    • a、函数的定义

      函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。我们已经知道Python已经提供了许多内置的函数,例如常见的print()函数、input()函数,我们也可以自定义函数。

    • b、定义(声明)一个函数
      定义一个函数语法如下:

      def 函数名(参数列表):
          函数体
      

      例:

      >>> def hello():  # 声明函数
      ...     print("Hello Python~")
      ...
      >>> hello()   # 调用函数
      Hello Python~
      

      定义函数的几条规则:

      • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
      • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
      • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
      • 函数内容以冒号:起始,并且缩进。
      • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None,当函数体为空时,可以借助pass语句来替代。

    2、参数与参数的传递

    • 参数的类型有以下4种:
      • 1、必需参数
        必需参数必须按照顺序传入函数,同时数量必须和声明时保持一致,否则会报错。并且,参数与参数之间声明和传入时都要用逗号隔开。
        # 声明一个参数的函数
        def testFun(s):
            print(s)
        
        testFun("Hello")
        
        # 声明两个参数的函数
        def testFun2(s, version):
            print(s + str(version))
        
        testFun2("Python", 3)
        
      • 2、关键字参数
        关键字参数指的是,在声明函数的时候参数名为关键字,在调用函数的时候,通过关键字来指定函数参数的值,关键字参数传入函数时不要求顺序,但是关键字必须与声明的参数名保持一致。
        def testFun2(s, version): # 声明参数名s和version
            print(s + str(version))
        
        testFun2(version = 3, s = "Python") # 通过参数名指定参数值
        
      • 3、默认参数
        调用函数时,如果没有传递参数的话,会采用默认值。如果传递的话,则参数的值为传递的值。默认参数声明必须在非默认参数之后。
        def testFun(s, version = 3):
            print(s + str(version))
        
        testFun("Python")
        
      • 4、不定长参数
        有的时候我们在声明函数的时候,无法确定函数参数的个数,那么这就用到了不定长参数。参数前面加*表示不定长参数,如果不定长参数后还有参数的话,则在调用的时候必须使用参数名指定参数值,即:“参数名=值”的方式传值 。
        def testFun(s, *args):
            print(s)
            print(args)
        
        testFun("Hello", "Python", "3")
        
        运行结果:
        Hello
        ('Python', '3')
        

    3、匿名函数

    在Python中使用 lambda 表达式来创建匿名函数。但是Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。

    • 匿名函数的特点:

      • lambda 只是一种表达式,具体的函数声明比 def 声明简单很多,去除定义函数的过程,代码更加精简。
      • lambda 的主体(函数体)也只是一个表达式,并不是一个代码块,所以编写逻辑时要比代码块有限。
    • a、语法

      lambda 参数列表 :(return) 表达式
      

      ps:由于lambda函数返回的是一个函数对象,所以需要一个变量去接收返回值。例:

      l = lambda x : x ** 3
      print(l(5))   # 输出结果:125
      
    • b、无参匿名函数

      l = lambda : 22 + 66
      print(l())   # 输出结果:88
      
    • c、有参匿名函数

      l = lambda x : x + 66
      print(l(88))  输出结果:154
      
    • d、匿名函数的调用
      声明好匿名函数后用一个变量接收值,然后类似于普通函数调用即可。如上面提到的有参与无参匿名函数。

    二、变量

    1、全局变量和局部变量

    全部变量:定义在函数外的变量,拥有全局的作用域的变量;
    局部变量:定义在函数内部的变量,拥有局部作用域的变量。
    局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。例:

    sum = 0  # 此处的sum为全局变量,整个程序内都可访问
    def add(num1, num2) :
        sum = num1 + num2   # 此处的sum为局部变量,仅在add函数内部访问
        print("局部变量 sum 的值:", sum)
        return sum
    
    sum = add(22, 33)
    print("全局变量 sum 的值:", sum)
    
    运行结果:
    局部变量 sum 的值: 55
    全局变量 sum 的值: 55
    

    2、global 和 nonlocal关键字

    • 变量的作用域
      在python中,访问变量并不是在任何位置都能访问的,需要按照作用域的大小来查找的。python中有4种作用域:

      • L (Local) 局部作用域
      • E (Enclosing) 闭包函数外的函数中
      • G (Global) 全局作用域
      • B (Built-in) 内置作用域

      在访问变量的时候,程序会按照L -> E -> G -> B说顺序去查找定义的变量。即:先在局部作用域中查找,找不到的话然后在函数外的函数(闭包)中查找, 再找不到的话再全局中查找,否则会在Python内置的作用域中查找。

      x = max(2, 3)  # 内置作用域
      
      sum= 0  # 全局作用域
      def outer():
          num1 = 1  # 闭包函数外的函数中
          def inner():
              num2 = 2  # 局部作用域
      
    • global关键字
      假如有个小需求,在某个函数中修改一个全局变量的值:

      num = 66
      
      def change():
          num = 88
          print("change()函数打印:", num)
      
      change()
      print("全局打印:", num)
      
      输出结果:
      change()函数打印: 88
      全局打印: 66
      

      通过上面的例子我们会发现,通过调用change()函数后并没有将num的值改成88。原因就是作用域的不同,如果要在函数中访问全局变量的话,需要使用global关键字。将上面例子修改为:

      num = 66
      
      def change():
          global num    # 声明访问全局变量的num
          num = 88
          print("change()函数打印:", num)
      
      change()
      print("全局打印:", num)
      
      输出结果:
      change()函数打印: 88
      全局打印: 88
      
    • nonlocal关键字
      nonlocal的作用与关键字global类似,使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量,如:

      def func():
          num = 66
          def change():
              num = 88
              print("change()函数打印: ", num)
          change()
          print("func()函数打印: ", num)
      
      func()
      
      输出结果:
      change()函数打印:  88
      func()函数打印:  66
      

      本例和global的例子类似,通过闭包函数修改num的值并没有成功,这时就涉及到了nonlocal关键字,修改上述例子如下:

      def func():
         num = 66
         def change():
             nonlocal num # 声明访问局部变量num
             num = 88
             print("change()函数打印: ", num)
         change()
         print("func()函数打印: ", num)
      
      func()
      
      输出结果:
      change()函数打印:  88
      func()函数打印:  88
      

    好了,基本的函数和变量的使用就记录到这~

    参考阅读:【菜鸟教程】

    相关文章

      网友评论

          本文标题:Python学习笔记(十)—函数和变量

          本文链接:https://www.haomeiwen.com/subject/ygqqyxtx.html