函数名称空间与作用域

目录

  • 函数名称空间与作用域

  • 匿名函数与列表生成式等知识补充

  • 三元表达式
  • 模块

  • 常见内置模块

 

 

 

 

函数名称空间

名称空间:
存放变量与值绑定关系的地方
 


三大分类
1.内置名称空间
    python解释器启动立刻创建结束立刻销毁

2.全局名称空间
    伴随python文件的开始执行/执行完毕而产生/回收

3.局部名称空间
    函数体代码运行产生结束销毁



# 加载顺序:内置名称空间 > 全局名称空间 > 局部名称空间

 

 

 

 

作用域

作用域:
域指的是范围,作用域指的是作用的范围

二大类
1.全局作用域
    内置名称空间 全局名称空间

2.局部作用域
    局部名称空间
   

""
作用域的查找顺序一定要先明确你当前在哪
""
    1.如果当前在局部名称空间
        局部名称空间 全局名称空间 内置名称空间
    2.如果当前在全局名称空间
        全局名称空间 内置名称空间
    3.如果当前在内置名称空间
        内置名称空间
    

#取值顺序:局部空间 > 全局空间 > 内置空间

 

 

 

 

 

 

关键字global

#  如果想在局部修改全局名称空间中的名字对应的值
  可以使用global关键字

 

 

 

 

 

 

 

 

 小练习

name = 'jack'
def func1():
   name = 'jason'
def func2():
   name = 'kevin'
def func3():
   name = 'tony'
func1()
func2()
func3()
print(name)
View Code

 

 

 

 

 

x=1
def outer():
    x=2
    def inner():
        x=3
        print('inner x:%s' %x)
    inner()
    print('outer x:%s' %x)
outer() 
View Code

 

 

 

 

 

 

 

匿名函数

匿名函数
    即没有函数名的函数

语法结构
    lambda 形参:返回值
       
# 匿名函数一般不单独使用 需要结合内置函数/自定义函数等一起使用
  匿名函数主要用于一些比较简单的业务逻辑中 减少代码量

 

l = [1, 2, 3, 4, 5, 6, 7]
res = map(lambda x: x + 10, l)
print(list(res))

def index(x):
    return  x + 10
res1 = map(index,l)
print(list(res1))
View Code

 

 

 

 

 

列表生成式

l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# 将列表中每个元素加一
new_list = []
for i in l1:
    new_list.append(i+1)
print(new_list)
# 列表生成式
new_list = [i + 1 for i in l1]
print(new_list)
View Code

 

 

 

name_list = ['jason', 'kevin', 'tony', 'oscar']
# 将列表每个元素后面加上_NB的后缀
new_list = []
for name in name_list:
    new_list.append(name + '_NB')
print(new_list)
# 列表生成式
new_list1 = [name+'_NB' for name in name_list]
print(new_list1)
View Code

 

 

 

 

l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# 筛选出加一之后大于60的元素
new_list = []
for i in l1:
    if i+1 > 60:
        new_list.append(i)
print(new_list)
# 列表生成式
new_list1 = [i for i in l1 if i+1 > 60]
print(new_list1)
View Code

 

 

三元表达式

 

# 语法结构
  A    if 条件 else B

当if后面的条件为True的时候使用A 为False使用else后面的B

 

 

 

模块的使用

# 什么是模块与包
    具有一定功能的代码集合
    可以是py文件 也可以是多个py文件的组合即文件夹(包)
    

# 导入模块的本质
    会执行模块内代码并产生一个该模块的名称空间 
    将代码执行过程中的名字存放该名称空间中
    然后给导入模块的语句一个模块名 该模块指向模块的名称空间
'''重复导入相同的模块 只会执行一次'''


 

 

 

例子

 b.py
        import aaa
    aaa.py
        name = 'tom'
        def index():
            pass
View Code

 

 

 

 导入模块的两种句式

1.import 模块名
        可以通过模块名点出所有的名字


2.from 模块名 import 子名1,子名2
        只能指名道姓的使用import后导入的子名并且还存在冲突的风险
        
# from句式主要用于模块与当前文件不在同一级目录下使用


# 如果模块名较长或者不符合你的看法 可以起别名
import asjdkjkasdjaskdkasdasdjsjdksadksajdkasjd as ad
from 文件夹多层路径 import f1 as fff

 

 

 

内置模块之时间模块


"""时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒"""

import time
1.print(time.time()) # 获取当前时间的时间戳
2.print(time.strftime('%Y-%m-%d')) # 年月日
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 年月日加时分秒


3. print('该睡了')
time.sleep(3)

print('睡醒了') # 休眠状态


4. def index():
print('123')

time.sleep(3)

print('哈哈哈')
# 统计index函数执行的时间

5. start_time = time.time()

index()
end_time = time.time()
print(end_time - start_time)
# 增加或返回时间

 

posted @ 2021-08-19 20:43  陌若安然  阅读(87)  评论(0)    收藏  举报