day11:return关键字&全局/局部变量&函数名的使用&函数的嵌套&nonlocal关键字&locals/globals

关键字:return

自定义函数的返回值,return可以把值返回到函数的调用处
        1.return+六大标准数据类型,还有类和对象,函数
        如果不定义return,默认返回的是None
        2.在执行return之后,立刻终止函数,后面的代码不执行

# 1.return的返回类型
def func():
     return 1
     return 3.14
     return "abc"
     return []
     return ()
     return {"a":1}
    pass
res=func()
 如果不定义return,默认返回的是None
print(res)
 2.在执行完return 之后,立刻终止函数,后面的代码不执行
print(1)
    print(2return 3  立刻终止函数,后面的print(4)和print(5)不执行
    print(4print(5)
res =print(res)

for i in range(3):
        if i==2:
            return 1
        (i)
res = func()
print(res)  0 1 1
 3.模拟简单的计算器 + - * /
 func(sign,num1,num2):
    if sign=="+":
        res= num1+num2
    elif sign==-:
        res =num1-*:
        res = num1*/:
        if num2 ==0:
            return 除数不能为0,老弟
        res = num1/else这个本计算器真算不了"
    return res

res = func(",3,5)
res = func(,0)
res = func(&print(res)

全局变量和局部变量

局部变量:在函数内部定义的变量(局部命名空间)
全局变量:在函数外部定义的或者使用global在函数内部定义(全局命名空间)
作用域:作用的范围

局部变量作用域:在函数的内部
全局变量作用域:横跨整个文件

生命周期:
内置变量>全局变量>局部变量

1.局部变量

 1.局部变量
 定义局部变量
    a=5
     获取局部变量
    (a)
     修改局部变量
    a=10
    (a)
func()
print(a)  error 不能在全局调用局部变量

2.全局变量

 2.全局变量
# 定义全局变量
b=10
 获取全局变量
(b)
 修改全局变量
b=20

 可以在函数内部获取全局变量
    (b)
func()

3.使用global在函数内部创建全局变量

 3.使用global在函数内部创建全局变量
global c
    c=200
func()
print(c)

4.使用global在函数内部修改全局变量

 4.使用global在函数内部修改全局变量
d=300
 d
    d=400print(d)

5.总结:

可以使用global关键字在函数内部定义一个全局变量
也可以使用global关键字在函数内部修改一个全局变量

 

函数名的使用

1.函数名是一个特殊的变量,可以把函数当做变量对它赋值

print(我是func函数return 1

 1.函数名是个特殊的变量,可以当做变量赋值
a=你好"
(a)
a= a()

 函数可以像变量一样销毁
del a
a()

2.函数名可以作为容器类型数据的参数

 2.函数名可以作为容器类型数据的元素
 func1():
    我是func1函数)
 func2():
    我是func2函数 func3():
    我是func3函数)

lst=[func1,func2,func3]
in lst:
    (i)
    i()  func1() func2() func3()

3.函数名可以作为函数的参数

 3.函数名可以作为函数的参数
)

 func4(f):
    f()  我是func3函数

func4(func3)

4.函数名可以作为函数的返回值

 4.函数名可以作为函数的返回值
 func(f):
     f
res = func(func2)  f---> func2 -----> res=func2()
res()

5.__doc__ 或者help查看文档

  __doc__ 或者help查看文档
 func(a):
    """
    功能:xxxx
    参数:a
    返回值:1
    """
    xxxxreturn 1

help(func)
res = func.__doc__
(res)

输出结果:  功能:xxxx
          参数:a
          返回值:1
            

 函数的嵌套

1.一个简单的例子

 outer():
     inner():
        我是inner函数)
    inner()
outer()
inner()  调用外部函数时,内部函数不可以再函数外部调用!

1.内部函数可以直接在函数外部调用吗?不行
2.调用外部函数后,内部函数可以在函数外部调用吗?不行
3.内部函数可以在函数内部调用吗? 可以
4.内部函数在函数内部调用时,是否有先后顺序?有!必须先定义再调用

2.函数嵌套案例

 外层是outer,内层是inner,最里层是smaller,调用smaller里面的所有代码

 smaller():
            我是smaller函数nonlocal关键字

nonlocal 遵循LEGB就近找变量原则
        1.找当前空间上一层的局部变量进行修改
        2.如果找不到,会继续向上寻找
        3.最后什么也没有,直接报错

1.找当前空间上一层的局部变量进行修改

 1.找当前空间上一层的局部变量进行修改
 outer():
    a=100
     inner():
        nonlocal a
        a=200
         200
    inner()
     200
outer()

2.如果找不到,会继续向上寻找

 2.如果找不到,会继续向上寻找
 smaller():
            nonlocal a
            a=400
             400
        smaller()
         400
outer()

3.注意点:nonlocal只能修改局部变量

 3.注意点:nonlocal只能修改局部变量
a=100
 smaller():
            nonlocal a  nonlocal只能修改局部变量,而本程序中第一行的a是全局变量,nonlocal无法修改
            a=400
            (a)
        smaller()
        (a)
    inner()
    (a) 
outer()

4.不使用nonlocal修改局部变量--->只能适用于列表

 4.不使用nonlocal修改局部变量
 func():
    lst=[1,2,4]
     inner():
        lst[-1]=10
    inner()
    (lst)
func()

globals和locals

1.locals 获取当前作用域中所有变量

locals 如果在全局,调用locals之后,获取的是打印之前的所有变量,返回字典,全局空间作用域
locals 如果在局部,1)">调用之前的所有变量,局部空间作用域

 locals 在全局:获取打印之前的所有变量
 func():
    ff = 123
