欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

Python中使用装饰器和元编程实现结构体类实例

时间:2022-06-10 08:31:04 其他范文 收藏本文 下载本文

下面小编给大家整理的Python中使用装饰器和元编程实现结构体类实例,本文共6篇,欢迎阅读与借鉴!

Python中使用装饰器和元编程实现结构体类实例

篇1:Python中使用装饰器和元编程实现结构体类实例

Python中使用装饰器和元编程实现结构体类实例,本文的方法算是一种Python的黑魔法技术,并非Python的常规写法,需要的朋友可以参考下

Ruby中有一个很方便的Struct类,用来实现结构体,这样就不用费力的去定义一个完整的类来仅仅用作访问属性。

代码如下:

class Dog < Struct.new(:name, :age)

end

fred = Dog.new(“fred”, 5)

printf “name:%s age:%d”, fred.name, fred.age

##name:fred age:5

Python3.4中也可以这么干,但写法很累赘。其中包含self.name = name 这种很烦人的写法。

代码如下:

class Dog(object):

def __init__(self, name, age):

self.name = name

self.age = age

fred = Dog(“fred”, 5)

print(‘name:{name} age:{age}‘.format(name=fred.name, age=fred.age))

##name:fred age:5

想到我大Python是无所不能的,有没有一种简化结构体类属性定义的方法呢?答案肯定是有的,

在补习了一些Python黑魔法技术后,我想到利用装饰器函数和元编程技术来实现。

代码如下:

def struct(*name):

“”“ 装饰器函数

用途:用于在类定义中,自动设置self.value = value

”“”

def decorator(func):

def wrapper(*args, **kw):

for i in range(len(name)):

setattr(args[0], name[i], args[i+1])

return func(*args, **kw)

return wrapper

return decorator

class Dog(object):

@struct(‘name‘,‘age‘)  #黑魔法所在!

def __init__(self, *all_value):

pass

fred = Dog(“fred”, 5)

print(‘name:{name} age:{age}‘.format(name=fred.name, age=fred.age))

##name:fred age:5

要注意的是,这种写法会造成代码结构的不清晰。

篇2:Python实现类继承实例

-05-05ssh批量登录并执行命令的python实现代码

-02-02python登录QQ邮箱发信的实现代码

2013-03-03python中定义结构体的方法

2012-08-08Python模块学习filecmp 文件比较

-02-02python实现ftp客户端示例分享

2014-04-04Python操作sqlite3快速、安全插入数据(防注入)的实例

2014-05-05Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

2013-12-12python批量修改文件后缀示例代码分享

2013-12-12python获取beautifulphoto随机某图片代码实例

2014-02-02python基础教程之udp端口扫描

篇3:Python实现类继承实例

最近更 新

在Windows8上的搭建Python和Django环境

python获取网页状态码示例

python 判断自定义对象类型

使用python在校内发人人网状态(人人网看状

python抓取网页图片并放到指定文件夹

python实现socket端口重定向示例

python二分法实现实例

python解析xml模块封装代码

windows下python模拟鼠标点击和键盘输示例

python访问sqlserver示例

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇4:Python的迭代器和生成器使用实例

这篇文章主要介绍了Python的迭代器和生成器使用实例,本文讲解了迭代器的next方法、__iter__方法和实例以及生成器的代码实例,需要的朋友可以参考下

一、迭代器Iterators

迭代器仅是一容器对象,它实现了迭代器协议,它有两个基本方法:

1)next方法

返回容器的下一个元素

2)__iter__方法

返回迭代器自身

迭代器可使用内建的iter方法创建,见例子:

代码如下:

>>> i = iter(‘abc‘)

>>> i.next

‘a‘

>>> i.next()

‘b‘

>>> i.next()

‘c‘

>>> i.next()

Traceback (most recent call last):

File “”, line 1, in

StopIteration:

class MyIterator(object):

def __init__(self, step):

self.step = step

def next(self):

“”“Returns the next element.”“”

if self.step==0:

raise StopIteration

self.step-=1

return self.step

def __iter__(self):

“”“Returns the iterator itself.”“”

return self

for el in MyIterator(4):

print el

--------------------

结果:

代码如下:

3

2

1

0

二、生成器Generators

从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码。

它基于yield指令,允许停止函数并立即返回结果。

此函数保存其执行上下文,如果需要,可立即继续执行。

例如Fibonacci函数:

代码如下:

def fibonacci():

a,b=0,1

while True:

yield b

a,b = b, a+b

fib=fibonacci()

print fib.next()

print fib.next()

print fib.next()

print [fib.next() for i in range(10)]

--------------------

结果:

代码如下:

1

1

2

[3, 5, 8, 13, 21, 34, 55, 89, 144, 233]

PEP Python Enhancement Proposal Python增强建议

tokenize模块

代码如下:

>>> import tokenize

>>> reader = open(‘c:/temp/py1.py‘).next

>>> tokens=tokenize.generate_tokens(reader)

>>> tokens.next()

(1, ‘class‘, (1, 0), (1, 5), ‘class MyIterator(object):/n‘)

>>> tokens.next()

(1, ‘MyIterator‘, (1, 6), (1, 16), ‘class MyIterator(object):/n‘)

>>> tokens.next()

