python高级

python 基础

一,名字空间和作用域

1.1名字空间:

1,命名空间类型:
​local:局部命名空间,查看:locals()global:全局命名空间,只要在全局命名空间中的内容到处都能使用.

查看:globals()
	__name__: 模块名, 如果是主执行文件 值为 __main__
    __builtins__:内建名字空间对象,用于查看内建名字空间中的内容的
    __file__:当前文件的绝对路径
        #动态获取当前文件所在的目录
        import os 
        print(os.path.dirname(__file__))
        
   

1.2作用域

1,作用域的分类
	局部作用域(local):作用范围为当前函数内容
	闭包作用域(enclosing):作用范围为函数中的子函数中(函数嵌套)
	全局作用域(global):作用范围全局
	内建作用域(bulitin):作用范围全局
	#作用域:指成员(变量,函数,方法,类)的使用范围
2,成员的查找顺序:L>E>G>B
3,指定操作对应作用域中的成员
	在函数内修改全局的成员,使用global 全局变量名 引入之后才能修改
	在子函数中修改闭包变量,使用nonlocal 闭包变量 引入闭包变量才能修改

3,装饰器

1,概念:本质也是一个函数,用于加强原版函数,这个函数就是装饰器
    备注:原函数功能不变的情况进行加强
2,如何实现装饰器函数
	1)定义一个函数
    2)接收原函数作为参数
    3)新增新功能
3.装饰器的使用
	def 装饰器函数(原函数):
        pass
    @装饰器函数--->类方法,静态方法,装饰器的使用
    def 原函数()
    	pass

4,导入随机模块

import random
random.random()--->实数相关,用于生成一个01的随机浮点数:[0,1)
random.uniform(a,b)----->生成[a,b][b,a]之间的均匀分布随机浮点数.
random.randint(a,b)---->整数相关,生成[a,b]的随机整数,要求a<b
random.randrange(a,b)---->生成[a,b)的随机整数,第三个参数可以指定步长.
random.choice(seq)---->序列相关,从序列中随机选择一个元素,若序列为空,则抛出异常
random.shuffle(seqb)---->打乱原序列,原序列必须可写
random.sample(seq,k)----->从序列中随机选择K个元素返回,原序列不变
random.seed(n=none) ----->初始化 初始化随机商池.

5,时间模块

1,概念
time模块:基于计算机底层时钟实现的模块,计算机时间是默认使用4个字节存储,这个时间也就是时间戳,时间到2038年
datetime 模块:对应time模块的二次封装和改进,表示0000-9999
2,time 模块
	语法:
	import time
	time.time():获取当前时间戳
	time.sleep(秒):让程序休眠多少秒
3,datetime 模块
--->该模块上有两个重要的类,datetime类和,timedelta类
语法:
	from datetime import datetime,timedelta
	使用:
		datetime类的使用:
		datetime.now():创建当前时间对象
		datetime(year=年,month=月,day=天):创建指定时间对象
		datatime.strptime():将字符串转换为时间对象
		#时间对象上的方法
		时间对象.year
		时间对象.month
		时间对象.day
		时间对象.strftime()#将时间对象进行字符串格式,用于自定义时间展示.
4.timedelta类:用于处理时间对象之间的差(时间计算),时间跨度类
		创建对象的方式:
		1,两时间对象相减
		2,创建跨度对象
		例: 计算100天后的日期
        例: future = datetime.now() + timedelta(days=100)
             print(future)

6,哈希散列算法

1,哈希散列是一种算法,用于对对数据进行加密,生成固定长度小量的数据,是原数据的唯一识别码
  注:哈希散列算法是不可逆算法
2,用处:
	a,密码加密
	b,软件生成md5码进行比对安全
3,常见的算法
a,md5
b,sha
4,算法的使用步骤
a,导入算法库模块
import hashlib
b,准备需要加密的数据(将数据转为二进制)
1) b'字符串'
2)变量名.encode('utf-8')
3)读取文件时采用rb
c,创建算法对象
h=hashlib.md5(二进制数据)
h=hashlib.sha256(二进制数据)
h=hashlib.sha512(二进制)
d,获取加密结果
h.hexdigest()

迭代器和生成器

1容器: 存储多个元素的数据结构    
    例如: 列表,元组,字典,集合,字符串迭代器(for ... in ...遍历的底层实现)    
        a. 使用 iter(容器) ----> 生成迭代器   
        b. 使用 next(迭代器) 每次取下一个元素    
        c. 取完抛出异常 StopIteration
        
        names = ["张飞","李四","关羽","曹操","刘备"]
			# for ... in ...
			# 通过迭代器的形式遍历列表
				d = iter(names)
				while True:
   					 try:
        				print(next(d))
   					 except Exception as e:
        					pass

生成器:   
    概念: 1. 生成器是特殊的迭代器(使用方式和迭代器一样)        
         2. 生成器中的元素不是直接生成, 而是每次调用next()才生成        
         3. 好处: 大大的节约内存资源    
            定义生成语法:        
                1. 方式一: 列表推导式生成器            
                    g = (表达式 for i in 容器 简单判断语句) # range()  generate  
                    g = (i for i in range(1,1000000000)) # 直接生成数据 对内存消耗非常大
					print(g)
					print(next(g))
					print(next(g))
                    
                2. 方式二: 函数式生成器            
                    a. 定义函数的时候,只要函数中出现了 yield , 这个函数就是生成器函数            
                    b. 调用函数:  生成器函数名() 不会立马执行函数体, 返回生成器对象            
                    c. 当使用 next(生成器对象) 执行函数体            
                    d. 当执行到 yield 数据, 返回数据到 next() 调用位置 并且 暂停 代码运行.                             e. 当下次再调用 next() 才继续运行.:# 生成器函数 1-任意
def showNum():
    i = 1
    while True:
        yield i  # 返回
        i += 1
g = showNum()  # 返回生成器对象
print(next(g))
print(next(g))
print(next(g))
print(next(g))

# 生成斐波那契数列:1 1 2 3 5 8 13 ............
def fbnq():
    a, b = 1, 1  # 初始化值
    while True:
        yield a + b
        a, b = b, a + b
# 使用
g = fbnq()
print(next(g))
print(next(g))
print(next(g))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值