a = 1
b = 2
res = locals()
c = 3
 是一个大字典,里面有很多键值对,a:1 b:2 c:3均可以打印出来(截止到打印之前)
d = 4  d:4 不会被打印
 locals 在全局
a1 = 10
 func():
    a = 1
    b = 2
    res = locals()
    c = 3
     a:1 b:2 会被打印出来 截止到调用local()之前的都会被打印出来
    d = 4
a2 = 20
func()
a3 = 30

2.globals 只获取全局空间中所有变量

globals 如果在全局,调用globals之后,1)">打印之前的所有变量,全局空间作用域
globals 如果在局部,1)">调用之前的所有变量,全局空间作用域

 global 在全局

res = globals()  a:1 b:2 c:3 截止到打印之前
c = 3
(res)
d = 4
 global 在局部
a1 = 10
 globals()
    c = 3
    (res)
    d = 4
func()   globals() a1:10 a2:20 截止到调用处
a3 = 30

3.globals 动态批量创建全局变量

 1.用字符串定义全局变量
dic = globals()  必须是global定义的字典,普通字典无效
print(dic)  返回的是系统的字典 在全局的字典当中,通过添加键值对,自动创建全局变量 对应的键时变量名,对应的值是变量指向的值
dic[name"] = 致和print(name)  致和
 2.批量定义全局变量
 func():
    dic = globals()
     通过在全局系统字典当中,添加键值对,批量创建变量
    in range(1,6 "a%d" % (1) => "a1"  "a%d" % (2) => "a2"  
        dic[a%d" % (i)] = i   1~5 
        
func()

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Python中的函数(二) 在上一篇文章中提到了Python中函数的定义和使用,在这篇文章里我们来讨论下关于函数的一些更深的话题。在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。下面来逐一讲解。一.函
Python中的字符串 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入门程序,这个程序中要打印的"Hello world"就是字符串。如果你做过自然语言处理方面的研究,并且用Python
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。 类是对现实世界中一些事物的封装,
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装。下面就来了解一下另外两大特征:继承和多态。 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类、也可以称作基类,继承的类称为子类。并且Pytho
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方便和顺手,就是web.py。它由一名黑客所创建,但是不幸的是这位创建者于2013年自杀了。据说现在由
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了...
Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中
Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言、java之间的基础语法差异。一.变量、表达式和语句 Python中的语句也称作命令,比如print "hello python"这就是一条语句。 表达式,顾名思义,是
Eclipse+PyDevʽjango+Mysql搭建Python web开发环境 Python的web框架有很多,目前主流的有Django、Tornado、Web.py等,最流行的要属Django了,也是被大家最看好的框架之一。下面就来讲讲如何搭建Django的开发环境。一.准备工作 需要下载的
在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。 Ulipad下载地址: https://github.com/limodou/ulipad http://files.cnblogs.com/dolphin0520/u...
Python中的函数(三) 在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。一.函数参数的
在Notepad++中搭配Python开发环境 Python在最近几年一度成为最流行的语言之一,不仅仅是因为它简洁明了,更在于它的功能之强大。它不仅能够完成一般脚本语言所能做的事情,还能很方便快捷地进行大规模的项目开发。在学习Python之前我们来看一下Python的历史由来,"Pytho
Python中的条件选择和循环语句 同C语言、Java一样,Python中也存在条件选择和循环语句,其风格和C语言、java的很类似,但是在写法和用法上还是有一些区别。今天就让我们一起来了解一下。一.条件选择语句 Python中条件选择语句的关键字为:if 、elif 、else这三个。其基本形式如
关于raw_input( )和sys.stdin.readline( )的区别 之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:import sysline = sys.stdin.readline()
初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法。下面就让我们一起来了解一下Python的编程风格。1.逻辑行与物理行 在Python中有逻辑行和物理行这个概念,物理行是指在编辑器中实际看到的一行,逻辑行是指一条Python语句。在Python中提倡一个物理行只
当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现。
1.经典迭代器 2.将Sentence中的__iter__改成生成器函数 改成生成器后用法不变,但更加简洁。 3.惰性实现 当列表比较大,占内存较大时,我们可以采用惰性实现,每次只读取一个元素到内存。 或者使用更简洁的生成器表达式 4.yield from itertools模块含有大量生成器函数可
本文介绍简单介绍socket的常用函数,并以python-kafka中的源码socketpair为例,来讲解python socket的运用
python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeEr