持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
大家好,我是木大木大,因为疫情和环境原因啊,在家开始了自学python的路子,从此深坑加一人。后面我会每天持续更新一些学习python的过程,当然一开始就是一些基础啦,希望大家多多支持,莫嫌弃啦~
作用域
1.1 作用域简介
作用
域——》产生作用的区域
程序中指的是变量生效的区域
y = 2 #
def fn():
x=1
print("函数内部y = ",y)
fn()
print("函数外部y = ",y)
1.2 全局作用域
全局作用域的生命周期:全局作用域在程序执行时创建,在程序执行结束时销毁
所有函数以外的都是全局作用域
只要代码不是在函数里面的都是全局作用域
在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问
y = 2 # y是全局变量
def fn():
x=1
print("函数内部y = ",y)
fn()
print("函数外部y = ",y)
1.3 函数作用域(局部作用域)
生命周期:在函数调用时创建,在调用结束时销毁
函数每次调用的时候会产生一个新的函数作用域
def fn():
a=10
print("a",a)
fn()
fn()
fn()
def fn():
a=10
print("内部a=",a)
print("外部a=",a) # 报错,访问不到函数内部a
def fn1():
a = 30
def fn2():
print(a) # 可以从里往外看
fn2()
fn1()
def fn1():
def fn2():
a = 10
print(a) # 不能从外往里看
fn1()
# 使用变量的时候,会优先在当前作用域中寻找该变量,如果有就使用,没有则继续往上一级作用域寻找,如果全局作用域都没有就会报错
def fn1():
a = 20
def fn2():
a = 10
print(a)
fn2()
fn1()
a = 1
def fn():
a = 2
print("内部a = ",a)
fn()
print("外部a = ",a)
内部a = 2
外部a = 1
------global 声明变量为全局变量
a = 1
def fn():
global a
a = 2
print("内部a = ",a)
fn()
print("外部a = ",a)
内部a = 2
外部a = 2
总结:
1.基本就是 里面能看到外面,但是外面看不到里面
2.如果局部修改全局变量可以加上一个 global关键字声明一下
由内往外可以访问,由外往内是访问不了的
2.1 命名空间
指的是变量存储的位置,每一个变量都需要存储到指定的命名空间中
locals():获取当前作用域的命名空间,返回一个字典
{'__name__': '__main__', '__doc__': '\n1.写函数,判断用户传入的对象长度是否大于5\n\n\n2.写函数,检查传入列表的长度[1,2,3,4,5],如果长度大于2,那么仅仅保留前两个长度的内容,并返回保留的内容\n\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001B1BCC02910>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/小川/study/pythonproject/python68期_Text/day10/作用域与命名空间.py', '__cached__': None}
a = 1
def fn():
pass
print(locals().keys())
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', '__cached__', 'a', 'fn'])
a = 1
def fn():
b = 1
print(locals()) # {'b': 1}
fn()
a = 1
def fn():
global b
b = 1
print(locals()) # global把b声明给了全局作用域 {}
fn()
a = 1
print(locals()['a'])
print(a)
locals()['b'] = 10
print(locals())
global ——》全局
nonlocal——》局部 内嵌函数中使用
用来在函数或其他作用域中使用外层(非全局)变量
def f1():
a = 1
def f2():
a = 2
print("内部a=",a)
f2()
print("外部a=",a)
f1()
内部a= 2
外部a= 1
def f1():
a = 1
def f2():
nonlocal a
a = 2
print("内部a=",a)
f2()
print("外部a=",a)
f1()
内部a= 2
外部a= 2
全局 = 大方的人——》我的东西你们都可以用
局部 = 小气的人——》我的东西只有我能用
2.2 函数的高级用法
2.2.1 函数可以被引用(可以赋值)
def fn():
print("我是fn")
f = fn
print(f,fn) # <function fn at 0x000002160DAF73A0> <function fn at 0x000002160DAF73A0>
fn() # 我是fn
f() # 我是fn
2.2.2 函数可以作为参数传入另一个函数
def fn():
print("我是fn")
def fn2(x): # x——》fn
print(x) # <function fn at 0x000002AAB84573A0>
x() # 我是fn
fn2(fn)
今天的内容就到这里啦,感谢观看喔~