python模块,函数名称作用域,列表生成式,三元表达式和内置模块和filter介绍简单介绍
函数名称空间和作用域
名称空间:
用于存放变量与值的绑定关系的地方
1.内置名称空间
python解释器启动立刻创建结束立刻销毁
2.全局名称空间
代码运行时,实参,变量名和值存储的地方,在文件执行时产生,结束是销毁
3.局部名称空间
类似与函数调用时,形参和实参绑定关系所存储的空间,函数体代码运行时产生、结束后销毁
# 加载循序:
内置名称空间>全局名称空间 > 局部名称空间
作用域
全局作用域
内置名称空间 全局名称空间
局部作用域
局部名称空间
作用域的查看顺序一定要先明确你当前在哪里
在局部时,查看作用域的循序为: 局部名称空间 到 全局名称空间 到 内置名称空间
在全局时,查看作用域的循序为: 全局名称空间 到 内置名称空间
在内置时,作用域为本身
从图来看是由内而外,不接逆序
如果想在局部修改全局中的变量可以使用global关键字
count = 1 def index(): global count count += 1 index() # 输出为 2
小练习
name = 'jack' def pt1(): name = 'jj' print(pt1) pt1() # 输出 jj print(name) # 输出 jack
def pl() print(max) pl() # 输出<built-in function max>
x=1 def outer(): x=2 def inner(): x=3 print('inner x:%s' %x) inner() print('outer x:%s' %x) outer() ''' 输出结果为 inner x:3 inner x: 2 '''
匿名函数与列表生成式等知识补充
匿名函数
既没有函数名的函数
语法结构
lanbda 形参:返回值
# 匿名函数一般单独使用 需要结合内置函数/自定义函数等一起使用 l1 =[1,2,3,4,5,6,7] res = map(lambda x:x+1,l1) # 给列表中的每个元素加一 print(list(res))
# 遇上述功能相同的函数
def index(x):
return X + 1
res1 = map(index,l1)
print(list(res1))
'''匿名函数主要用于一些比较简单的业务 减少代码量'''
map函数
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素,并把结果作为新的Iterable返回。其语法格式为:
map(function,iterable...)
function---函数名
iterable---一个或多个序列
列表生成式
l1 = [1,2,3,4,5] 1. # 通过循环将列表中每个元素加一 list = [] for i in l1: list.append(i+1) print(list) # 输出[2,3,4,5,6] # 列表生成式方法 new_list =[i + 1 for i in l1] print(new_list) # 输出[2,3,4,5,6] 2. # 筛选出加一之后大于3的元素 list1 = [i for i in l1 if i+1 > 3] print(list1) # 输出[4,5]
# 类似功能 list = [] for i in l1: if i+1 > 60: list.append(i) print(list) ''' 生成式列表里只能存在for 和 i ''' name=['jj','kk','tt','oo'] # 列表生成式 # 在字符后加上'_NB' list = [name+'_NB' for name in name_list] print(list) # 输出['jj_NB','kk_NB','tt_NB','oo_NB'] ''' 生成式优点:减少代码量,代码冗余 '''
三元表达式
''' 补充: name = 'jj' if name == 'jj': print('jason登录成功') # 当if语句运行程序只有一段时,可以整体写在一行 ''' while True: da = input('enter a number:') if da > 4: print('大') else: print('小') #用三元表达式可以简化为 da = input('enter a number:') answer = '大' if da > 4 else '小' print(res)
语法: A if 条件 else B 当if后面的条件为True的时候使用A 为False使用else后面的B
模块的使用
# 模块 具有一定功能的代码集合 一般是以.py为格式的文件,也可以由多个py文件组成的文件夹,这也叫包 # 导入模块的本质 执行模块内代码并产生一个模块的名称空间,之后将代码执行过程中的变量名或函数存放在该名称空间中 然后给导入模块的语句一个模块名,当时用模块的功能时,该模块指向模块的名称空间 语法: import 文件名 可以通过模块名使用所有该模块功能 eg: import time print(time.time()) # 输出时间戳 form 文件名 import 变量名,函数名... 只能使用inport模块被导入的功能 from句式主要用于模块与文件在同一级目录下使用 eg: from time import time print(time()) # 输出时间戳 form 路径1.路径2 import 文件名 通过现对路径获取模块 eg: from a.b import aa. print(aa.name)
# 为了解决模块名字过长可以起别名,之后依旧可以使用 import 文件名 as 别名 form ... import 文件名 as 别名 ''' 重复导入模块,只会执行一次该模块 涉及到复杂路径模块时,输入从根目录开始的文件路径 实在复杂可以改变环境变量 '''
import time # print(time.time()) # 输出为时间戳 ''' 时间戳:是从1970年1月1日 ''' print(time.strftime('%Y-%m-%d')) # 输出当前日期2021-08-19 print(time.strftime('%H:%M:%S')) # 12:11:32 '''
X 可以表示 时,分,秒
''' time.sleep(3) # 让程序停止3秒 #统计代码执行时间 start=time.time() a=1+1 end=time.time() print(end - start) # 输出代码执行时间 import datetime # print(datetime.data.today()) # 当前日期 # print(datetime.datatime.today()) # 当前日期和时间 # 获得本地日期 年月日 tday = datetime.data.today() # 定义操作时间 day=1 也就是可以对另一个时间对象加1天 td = datetime.timedelta(days=1) # 加一天 td = datetime.timedelta(days=-1) # 减一天
filter介绍
语法:
filter(function, iterable)
- function -- 判断函数。
- iterable -- 可迭代对象。
实践:
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
l=list(newlist)
print(l)