加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

day11:return关键字&全局/局部变量&函数名的使用&函

发布时间:2020-12-20 09:55:47 所属栏目:Python 来源:网络整理
导读:关键字:return 自定义函数的返回值,return可以 把值返回到函数的调用处 ? ? ? ? 1.return+六大标准数据类型,还有类和对象,函数 ? ? ? ? 如果不定义return,默认返回的是 None ? ? ? ? 2.在 执行return之后,立刻终止函数 ,后面的代码不执行 # 1.return

关键字: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()

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读