程序是對的, 給的例子也是對的, 我認(rèn)為上面的程序不應(yīng)當(dāng)報錯.
這段程序設(shè)計flatten
函數(shù)的意義是將樹形結(jié)構(gòu)按照深度優(yōu)先順序進(jìn)行迭代. 可以實現(xiàn)將一個樹形結(jié)構(gòu)"壓扁"成列表結(jié)構(gòu).
比如:
tree = [
['1', 2, [3]],
['4', 5]
]
list(flatten(tree)) # 得到 ['1', 2, 3, '4', 5]
而對于這段代碼
# 不迭代類似于字符串的對象
try:
nested + ''
except TypeError:
pass
else:
raise TypeError
注釋標(biāo)明了是為了不迭代字符串對象. 如果缺少了這一段, 那么程序就會在遇到迭代對象中包含字符串的時候陷入一直迭代的無限循環(huán). 這是因為字符串也是可迭代對象.
比如輸入'abc'
, 那么原函數(shù)里層try語句就會raise TypeError
, 這個TypeError
被外層try語句except TypeError
捕捉到, 就直接將'abc'
作為迭代結(jié)果輸出去了.
如果輸入不可迭代對象, 比如123
, 那么在執(zhí)行nested + ''
的時候就會因為except TypeError
而pass
, 繼續(xù)執(zhí)行for sublist in nested
, 但是123
是int類型, 不是可迭代對象, 所以會拋出TypeError: 'int' object is not iterable
, 這個錯誤同樣被外層的try語句捕捉到, 123
就作為迭代結(jié)果輸出.
只有非字符串的可迭代對象才會進(jìn)入for sublist in nested
中.
如果缺少了里面那個try語句, 那么就會執(zhí)行for sublist in nested:
, 這里的nested
就是'abc'
, 那么就會迭代'a', 'b', 'c'
, 迭代到'a'
的時候返回'a'
, 由于'a'
又是可迭代的, 于是又迭代返回'a'
, 這樣程序就會陷入一直迭代'a'
的無限循環(huán)過程, 最后會拋出RecursionError
.
所以flatten
這個函數(shù)的設(shè)計是沒問題的, 它完成了設(shè)計者期待它需要實現(xiàn)的功能.
# 因為這個地方涉及到了python中的元類,而我元類理解的不到家
# 所以就不詳細(xì)解釋了,只給樓主說下大致流程吧
# 免得元類那塊說錯了,再誤導(dǎo)樓主
# 因為樓主沒有寫,我就認(rèn)為樓主使用的插件是flask-wtf了
# 直接看Form的父類 flask_wtf.form.FlaskForm 和 wtforms.form就可以了
# 在 flask_wtf.form.FlaskForm 中定義了一個 Meta 內(nèi)部類
# 在這個內(nèi)部類中有如下方法,就是在這個方法中獲取的表單中的值的
def wrap_formdata(self, form, formdata):
if formdata is _Auto:
if _is_submitted():
if request.files:
return CombinedMultiDict((
request.files, request.form
))
elif request.form:
return request.form
elif request.get_json():
return ImmutableMultiDict(request.get_json())
return None
return formdata
# 然后在wtforms.form.BaseForm中通過如下方法,為自定義的每個filed賦值
def process(self, formdata=None, obj=None, data=None, **kwargs):
# 這個就是form表單中的內(nèi)容了
formdata = self.meta.wrap_formdata(self, formdata)
if data is not None:
kwargs = dict(data, **kwargs)
# 這里通過form表單中的值,為每個自定義filed賦值
for name, field, in iteritems(self._fields):
if obj is not None and hasattr(obj, name):
field.process(formdata, getattr(obj, name))
elif name in kwargs:
field.process(formdata, kwargs[name])
else:
field.process(formdata)
# 注:
# 如下操作確實是會創(chuàng)建一個新的對象,但是因為這個新的對象中的 __init__ 方法
# 是會對這個對象進(jìn)行一定初始化的,而這個初始化的過程中會通過如上方式
# 獲取form表單中的值,并賦值給每個filed
# 所以才會出現(xiàn) POST 請求時 form.validate_on_submit() 為 True
form = NameForm()
這個正則表達(dá)式用來匹配括號里的一段內(nèi)容,前面的
[(\[({]
匹配左括號,中間的一段
[^()(){}]*
匹配非括號的任意多字符,最后的
[)}\])]
匹配右括號,之所以左括號,右括號用這么長正則,是為了兼容小括號,中括號和大括號,甚至中文的小括號。
pattern.split是用這個正則表達(dá)式把后面的cell_text分隔為一個數(shù)組,給個例子給你看就明白了:
運(yùn)行javascript trigger 一個點(diǎn)擊事件
文件批量下載可以讓后端打zip包來下載,你這個hack方法一方面瀏覽器兼容性不一致,另一方面下載出來一堆文件用戶體驗不是很好。如果不考慮這些問題就直接使用500ms即可
你的python代碼有問題,get有返回值的。
from collections import Counter
data = [['黑','1101'], ['黑','1101'], ['白','1201'], ['黑','1102']]
c1 = Counter(d[0] for d in data)
for k,v in c1.items():
print(k, v)
c2 = Counter(''.join(d) for d in data)
for k, v in c2.items():
print(k, v)
re.compile(r'<=(.*?)=>').findall(str)
distinct的列一定要先order_by并且在第一項。
每小時一次,每個關(guān)鍵詞都抓: age=你想要的小時數(shù) * 3600
后端的route怎么寫的
import requests
import time
mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
x.get("http://127.0.0.1:80")
是不是在被導(dǎo)入的文件夾里沒有__init__.py,如果不是的話方不方便把項目代碼和目錄結(jié)構(gòu)發(fā)出來看看
https://pylint.readthedocs.io...
print statement used Used when a print statement is used (print is a function in Python 3) This message can’t be emitted when using Python >= 3.0.
在配置里面忽略E1601,或者
from __future__ import print_function
print('aaa')
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。