zoukankan      html  css  js  c++  java
  • 我的Python入门笔记(14)

    十一章、函数(下)


    If the implementation is hard to explain, it's a bad idea.——The Zen of Python


    一、返回值

      在Python中,可以在函数体内使用return语句,为函数指定返回值。该返回值可以是任意类型,并且无论return语句出现在函数的什么位置,只要得到执行,就会直接结束该函数的执行,其语法格式如下:

      result = return [value]

      result: 用于保存返回结果,如果只返回一个值,那么result中保存的就是返回的一个值,该值可以是任意类型。如果返回多个值,那么result中保存的是一个元组。

      value :可选参数,用于指定要返回的值,可以返回一个值,也可以返回多个值.

      当函数中没有return语句时,或者省略了return语句的参数时,将返回None,即返回空值.

     1 def funname(name):
     2     nickname=''
     3     if name =='雨霓':   #如果输入的是雨霓
     4         nickname=1210
     5     elif name =='淑雪':
     6         nickname=1184
     7     elif name == '霜序':
     8         nickname=220
     9     else:
    10         nickname='无法找到对应信息'
    11     return nickname  #返回对应名字喜欢的数字
    12 while True:
    13     name=input('请输入姓名:')  #接收用户输入
    14     nickname=funname(name)  #调用函数
    15 print('姓名:',name,'喜欢的数字:',nickname)
    16 输出:
    17 请输入姓名:雨霓
    18 姓名: 雨霓 喜欢的数字: 1210

    二、变量的作用域

      变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误,一般会根据变量的“有效范围”,将变量分为“局部变量”和“全局变量

      1.局部变量

      局部变量是指函数内部定义并使用的变量,它只在函数的内容有效。即函数内部的名字只在函数运行时,才会创建,在函数运行之前或者运行完毕,所有的名字就都不存在了,所以,如果在函数外部使用函数内部定义的变量,就会抛出NameError异常.例如:定义一个名字为f_demo的函数,在该函数内部定义一个变量message(称为局部变量)并为其赋值,然后输出该变量,最后在函数体外部再次输出message变量,则会报错:

    1 def f_demo():
    2     message="如果我是284,我的220在哪里?"
    3     print('局部变量message:',message)
    4 f_demo()
    5 print('局部变量message:',message)
    6 输出:
    7   File "C:/Users/Mortal/PycharmProjects/Python_Note/venv/test1.py", line 5, in <module>
    8     print('局部变量message:',message)
    9 NameError: name 'message' is not defined

      2.全局变量:

      与局部变量对应,全局变量是能够作用于函数内外的变量。全局变量主要有以下两种情况:

      (1)   如果一个变量,在函数外定义,那么不仅可以在函数外访问到,在函数内也可以访问到。在函数体以外的定义的变量是全局变量.示例如下:

    1 message="如果我是284,我的220在哪里?"  #全局变量
    2 def f_demo():
    3     print('局部变量message:',message)  #在函数体内输出全局变量的值
    4 f_demo()                              #调用函数
    5 print('局部变量message:',message)     #在函数体外输出全局变量的值
    6 输出:
    7 局部变量message: 如果我是284,我的220在哪里?
    8 局部变量message: 如果我是284,我的220在哪里?

      当局部变量与全局变量重名时,对函数体的变量进行赋值后,不影响函数体外的变量。

     (2)在函数体内定义,并且使用global关键字修饰后,该变量也可以为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以进行修改.

     1 message="如果我是284,我的220在哪里?"  #全局变量
     2 print('函数体外:message=',message)     #在函数体外输出全局变量
     3 def f_demo():
     4     message='别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!'  #局部变量
     5     print('局部变量message:',message)  #在函数体内输出局部变量的值
     6 f_demo()                              #调用函数
     7 print('函数体外message:',message)     #在函数体外输出全局变量的值
     8 
     9 输出:
    10 函数体外:message= 如果我是284,我的220在哪里?
    11 局部变量message: 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!
    12 函数体外message: 如果我是284,我的220在哪里?

      在函数内部定义的变量即使与全局变量重名,也不影响全局变量的值。如果想要在函数体内部修改全局变量的值,需要再定义局部变量时,使用global关键字修饰。

     1 message="如果我是284,我的220在哪里?"  #全局变量
     2 print('函数体外:message=',message)     #在函数体外输出全局变量
     3 def f_demo():
     4     global message            #将message声明为全局变量
     5     message='别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!'  #局部变量
     6     print('局部变量message:',message)  #在函数体内输出局部变量的值
     7 f_demo()                              #调用函数
     8 print('函数体外:message = :',message)     #在函数体外输出全局变量的值
     9 输出:
    10 
    11 函数体外:message= 如果我是284,我的220在哪里?
    12 局部变量message: 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!
    13 函数体外:message = : 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!

      注意:尽管Python允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清那些是全局变量,那些是局部变量。

    三、匿名函数

      匿名函数是指没有名字的函数,它主要应用在需要一个函数,但是又不想费神去命名这个函数的场合,通常情况下,这种函数只能使用一次,在Python中,使用lambda表达式创建匿名函数,其语法格式如下:

      result = lambda[arg1[,arg2,…,arg n]]:expression

      result 用于调用lambda表达式

      [arg1[,arg2,…,arg n]]: 可选参数,用于指定要传递的参数列表,多个参数使用逗号分隔

           expression :必选参数,用于指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数.

      使用lambda表达式时,参数可以有多个,用逗号分隔,但是表达式只有一个,即只能返回一个值,而且也不能出现其他非表达式语句(for 或 while).

    1 import math
    2 def circlearrea(r):
    3     result = math.pi*r*r
    4     return result
    5 r=10
    6 print('半径为',r,'的圆面积为:',circlearrea(r))
    7 输出:
    8 半径为 10 的圆面积为: 314.1592653589793

      使用lambda表达式:

    1 import math
    2 r=10
    3 result=lambda r:math.pi*r*r
    4 print('半径为',r,'的圆面积为:',result(r))
    5 输出:
    6 半径为 10 的圆面积为: 314.1592653589793

      虽然使用lambda表达式比使用自定义函数的代码少一些。但是在使用lambda表达式时,需要定义一个变量,用于调用该lambda表达式。

      Lambda表达式的首要用途是指定短小的回调函数.

      emmm关于Python的内置函数就不做过多介绍,后面还会遇到的!

  • 相关阅读:
    《构建之法(第三版)》第一章学习总结
    20189220余超 2019年密码与安全新技术讲座-课程总结报告
    学号20189220 2018-2019-2 《密码与安全新技术专题》第六周作业
    学号20189220余超 2018-2019-2 《密码与安全新技术专题》第七周作业
    20189200余超 2018-2019-2 移动平台应用开发实践作项目代码分析
    2018-2019-2学号20189220余超《移动平台应用程序开发实践》课程总结
    20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业
    20189220余超 团队博客——阅读软件app
    20189200余超 2018-2019-2 移动平台应用开发实践第十一周作业
    20189200余超 2018-2019-2 移动平台应用开发实践第十周作业
  • 原文地址:https://www.cnblogs.com/1210x1184/p/11129589.html
Copyright © 2011-2022 走看看