python – 生成器而不是列表理解?我还能在哪里提高课程水平?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 生成器而不是列表理解?我还能在哪里提高课程水平?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1903字,纯文字阅读大概需要3分钟。
内容图文
![python – 生成器而不是列表理解?我还能在哪里提高课程水平?](/upload/InfoBanner/zyjiaocheng/808/df8b717b526249858aa58057404ff55c.jpg)
我对Python很陌生.最近我在研究python的类概念.好吧,对于我编写的几个脚本,我认为定义一个将SQL语句放在一起的类(在ArcGis方言中)会很方便.没什么好看的.这就是我想出的.我问两件事:第一,一般缺陷?建议改进?其次,我有点卡在最后一个函数def构造函数的代码中.实际上我想从字典中返回元组而不是列表.但列表理解很好.那么发电机怎么样?我无法确切地知道如何做到这一点……
class ArcSql:
type_book = {'str':("'","'"), 'int':("", "")}
format_book = dict(shp=("'","'"), GDB=("[","]"))
def __init__(self,colom_name, values_list, value_type = 'str', arc_format ='shp'):
self.colom = colom_name
self.values = values_list
self.valtype = self.constructor(type_book, value_type)
self.aformat = self.constructor(format_book, arc_format)
self.colom_formated = str(self.aformat[0][0]) + self.colom + str(self.aformat[0][1])
def statement(self):
temp_state = []
connector = "'OR' "
count_values = len(self.values)
if count_values == 0:
return("error, not enough values...")
else:
for v in self.values:
x = self.colom_formated + " = " + str(self.valtype[0][0]) + v + str(self.valtype[0][1]) + ' ' + connector
temp_state.append(str(x))
state = "".join(temp_state)[:-5]
return(str(state))
def constructor(self, book, book_key):
return([v for k,v in book.iteritems() if k==book_key])
解决方法:
你应该在codereview site中更好地提出你的第一个问题.
关于你的第二个问题,你可以使用如下发电机:
def constructor(self, book, book_key):
for k, v in book.iteritems():
if k==book_Key:
yield v
...
for value in obj.constructor(book ,book_key):
# Do whatever you need with value
无论如何,我的理解是,在这种情况下,你只能从列表理解中得到一个结果:
def constructor(self, book, book_key):
return next(v for k, v in book.iteritems() if k==book_key, None)
...
value = obj.constructor(book ,book_key)
if value is not None:
# Do whatever you need with value
其中next是一个内置函数,用于返回迭代器的下一个值或传递的默认值(在本例中为None)如果迭代器耗尽(如果没有传递默认值,则在这种情况下会引发异常).
内容总结
以上是互联网集市为您收集整理的python – 生成器而不是列表理解?我还能在哪里提高课程水平?全部内容,希望文章能够帮你解决python – 生成器而不是列表理解?我还能在哪里提高课程水平?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。