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

转载请注明出处:http://blog.csdn.net/sinat_14849739/article/details/78858393
本文出自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

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

参考阅读:【菜鸟教程】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值