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)

 

 

 

返回目录

posted @ 2021-08-19 17:14  微纯册  阅读(94)  评论(0编辑  收藏  举报