python 反射

 1. 反射

实例:伪造web框架中的路由系统

利用反射导入模块 obj = __import__(‘commons‘) obj = __import__(‘lib.‘ + ‘commons‘,fromlist = True) 导入模块不在当前目录下,需要设置fromlist参数为真, 才能拼接模块路径

利用反射操作对象成员(属性) 通过传入字符串,操作(检查/获取/删除/设置)对象成员(属性) hasattr(对象名,字符串),如果对象中存在名为字符串的属性(成员),返回True,否则返回False getattr(对象名,字符串),如果对象中存在名为字符串的属性(成员),返回该属性(成员),否则报错 delattr(对象名,字符串),删除对象中名为字符串的属性(成员) setattr(对象名,字符串),设置对象中名为字符串的属性(成员)

2. __builtins__里面的常量 __doc__  文件中的注释 __cached__  字节码文件(pyc文件)的缓存路径 __package__  返回被导入模块所在的包名 __file__  当前py文件的完整路径 __name__ 只有执行当前py文件时,其__name__才等于__main__ 因此,一般只在主文件中,才写这样的语句: if __name == ‘__main__‘:     run()

3. 密码加密,使用hashlib模块示例:
import hashlib

password = input(‘password:‘)
obj = hashlib.md5()    #生成md5对象
obj.update(bytes(password,encoding=‘utf-8‘))    #更新md5对象,存入加密密码
result = obj.hexdigest()     # 对象的十六进制方法
print(result)

增强版示例:

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

import hashlib

hash = hashlib.md5(‘898oaFs09f‘)
hash.update(‘admin‘)
print hash.hexdigest()

还不够吊?python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密

import hmac
h = hmac.new(‘wueiqi‘)
h.update(‘hellowo‘)
print h.hexdigest()

4. 比较print 与 sys.stdout.write

print底层调用了sys.stdout.write,默认会换行,sys.stdout.write默认不换行

进度条示例:

import sys

def view_bar(num,total):
    rate = num /total
    rate_num = int(rate * 100)
    r = ‘\r{0}>{1}%‘.format(‘=‘*num,rate_num)
    sys.stdout.write(r)
    #sys.stdout.flush()   # windows平台下不需要此行

if __name__ == ‘__main__‘:
    run()
    for num in range(1,101):
        time.sleep(0.1)
        view_bar(num,100)
5. 正则表达式 re模块 元字符: . 匹配换行符以外的任意字符 ^ 以其后跟的字符串作为起始字符,然后进行匹配 * 代表0到多个字符 + 代表1到多个字符 ? 代表0或1个字符 {n} 代表n个字符 {1,n} 代表1到n个字符 [] 代表

re.findall()
时间: 2024-12-24 09:49:49

python 反射的相关文章

Python 反射机制详解

本文和大家分享的主要是python反射机制相关内容,一起来看看吧,希望对大家学习python有所帮助. 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 1 def f1():2   print("f1是这个函数的名字!")3   4 s = "f1"

Python反射

反射的定义 根据字符串的形式去某个对象中操作成员 根据字符串的形式去一个对象中寻找成员 根据字符串的形式去一个对象中设置成员 根据字符串的形式去一个对象中删除成员 根据字符串的形式去一个对象中判断成员是否存在 初始反射 通过字符串的形式,导入模块 根据用户输入的模块名称,导入对应的模块并执行模块中的方法 # Python使用的是3.5.1 [[email protected] ~]# python -V Python 3.5.1 # commons.py为模块文件 [[email protect

python 反射(__import__、getattr)

#反射的作用在于模块导入,函数调用时简化代码 以URL为例: 假设URL的形式是A/B #!/usr/bin/env python# _*_ coding:utf-8 _*_# 常规'''from backend import login,logout,admindata = raw_input('请输入URL')if data == 'login/mylogin': login.mylogin()elif data == 'logout/mylogout': logout.mylogout()

python反射机制深入分析

对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 def f1(): print("f1是这个函数的名字!") s = "f1" print("%s是个字符串" % s) 在上面的代码中,我们必须区分两个概念,f1和“f1".前者是函数f1的

python反射及内置函数方法

isinstance(obj,cls)检查是否是obj或cls类的对象 1 class Foo: 2 pass 3 obj=Foo() 4 print(isinstance(obj,Foo)) 5 运行结果是True检查sub类是否是super类的派生类 6 class Foo: 7 pass 8 class Bar(Foo): 9 pass 10 print(issubclass(Bar,Foo)) 11 运行结果是True 反射? 反射是指程序可以访问,检测和修改它本身状态或行为的一种能力(

Python反射、异常处理

反射 :字符串到对象属性的映射 hasattr(obj,string), 判断对象obj里面是否有叫string的字段或方法 getattr(obj,string) 获取obj对象里名叫string的字段或方法(如果重名先找字段) setattr(obj,y,v) 设置属性或者方法obj.y = v delattr(obj,y) 删除属性obj.y class Dog(object): def __init__(self,name): self.name = name def eat(self)

python 反射机制在实际的应用场景讲解

剖析python语言中 "反射" 机制的本质和实际应用场景一. 前言 def s1(): print("s1是这个函数的名字!") s = "s1" print("%s是个字符串" % s) 在上面的代码中,我们必须区分两个概念,f1和"f1".前者是函数f1的函数名,后者只是一个叫"f1"的字符串,两者是不同的事物.我们可以用f1()的方式调用函数f1,但我们不能用"f1&q

python反射机制实现

笔者之前看到很多撸java的同事.老是说着反射机制什么的,然后就想想我大Python肯定也有反射机制的实现方法,于是就写了下面的一段python实现的反射机制代码: comm模块代码 1 def jk(): 2 name = 'huangsonghui' 3 print(name) 4 return {1,2,3} main模块代码: import commdef run(): inp = input('enter:') if hasattr(comm,inp): d = getattr(com

Python ————反射机制

python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. # commons.py 文件 name = "nick" def f1(): return "This is f1." def f2(): return "This is f2." def nb(): return "This is ni