(51, ‘(‘, (1, 16), (1, 17), ‘class MyIterator(object):/n‘)

例子:

代码如下:

def power(values):

for value in values:

print ‘powering %s‘ %value

yield value

def adder(values):

for value in values:

print ‘adding to %s‘ %value

if value%2==0:

yield value+3

else:

yield value+2

elements = [1,4,7,9,12,19]

res = adder(power(elements))

print res.next()

print res.next()

--------------------

结果:

代码如下:

powering 1

adding to 1

3

powering 4

adding to 4

7

保持代码简单,而不是数据,

注意:宁可有大量简单的可迭代函数,也不要一个复杂的一次只计算出一个值的函数。

例子:

代码如下:

def psychologist():

print ‘Please tell me your problems‘

while True:

answer = (yield)

if answer is not None:

if answer.endswith(‘?‘):

print (“Don‘t ask yourself too much questions”)

elif ‘good‘ in answer:

print “A that‘s good, go on”

elif ‘bad‘ in answer:

print “Don‘t be so negative”

free = psychologist()

print free.next()

print free.send(‘I feel bad‘)

print free.send(“Why I shouldn‘t ?”)

print free.send(“ok then i should find what is good for me”)

--------------------

结果:

代码如下:

Please tell me your problems

None

Don‘t be so negative

None

Don‘t ask yourself too much questions

None

A that‘s good, go on

None

篇5:python实现的系统log类实例

作者:liujian0616 字体:[增加 减小] 类型:

这篇文章主要介绍了python实现的系统实用log类,实例分析了Python基于logging模块实现日志类的相关技巧,需要的朋友可以参考下

本文实例讲述了python实现的系统实用log类,分享给大家供大家参考。具体如下:

每个系统都必不可少会需要一个log类,方便了解系统的运行状况和排错,python本身已经提供了一个logger了,很强大,只要稍微封装一下就可以放到自己的系统了,下面是我自己的log类

文件名:logger.py

“”“This module takes care of the logginglogger helps in creating a logging system for the application Logging is initialised by function LoggerInit.”“”import loggingimport osimport sysclass logger(object): “”“Class provides methods to perform. logging.”“” m_logger = None def __init__(self, opts, logfile): “”“Set the default logging path.”“” self.opts = opts self.myname = ‘dxscs‘ self.logdir = ‘.‘ self.logfile = logfile self.filename = os.path.join(self.logdir, self.logfile) def loginit(self): “”“Calls function LoggerInit to start initialising the logging system.”“” logdir = os.path.normpath(os.path.expanduser(self.logdir)) self.logfilename = os.path.normpath(os.path.expanduser(self.filename)) if not os.path.isdir(logdir):try: os.mkdir(logdir)except OSError, e: msg = (‘(%s)‘%e) print msg sys.exit(1) self.logger_init(self.myname) def logger_init(self, loggername): “”“Initialise the logging system. This includes logging to console and a file. By default, console prints messages of level WARN and above and file prints level INFO and above. In DEBUG mode (-D command line option) prints messages of level DEBUG and above to both console and file. Args: loggername: String - Name of the application printed along with the log message. ”“” fileformat = ‘[%(asctime)s] %(name)s: [%(filename)s: %(lineno)d]: %(levelname)-8s: %(message)s‘ logger.m_logger = logging.getLogger(loggername) logger.m_logger.setLevel(logging.INFO) self.console = logging.StreamHandler() self.console.setLevel(logging.CRITICAL) consformat = logging.Formatter(fileformat) self.console.setFormatter(consformat) self.filelog = logging.FileHandler(filename=self.logfilename, mode=‘w+‘) self.filelog.setLevel(logging.INFO) self.filelog.setFormatter(consformat) logger.m_logger.addHandler(self.filelog) logger.m_logger.addHandler(self.console) if self.opts[‘debug‘] == True:self.console.setLevel(logging.DEBUG)self.filelog.setLevel(logging.DEBUG)logger.m_logger.setLevel(logging.DEBUG) if not self.opts[‘nofork‘]:self.console.setLevel(logging.WARN) def logstop(self): “”“Shutdown logging process.”“” logging.shutdown()#test if __name__ == ‘__main__‘: #debug mode & not in daemon pts = {‘debug‘:True,‘nofork‘:True} log = logger(opts, ‘dxscs_source.log‘) log.loginit() log.m_logger.info(‘hello,world‘)

执行结果:

终端和文件中都显示有:[-09-06 16:56:01,498] dxscs: [logger.py: 88]: INFO   : hello,world

如果只需要显示在文件中可以将debug和nofork选项都置为false

希望本文所述对大家的Python程序设计有所帮助,

篇6:Python中name的使用实例

这篇文章主要介绍了Python中__name__的使用实例,并总结了两种情况下__name__的值会是什么,需要的朋友可以参考下

1. 如果模块是被导入,__name__的值为模块名字

2. 如果模块是被直接执行,__name__的值为‘__main__‘

Py1.py

代码如下:

#!/usr/bin/env python

def test():

print ‘__name__ = ‘,__name__

if __name__ == ‘__main__‘:

test()

Py2.py

代码如下:

#!/usr/bin/env python

import Py1.py

def test():

print ‘__name__ = ‘,__name__

if __name__ == ‘__main__‘:

test()

print ‘Py1.py __name__ = ‘,Py1.__name__

执行结果:

代码如下:

__name__=__main__

Py1.py __name__=Py1

通过结果可以知道,Py2.py直接执行,那么内建变量__name__的值为__main__,否则为模块的名字,通过这个特性可以在if语句里面添加测试代码,可以提高减少BUG,提高程序的健壮性,

Python中name的使用实例

代码如下:

if __name__ == ‘__main__‘:

test()

理解Python中的类与实例

python中常用的各种数据库操作模块和连接实例

使用Python的Django框架实现事务交易管理的教程

讲解python参数和作用域的使用

Python中处理字符串之endswith方法的使用简介

Shell脚本中使用for循环和cat命令实现按顺序合并文件

python实现分析apache和nginx日志文件并输出访客ip列表的方法

网页设计中表格和层排版的使用技巧论文

Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上

《Python中使用装饰器和元编程实现结构体类实例(整理6篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

最新推荐
猜你喜欢
点击下载本文文档