我是靠谱客的博主 整齐飞鸟,最近开发中收集的这篇文章主要介绍python是动态语言、变量不需要预先定义_Python tricks(1) -- 动态定义一个新变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python是动态语言, 无需声明变量即可使用.

传递一个tuple, list或者dict等等方式, 有时候这种方式的使用不是很好.

对于tuple和list来说都是用下标的访问方式(即使用[]), 这种方式显得不够自然, 阅读代码的时候需要知道index对应的变量含义.

其实, 在python中有很多方式可以动态定义一个新变量, 让代码更具可读性.

动态定义一个新变量, 最简单的方式是使用locals()或者globals(), 两个方法的返回值是dict, 可以通过修改dict来增加新变量.

locals()["aa"] = "locals_aa"

print aa

globals()["bb"] = "global_bb"

print bb

代码看起来略显得诡异把. 我们如何在一个module中动态定义一个新变量.

先来获取this_module这个变量.

import sys

this_module = sys.modules[__name__]

获得this_module之后就可以通过this_module.new_var=blahblah来动态定义一个新变量了.

this_module.a = 10

print dir(this_module)

print a

上面的方式定义了一个a的新变量, 上面的调用方法类似于this_module.__dict__["a"] = 10.

动态定义一个变量在什么时候有用呢? 具一个pyh库的例子吧(这个库的html标签不是很全, 可以修改tags变量来增加没有的标签).

thisModule = modules[__name__]

for t in tags: setattr(thisModule, t, TagFactory(t))

pyh使用这种方式为pyh module提供了所有tags的属性, 当然这里使用了setattr, 改成thisModule[t] = TagFactory(t)是一样的效果.

最后再扯一下python的collections.namedtuple方法.

tuple默认是用下标访问, 这个namedtuple还是tuple, 不过可以不用下标访问了.

from collections import namedtuple

# define a namedtuple type

t = namedtuple("t", "a b c")

x = t(1, 2, 3)

print x

print x[0], x.a

print x[1], x.b

print x[2], x.c

本文的实验环境: python 2.7.x(2.7.5)

水平有限, 欢迎拍砖!

最后

以上就是整齐飞鸟为你收集整理的python是动态语言、变量不需要预先定义_Python tricks(1) -- 动态定义一个新变量的全部内容,希望文章能够帮你解决python是动态语言、变量不需要预先定义_Python tricks(1) -- 动态定义一个新变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部