python制作猜数字游戏 如何制作游戏(或者有没有这方面的论坛以及大神帮忙,私信联系)

&p&第一条:&b&you-get(&a href=&///?target=https%3A///soimort/you-get/releases& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Releases · soimort/you-get · GitHub&i class=&icon-external&&&/i&&/a&,&/b&这里面有各种发布版本&b&)。&/b&什么,你不知道?想爬取视频网站的视频和图片分享网站的图片,是不是就得造个轮子写个爬虫?No,你只需要:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&err&&?&/span& &span class=&n&&pip3&/span& &span class=&n&&install&/span& &span class=&n&&you&/span&&span class=&o&&-&/span&&span class=&n&&get&/span&
&/code&&/pre&&/div&&p&能干什么呢?我提供几个例子:&/p&&br&&p&&b&1. 下载优酷视频&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&? you-get /v_show/id_XMTc1MDQwODMxNg\=\=.html
优酷 (Youku)
container:
video-profile: 超清
552.9 MiB ( bytes) # download-with: you-get --format=hd2 [URL]
Downloading 麻雀 51.flv ...
100% (552.9/552.9MB) ├██████████████████████████████████████████████████████████████████████████┤[16/16] 9 MB/s
Merging video parts... Merged into 麻雀 51.mp4
&/code&&/pre&&/div&&p&评论区 &a class=&member_mention& href=&///people/3c7cca22& data-hash=&3c7cca22& data-hovercard=&p$b$3c7cca22&&@xavierskip&/a& 提到可以使用-p观看无广告的优酷视频!我在Mac上使用的是mplayer&/p&&p&,安装和使用方法如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&? brew install mplayer
? you-get -p /usr/local/Cellar/mplayer/1.3.0/bin/mplayer
/v_show/id_XMTc1MDQwODMxNg==.html
&/code&&/pre&&/div&&p&这样就可以使用本地播放器播放了&/p&&br&&p&&b&2. B站&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&? you-get /video/av6543659/
【张继科】论张继科的CP是如何被国胖队手撕的
Flash video (video/x-flv)
28.2 MiB ( Bytes)
Downloading 【张继科】论张继科的CP是如何被国胖队手撕的.flv ...
100% ( 28.2/ 28.2MB) ├████████████████████████████████████████████████████████████████████████████┤[1/1] 7 MB/s
Downloading 【张继科】论张继科的CP是如何被国胖队手撕的.cmt.xml ...
&/code&&/pre&&/div&&p&&b&3. 网易云音乐&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&? you-get /\#/song\?id\=
5. Rolling in the deep
MP3 (audio/mpeg)
5.86 MiB (6144044 Bytes)
Downloading 5. Rolling in the deep.mp3 ...
5.9MB) ├████████████████████████████████████████████████████████████████████████████┤[1/1] 16 MB/s
Saving 5. Rolling in the deep.lrc ...Done.
&/code&&/pre&&/div&&p&&b&4. 花瓣画板&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&? you-get /boards//
花瓣 (Huaban)
JPEG Image (image/jpeg)
inf MiB (inf Bytes)
Downloading .jpeg ...
infMB) ├────────────────────────────────────────────────────────────────────────────┤[1/1] 114 kB/s
Downloading .jpeg ...
infMB) ├────────────────────────────────────────────────────────────────────────────┤[1/1] 152 kB/s
Downloading .jpeg ...
infMB) ├────────────────────────────────────────────────────────────────────────────┤[1/1] 344 kB/s
Downloading .jpeg ...
infMB) ├────────────────────────────────────────────────────────────────────────────┤[1/1] 119 kB/s
Downloading .jpeg ...
infMB) ├────────────────────────────────────────────────────────────────────────────┤[1/1] 248 kB/s
.... 图片太多就展示到这里吧 (?&?&?)
&/code&&/pre&&/div&&br&&p&支持的网站太多,还是去&a href=&///?target=https%3A///soimort/you-get%23supported-sites& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - soimort/you-get: Dumb downloader that scrapes the web&i class=&icon-external&&&/i&&/a&看吧,如果你有其他网站的需求,欢迎去PR添加支持,未来让其他同学也能受益。&/p&&br&&p&&b&&u&还不快去用!!!&/u&&/b&&/p&&br&&p&you-get的可扩展爬虫实现非常值得学习,相信给它贡献代码甚至读了它的源码都会对你的爬虫技术有所提高的。&/p&&br&&p&第二条: &b&不要只看 Web 网站, 还有移动版、 App 和 H5, 它们的反爬虫措施一般比较少, 所有社交网站爬虫, 优先选择爬移动版。 &/b&这条大家好像都是直接忽略的... 忧伤&/p&&p&&b&欢迎关注本人的微信公众号获取更多Python相关的内容(也可以直接搜索「Python之美」):&/b& &/p&&p&&a href=&///?target=http%3A///r/D0zH35LE_s_Frda89xkd& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/r/D0zH35L&/span&&span class=&invisible&&E_s_Frda89xkd&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& (二维码自动识别)&/p&
第一条:you-get(,这里面有各种发布版本)。什么,你不知道?想爬取视频网站的视频和图片分享网站的图片,是不是就得造个轮子写个爬虫?No,你只需要:? pip3 install you-get能干什么呢?我提供几个例子: 1. …
&p&本来是不想答这种日经问题的, 但是某种势力对我出言不逊还禁止了我评论.&/p&&p&&br&&/p&&figure&&img src=&/v2-8ddb4df2b78201bea5e8c5c_b.jpg& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/v2-8ddb4df2b78201bea5e8c5c_r.jpg&&&/figure&&p&&br&&/p&&p&你很棒啊, 那我来答个题&/p&&hr&&p&路人甲老早之前发过的东西了:&/p&&p&&a href=&/p/& class=&internal&&Java/Python/PHP/C#/C++各大城市招聘状况分析&/a&&/p&&p&题主你要是就在意找工作, 不能自己查一下?&/p&&p&但你又问&b&未来几年最具前景的一门语言&/b&, 我只能说这个问题非常具有&b&主观性&/b&, 而这种情况下, &b&就有一些不负责任的人想把不知情的小萌新往自己的坑里带&/b&.&/p&&p&最具前景, 什么叫最具前景吗? 这本身就是个问题. 语言设计得最好? 库最多? 安全性最好? 团队合作最方便? 元编程最自由写起来最顺畅? 用的人最多?&/p&&p&一门语言如何被对待, 真的不是按照语言本身的优秀程度来决定的. 决定其如何被对待的, 是幕后那些大公司, 他们可能需要一门很快的语言, C++/Java/Rust火了; 有时他们需要一门很灵活能无限hack的语言, Ruby/Python火了. &/p&&p&这些公司有时要利用现有的大量工具来做开发,
像某些设计优秀的函数式语言还是不可能被考虑的. &/p&&p&但是我们能确定, 一门语言被世界所优待, 必然是来源于它那些相比之下更为优秀的特征.&/p&&p&所以这个问题, 我能答的就是, &b&不是Python和Java&/b&. &/p&&p&然后个人意见是&b&Scala很有前景&/b&, 因为其不仅在语言本身全能.&/p&&h2&&b&为什么不是Python&/b&&/h2&&p&既然语言A本身&b&被接受是因为其特性&/b&, 那么语言A被需要的特性, &b&被别的语言B覆盖&/b&, 甚至别的&b&拥有更多被需要的特性的语言B&/b&直接&b&将A作为其一个子集&/b&; 同时&b&语言A又有一堆历史旧账&/b&, B没有, 还兼容A的库. 你说A怎么混?&/p&&p&这就是Python不行的第一个原因, 它面临着一些挑战.&/p&&p&首先Python有什么被需要的特性呢?&/p&&p&&b&1.&/b& &b&易学习, 语法对象设计非常统一, 标准数据结构种类十分有限,
便于掌握.&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&k&&def&/span& &span class=&nf&&x&/span&&span class=&p&&():&/span&&span class=&k&&pass&/span&
&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&
&span class=&k&&class&/span& &span class=&nc&&f&/span&&span class=&p&&:&/span&
&span class=&k&&def&/span& &span class=&nf&&__call__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span& &span class=&k&&return&/span& &span class=&mi&&1&/span&
&span class=&k&&def&/span& &span class=&nf&&__add__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&v&/span&&span class=&p&&):&/span& &span class=&k&&return&/span& &span class=&n&&v&/span&&span class=&o&&*&/span&&span class=&mi&&2&/span&
&span class=&n&&func&/span& &span class=&o&&=&/span& &span class=&n&&f&/span&&span class=&p&&()&/span&
&span class=&n&&x&/span& &span class=&p&&:&/span& &span class=&nb&&int&/span& &span class=&o&&=&/span& &span class=&n&&func&/span&&span class=&p&&()&/span&
&span class=&k&&assert&/span& &span class=&n&&func&/span&&span class=&o&&+&/span&&span class=&mi&&2&/span& &span class=&o&&==&/span& &span class=&mi&&4&/span&
&/code&&/pre&&/div&&p&一切皆对象, 其余一切的n元运算, 函数调用, 不过是对象方法. &/p&&p&表达式语句严格分明. 学会一点, 举一反三, 一切皆通.&/p&&p&我说真的, 基本语法+基本库, 有编程基础的人真要不了俩小时, 没基础的一周也能学会.&/p&&p&&b&2. 库多,
everything from C皆为我用&/b&.&/p&&p&因为设计之初本身考虑了很多方便调用C语言的形式, 当下你可以在10分钟内学习以超过4种方式(ctypes, cffi ,swig, 非阻塞subprocess+io数据交换)调用任意C语言代码. &/p&&p&正因如此, 优秀的Python库很多都是含c extension的. &/p&&p&然后你任意指一个热门领域其中的一个细枝末节, 应该都会有超过个位数的靠谱库在维护. 一个没有创造力的人是没法想到一件事情, 使得该Python生态在该事情没有直接的工具可以使用的. 有时我也不是黑JVM... 计算机领域也不是那一亩三分地... 就没有什么好用又全面的符号代数计算库的么?&/p&&p&然后在当今时代, 科学计算领域的人一般都还是会搞Python的. 这留下了非常丰富的库资源.&/p&&p&&b&3. 语法可读性高, 脚本语言做项目管理方便, 适合小型团队合作.&/b&&/p&&p&语法是接近自然语言, 又是脚本, 做东西飞快. 业务逻辑可以写得尤为漂亮, 代码较少时, 团队像是共享视野一样.&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&c&&# 业务逻辑&/span&
&span class=&kn&&from&/span& &span class=&nn&&xxsql.xxx&/span& &span class=&k&&import&/span& &span class=&n&&handler&/span&
&span class=&kn&&from&/span& &span class=&nn&&xxxwebframework.xxx&/span& &span class=&k&&import&/span& &span class=&n&&xxx&/span&
&span class=&kn&&from&/span& &span class=&nn&&templates&/span& &span class=&k&&import&/span& &span class=&n&&log&/span&
&span class=&k&&def&/span& &span class=&nf&&page_index&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&):&/span&
&span class=&k&&return&/span& &span class=&n&&request&/span&\
&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&s&&&cookie&&/span&&span class=&p&&)&/span&\
&span class=&o&&.&/span&&span class=&n&&select&/span&&span class=&p&&(&/span&&span class=&s&&&username&&/span&&span class=&p&&,&/span&&span class=&s&&&password&&/span&&span class=&p&&,&/span& &span class=&n&&where_status&/span& &span class=&o&&=&/span& &span class=&s&&&not logged&&/span&&span class=&p&&)&/span&\
&span class=&o&&.&/span&&span class=&n&&check_safety&/span&&span class=&p&&(&/span&
&span class=&n&&if_safe_then&/span& &span class=&o&&=&/span& &span class=&k&&lambda&/span& &span class=&p&&:&/span& &span class=&n&&log&/span&&span class=&p&&(&/span&&span class=&n&&request&/span&&span class=&p&&),&/span&
&span class=&n&&check&/span& &span class=&o&&=&/span& &span class=&k&&lambda&/span& &span class=&n&&info&/span&&span class=&p&&:&/span& &span class=&n&&handler&/span&\
&span class=&o&&.&/span&&span class=&n&&select&/span&&span class=&p&&(&/span&&span class=&s&&&username&&/span&&span class=&p&&,&/span& &span class=&s&&&password&&/span&&span class=&p&&,&/span&
&span class=&n&&where_username&/span& &span class=&o&&=&/span& &span class=&n&&info&/span&&span class=&p&&[&/span&&span class=&s&&'username'&/span&&span class=&p&&]))&/span&
&/code&&/pre&&/div&&p&项目管理也是非常的方便.&/p&&p&&a href=&///?target=https%3A///thautwarm/flowpython/blob/master/config.py& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/thautwarm/fl&/span&&span class=&invisible&&owpython/blob/master/config.py&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&(这个代码会稍微长所以直接用自己的具体实例)&/p&&p&&br&&/p&&p&然后Python还有一堆我认为很好的东西, 也就是灵活性的那一套. &/p&&p&但灵活性不是公司会喜欢的, 灵活意味着给你瞎搞的可能性.&/p&&p&这样一看, 其实Python真的相当危险.&/p&&p&&b&1. 被Julia等语言彻底替代的可能. &/b&&/p&&p&&b&Julia : 你库我用, 你有我尽有, 我有你未必有. &/b&&/p&&p&Julia还不火, 和JVM生态相反, Julia只瞄着科学计算一隅在发展. 但好语言就是好语言, 写A领域, 发现B-Z领域也ok, 真是有特别的语言设计技巧. &/p&&p&暑假我在Julia里写了半个月python后, &b&感觉药丸&/b&.&/p&&div class=&highlight&&&pre&&code class=&language-julia&&&span class=&k&&using&/span& &span class=&n&&PyCall&/span&&span class=&p&&;&/span&
&span class=&p&&@&/span&&span class=&n&&pyimport&/span& &span class=&n&&sklearn&/span&&span class=&o&&.&/span&&span class=&n&&datasets&/span& &span class=&n&&as&/span& &span class=&n&&sk_ds&/span&
&span class=&p&&@&/span&&span class=&n&&pyimport&/span& &span class=&n&&sklearn&/span&&span class=&o&&.&/span&&span class=&n&&ensemble&/span& &span class=&n&&as&/span& &span class=&n&&sk_en&/span&
&span class=&n&&rf&/span&
&span class=&o&&=&/span& &span class=&n&&sk_en&/span&&span class=&p&&[:&/span&&span class=&n&&RandomForestClassifier&/span&&span class=&p&&]();&/span&
&span class=&n&&iris&/span& &span class=&o&&=&/span& &span class=&n&&sk_ds&/span&&span class=&p&&[:&/span&&span class=&n&&load_iris&/span&&span class=&p&&]();&/span&
&span class=&n&&X&/span&
&span class=&o&&=&/span& &span class=&n&&iris&/span&&span class=&p&&[:&/span&&span class=&n&&data&/span&&span class=&p&&];&/span&
&span class=&n&&y&/span&
&span class=&o&&=&/span& &span class=&n&&iris&/span&&span class=&p&&[:&/span&&span class=&n&&target&/span&&span class=&p&&];&/span&
&span class=&n&&rf&/span&&span class=&p&&[:&/span&&span class=&n&&fit&/span&&span class=&p&&](&/span&&span class=&n&&X&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&看了这个, 各位心里没点逼数?&/p&&p&没有的我告诉你, &b&我还在Julia里写flask应用来着&/b&. 跑得起来, 毫无压力.&/p&&p&数据转换的效率我也测试过, 使用PyObject, 比起Python稍有性能损失(考虑到Python的运行效率这个时间可以忽略). c extension的话损失稍微大些, 但据对NumPy的测试, 这其实是个常数损失.(&b&当然我不坑大家&/b&, 实话告诉大家,&b& Julia的原生多维数组矩阵乘法运算起来比起numpy.ndarray慢了不到25个百分点, 且计算规模越大, 差距越小.&/b&&/p&&p&Julia自身性能有多高, 我想在座的各位是有必要了解一下的. 有人说Julia的多重循环不一定有Matlab快, 我觉得ok, 你和Python比一下?&/p&&p&Julia天生并行支持, 表达式语句统一化, 有JIT速度能飞起来, 安装也简便.&/p&&p&要是什么时候有国内镜像了,
怕不是欢声笑语打出gg.&/p&&p&所以对Python而言, 现在主要的问题是, Julia的PyCall, 这个东西&b&基本已经全面兼容Python&/b&了,&b& 就是Python的库Julia基本都能用&/b&, 而且Julia作为科学计算语言, 又简单好学(&b&但是我不坑大家&/b&, 这个语法比起Python还是稍微复杂点的, &b&Python如果要学3天, 那Julia应该要学3天半呀&/b&&/p&&p&&b&2. 动态语言的劣势和JetBrains产品的不普及&/b&&/p&&p&&b&JetBrains : 为什么你项目总是上线才崩?&/b&&/p&&p&这倒不是我吹JB, 我也不太喜欢IDE, 但现在能做合格的Python类型检查的也就一个PyCharm吧.&/p&&p&但要是不能像某红日常在万行代码里找出半行的BUG, 开发大项目时能不能不要用VSCode, Sublime Text甚至&b&蜜汁UI的Npp&/b&这种&b&自以为装了pylint就成了IDE的真编辑器了&/b&啊.&/p&&p&你知道你写个代码出多少BUG吗?
你有每天12个小时来练成某红在某些时候几千行代码都不出BUG的境界吗?&/p&&p&&b&你现在出过多少BUG&/b&心里有没有点数? 一个项目测试报了错, &b&你能不能总是确定哪里出了问题&/b&, 你心里有没有点数?&/p&&p&但是啊, 我真的不是侮辱某些人. 就某些把培训班和类似势力的人视为上帝, 依靠他们提供的&b&千篇一律的入门教程&/b&来学习, 还为他们宣传, 助长他们的气焰, 这是什么样的行为, 有怎样的性质, 在座各位看看自己timeline, 它偶尔发神经蹦跶个什么的时候, 大家心里有没有点数?&/p&&p&&b&3. 炫技瞎搞&/b&&/p&&p&&b&其实我就是这种人, 但我也不坑大家, 实事求是讨论事情时不藏着掖着.&/b&&/p&&p&codewars上有一道很老的2kyu的题(但是实际难度应该不到4kyu), 用元编程来debug.&/p&&p&&a href=&///?target=https%3A///kata/54bebed0d5b56c5b2600027f& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Debugger&i class=&icon-external&&&/i&&/a&&/p&&p&这种思路其实是很好的, 但是它一旦流行起来, 真的不是好事情.&/p&&p&自由的语言提供给你无限的可能性, 如果你足够强, 你可以在任何时刻以任何方式将程序逻辑改变成任何样子. 这其实有这种嫌疑: &b&鼓励我们对一切都亡羊补牢. &/b&&/p&&p&不遵守标准和规范, 任由任何程序员野马腾疆, 但正如&b&误差可以积累, 代价可以叠加&/b&, &b&今日的方便和灵活可以变成十个月之后的沉重的历史包袱, 成为十年之后大项目废弃的理由.&/b&&/p&&p&Python的灵活一直在助长这种气焰. 其实我觉得还好, 市面上大部分写Python的孩子都是把Python当不需要类型声明的C++在写的, 虽然写的不好看但是问题不大. 怕就怕在, 一个水平将就, 被ddl憋急了的Python开发者, 你认为她/他会不会hack一下? 你认为她/他会不会因为一个项目的可维护性而放弃夜晚和家人相处的时间.&/p&&p&当此人在原先没有装饰器标示的函数上加上了一堆奇形怪状的装饰器,&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&nd&&@decorate1&/span&
&span class=&nd&&@decorate2&/span&
&span class=&nd&&@decorate3&/span&
&span class=&o&&...&/span&
&span class=&k&&def&/span& &span class=&nf&&xxx&/span&&span class=&p&&():&/span&
&span class=&o&&...&/span&
&/code&&/pre&&/div&&p&当此人在某个函数内部写了一句&/p&&div class=&highlight&&&pre&&code class=&language-text&&globals()[xxx] = yyy
&/code&&/pre&&/div&&p&当此人开始干类似的事情时, Python就已经输了.&/p&&p&倒不是说这些操作本身有什么不好, 但是, &b&因为语言的灵活强大, 通常能够以打补丁的方式来补救初期架构设计错误的语言, 在实际工程上是有一定害处的&/b&.&/p&&p&&b&4. Python推广名声败坏&/b&&/p&&p&知乎上某些势力, 心里没点逼数?&/p&&p&Python究竟是不是low, 浅薄, 智商税的代名词? 究竟会不会变成那样?&/p&&p&大家心里都有自己的看法.&/p&&p&&br&&/p&&h2&&b&为什么不是Java&/b&&/h2&&p&&br&&/p&&p&明天还上课, 在预习, 后面更新.&/p&&p&更新: 抱歉暂时更不了新了。。可能得等考试期和实习期忙过。。&/p&&p&为什么不是Java, Java就是丑就是重你打我啊(略略略,kotlin解决了Java, kotlin解决了Java!&/p&
本来是不想答这种日经问题的, 但是某种势力对我出言不逊还禁止了我评论. 你很棒啊, 那我来答个题路人甲老早之前发过的东西了:题主你要是就在意找工作, 不能自己查一下?但你又问未来几年最具前景的一门语言, 我只…
&figure&&img src=&/50/v2-1b95c1adfbcb9d9544b9_b.jpg& data-rawwidth=&1280& data-rawheight=&847& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-1b95c1adfbcb9d9544b9_r.jpg&&&/figure&&blockquote&epub、pdf、mobi、rtf,你还需要什么格式呢?&/blockquote&&p&作为一个自诩是 markdown 程序员的 “资深咨询师”,我编写了很多的代码,写了很多文章(我的博客 &a href=&/?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 上有 600+),也写了很多电子书。&/p&&p&文章,总结了我在工作中遇到的问题,记录了我爬过的坑,以及一些成长的故事。&/p&&p&电子书,总结了我在某个领域里,整理了这个领域所需要的知识。&/p&&p&过去,对于这些电子书,我总是习惯性的只传 HTML 到 GitHub 上。最近在玩 Serverless,便想借用 Serverless 的力量,提供离线版的电子书,支持 PDF、EPUB、MOBI、RTF 格式。&/p&&p&&br&&/p&&h2&GitHub 漫游指南&/h2&&p&&br&&/p&&p&这本电子书,整理了我在使用 GitHub 的经验,以及如何提身自己来提升自己,还有这个过程中对开源软件的一些思考。&/p&&p&包含了以下的内容:Git 基本知识与 GitHub 使用、Git 提交信息及几种不同的规范、如何改善 GitHub 项目代码质量、如何推广 GitHub 项目、如何以“正确的姿势”阅读开源软件代码、以及在 GitHub 上连击近两年的心得。&/p&&p&目标读者:对GitHub探索有兴趣的读者。&/p&&p&&br&&/p&&h2&Ideabook: 一个全栈增长工程师的练手项目集&/h2&&p&&br&&/p&&p&做为一个程序员哪能没有Idea呢,有了Idea就要做出来。&/p&&p&&b&你是不是在为提高编程技术而发愁?&/b&&/p&&p&&b&你是不是在为找不到合适的练手项目而烦恼?&/b&&/p&&p&&b&你是不是在为有合适的项目,但是没有指南而烦恼?&/b&&/p&&p&拥有Ideabook,你就等于拥有一系列的练手项目。&/p&&p&我的Idea在不断地增长,有些Idea有Cool,而这些Idea都没有一个好的实战指南。这个电子书的目标就是为这些Idea提供实战指南,一步步搭建。&/p&&p&目标读者:有编程经验,但是苦于没有好的Idea的程序员&/p&&p&&br&&/p&&h2&Growth: 全栈增长工程师指南&/h2&&p&&br&&/p&&p&依据在《&a href=&/?target=http%3A//mp./s%3F__biz%3DMjM5Mjg4NDMwMA%3D%3D%26mid%3Didx%3D1%26sn%3D08fefd7d80c8bb603e644d0%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Repractise简介篇:Web开发的七天里&i class=&icon-external&&&/i&&/a&》中所说的 Web 开发的七个步骤而展开的电子书。&/p&&p&这是一本指导性的书籍——不要指望从这本书中学到所有的知识点,但是他可以帮助你构建你的知识体系。&/p&&p&这也是其他技术书籍所欠缺的。它可以告诉你,你可以学习什么,然后看什么书。&/p&&p&对于有些人来说,成为全栈是因为:来自社会的各个不同的中小公司,只靠一个领域的知识难以生存 对于有些人来说,成为全栈是因为:这个世界有太多的乐趣,在一颗树上吊死太可惜了。 对于有些人来说,成为全栈是因为:他们想去创业。&/p&&p&而人们对于全栈有太多的误解——认为全栈应该什么都会,什么都精通。全栈只是因为我们对系统有整体性的认识,而不是精通整个系统。因为专家只精通某一个领域,总得有一个架构师来对系统把握。&/p&&p&目标读者:对于成为并超越全栈工程师有兴趣的&b&有经验程序员&/b&。&/p&&p&&br&&/p&&h2&全栈增长工程师指南&/h2&&p&&br&&/p&&p&这本书是全栈增长工程师指南的Python(Django)实战版。&/p&&p&你将会学到:如何去开发一个Web应用(博客)、如何编写单元测试、如何编写功能测试,自动化UI测试、搭建持续集成、添加SEO支持、支持APP使用、开发相应的APP、添加单页面应用的前端、自动化部署、如何进行小步提交。&/p&&p&目标读者:对于成为并超越全栈工程师有兴趣的&b&新手程序员&/b&。&/p&&p&&br&&/p&&h2&我的职业是前端工程师&/h2&&p&&br&&/p&&p&这本书总结了前端工程师,必须要掌握的一些知识。&/p&&p&比如:如何选择合适的前端语言、必会的六个调试技能、前后端分离,你应该知道的八件事、SEO 优化技巧、客户端存储与模型的艺术、单页面应用的核心知识、如何从头开发一个前端应用等等的内容。&/p&&p&目标读者:想成为更好的前端工程师的工程师。&/p&&p&&br&&/p&&h2&RePractise&/h2&&p&&br&&/p&&p&原本这本电子书打算放在那本 Growth 之前,但是这本书的写作难度还是有点大,就暂时搁置了。&/p&&blockquote&无论怎样的Coding,都是不断的Practise。想要有所成果,你需要RePractise——总结和diff change,再Practise。&/blockquote&&p&对于工程而言,一个技术都是不断练习出来的。&/p&&p&不同的人对于练习会有不同的方法,有的练习是没有必要的,它并不会增长我们的技术点;有的练习则会将一万小时缩短为一半,或者更短。&/p&&p&目标读者:有一定的 Web 开发经验的开发者,并是没有一个好的方向。&/p&&p&&br&&/p&&hr&&p&只需要关注公众号(phodal-weixin)。&/p&&figure&&img src=&/v2-b9c1d2e8ff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&400& data-rawheight=&400& class=&content_image& width=&400&&&/figure&&p&然后回复&b&『书』或者『电子书』&/b&,即可获得下载地址。如下图所示:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&/v2-cf4fa655e4ff3b50fe24e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-cf4fa655e4ff3b50fe24e_r.jpg&&&/figure&&p&&/p&
epub、pdf、mobi、rtf,你还需要什么格式呢?作为一个自诩是 markdown 程序员的 “资深咨询师”,我编写了很多的代码,写了很多文章(我的博客
上有 600+),也写了很多电子书。文章,总结了我在工作中遇到的问题,记录了我爬过的坑,…
&figure&&img src=&/50/cc67b4e91ec29cbc797f1ce450aacc1f_b.jpg& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/50/cc67b4e91ec29cbc797f1ce450aacc1f_r.jpg&&&/figure&&p&感谢知乎这个神圣的地方,我遇到了我的女朋友&a data-title=&@Root& data-editable=&true& class=&member_mention& href=&/people/9d785aefaa45ba1& data-hash=&9d785aefaa45ba1& data-hovercard=&p$b$9d785aefaa45ba1&&@Root&/a& 。所以让大家见证我们的感情吧。&/p&&p&从去年开始接触Python到如今大概是一年半左右,这一年半我已经深深的陷在Python的世界里无法自拔。她是一门神奇的语言,她很神奇,她很火,她很受欢迎。早些时候,我就观察了一下知乎社区的各种语言的关注度。可以发现的是(看图说话):&/p&&p&&figure&&img data-rawheight=&389& data-rawwidth=&275& src=&/a1b500a6fd4798fdbe67c0d21d086715_b.png& class=&content_image& width=&275&&&/figure&既然这么火,那我们就有理由好好学习她了。渐渐的会发现你会跌入深渊的。有可能你只是随手点进了这篇文章,有可能只是这随手一点就打开了一扇新世界的大门。所以这里,如果你没有Python的基础没有关系,你可以看以下几篇文章或者回答。希望可以帮助到你入门Python。&/p&&br&&a class=&internal& href=&/question//answer/&&编程零基础应当如何开始学习 Python ? - 路人甲的回答&/a&&a href=&/question//answer/?from=profile_answer_card& class=&internal&&网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答&/a&&a class=&internal& href=&/question//answer/&&怎么用最短时间高效而踏实地学习 Python? - 路人甲的回答&/a&&br&&a class=&internal& href=&/p/?refer=passer&&如何学习Python爬虫[入门篇] - 学习编程 - 知乎专栏&/a&&a class=&internal& href=&/p/&&Python常用库整理 - 学习编程 - 知乎专栏&/a&&a href=&/p/& class=&internal&&学好Python的11个优秀资源 - 学习编程 - 知乎专栏&/a&&p&以上几篇都可以帮助在学习或者将要学习Python的你。如果你有Python基础或者已经学过一段时间的Python了,那就恭喜你继续往下面看鄙视和面试题目吧。当然如果您已经在从事Python方面的工作了,或者对Python比较精通也欢迎您补充和纠正下文中的题目。&/p&&p&以下所有题目整理来自网络以及其它(如有侵权必删除,请私信联系),以下所有题目答案在搜索引擎中均可以查到因此不再放上答案,请大家自行搜索。&/p&&p&在开头依然推荐一个Python面试题整理比较好的网站:&a class=& wrap external& href=&/?target=https%3A///taizilongxu/interview_python& target=&_blank& rel=&nofollow noreferrer&&GitHub : 关于Python的面试题。&i class=&icon-external&&&/i&&/a&同样推荐几道题目来自&a data-title=&@auxten& data-editable=&true& class=&member_mention& href=&/people/26827ea43acd624ce07f23df81df8aa6& data-hash=&26827ea43acd624ce07f23df81df8aa6& data-hovercard=&p$b$26827ea43acd624ce07f23df81df8aa6&&@auxten&/a& 的专栏&a class=&internal& href=&/auxten&&知乎专栏 - 面向工资编程&/a& 其中有几篇很不错的Python面试的题目。并附有非常详细的回答。 (请大家进入专栏查找)。&br&&/p&&p& 1.How are arguments passed – by reference of by value? &br&&br&2.Do you know what list and dict comprehensions are? Can you give an example? &br&&br&3.What is PEP 8?
&br&&br&4.Do you use virtual environments? &br&&br&5.Can you sum all of the elements in the list, how about to multuply them and get the result? &br&&br&6.Do you know what is the difference between lists and tuples? Can you give me an example for their usage? &br&&br&7.Do you know the difference between range and xrange?
&br&&br&8.Tell me a few differences between Python 2.x and 3.x &br&&br&9.What are decorators and what is their usage? &br&&br&10.The with statement and its usage. &/p&&p&11.说说你对zen of python的理解,你有什么办法看到它&br&&br&12.github上都fork过哪些python库,列举一下你经常使用的,每个库用一句话描述下其功能&br&&br&13.你调试python代码的方法有哪些&br&&br&14.什么是GIL&br&&br&15.什么是元类(meta_class)&br&&br&16.对比一下dict中 items 与 iteritems&br&&br&17.是否遇到过python的模块间循环引用的问题,如何避免它&br&&br&18.有用过with statement吗?它的好处是什么?&br&&br&19.说说decorator的用法和它的应用场景,如果可以的话,写一个decorator &br&&/p&&p&20.inspect模块有什么用&br&&br&21.写一个类,并让它尽可能多的支持操作符&br&&br&22.说一说你见过比较cool的python实现&/p&&p&23.python下多线程的限制以及多进程中传递参数的方式&br&&br&24.Python是如何进行内存管理的? &br&&/p&&p&25.什么是lambda函数?它有什么好处? &br&&/p&&p&26.如何用Python输出一个Fibonacci数列? &br&&/p&&p&27.介绍一下Python中webbrowser的用法? &br&&/p&&p&28.解释一下python的and-or语法 &br&&/p&&p&29.Python是如何进行类型转换的? &br&&/p&&p&30.Python如何实现单例模式?其他23种设计模式python如何实现?
&/p&&p&31.如何用Python来进行查询和替换一个文本字符串? &br&&/p&&p&32.如何用Python来发送邮件? &br&&/p&&p&33.有没有一个工具可以帮助查找python的bug和进行静态的代码分析? &br&&/p&&p&34.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;&br&要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 &br&&/p&&p&35.如何用Python删除一个文件? &br&&/p&&p&36.Python如何copy一个文件? &br&&/p&&p&37.python程序中文输出问题怎么解决? &br&&/p&&p&38.python代码得到列表list的交集与差集 &br&&/p&&p&39.写一个简单的python socket编程 &br&&/p&&p&40.python如何捕获异常&/p&&p&41.在Python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景?&br&&br&42. 静态函数, 类函数, 成员函数的区别?&br&&br&43. a=1, b=2, 不用中间变量交换a和b的值&br&&br&44. 写一个函数, 输入一个字符串, 返回倒序排列的结果: 如: string_reverse(‘abcdef’), 返回: ‘fedcba’&br&&br&45. 请用自己的算法, 按升序合并如下两个list, 并去除重复的元素:&br&list1 = [2, 3, 8, 4, 9, 5, 6]&br&list2 = [5, 6, 10, 17, 11, 2]&br&&br&46. 说一下以下代码片段存在的问题&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&amodule&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span& &span class=&c1&&# amodule is an exist module
&span class=&k&&class&/span& &span class=&nc&&dummyclass&/span&&span class=&p&&(&/span&&span class=&nb&&object&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&__init__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&is_d&/span& &span class=&o&&=&/span& &span class=&bp&&True&/span&
&span class=&k&&pass&/span&
&span class=&k&&class&/span& &span class=&nc&&childdummyclass&/span&&span class=&p&&(&/span&&span class=&n&&dummyclass&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&__init__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&isman&/span&&span class=&p&&):&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&isman&/span& &span class=&o&&=&/span& &span class=&n&&isman&/span&
&span class=&nd&&@classmethod&/span&
&span class=&k&&def&/span& &span class=&nf&&can_speak&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span& &span class=&k&&return&/span& &span class=&bp&&True&/span&
&span class=&nd&&@property&/span&
&span class=&k&&def&/span& &span class=&nf&&man&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span& &span class=&k&&return&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&isman&/span&
&span class=&k&&if&/span& &span class=&n&&__name__&/span& &span class=&o&&==&/span& &span class=&s2&&&__main__&&/span&&span class=&p&&:&/span&
&span class=&nb&&object&/span& &span class=&o&&=&/span& &span class=&n&&new&/span& &span class=&n&&childdummyclass&/span&&span class=&p&&(&/span&&span class=&bp&&True&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&nb&&object&/span&&span class=&o&&.&/span&&span class=&n&&can_speak&/span&&span class=&p&&()&/span&
&span class=&k&&print&/span& &span class=&nb&&object&/span&&span class=&o&&.&/span&&span class=&n&&man&/span&&span class=&p&&()&/span&
&span class=&k&&print&/span& &span class=&nb&&object&/span&&span class=&o&&.&/span&&span class=&n&&is_d&/span&
&/code&&/pre&&/div&&p&47. 介绍一下python的异常处理机制和自己开发过程中的体会&/p&&p&48.解释一下 WSGI 和 FastCGI 的关系?&br&&br&49.解释一下 Django 和 Tornado 的关系、差别&br&&br&50.解释下Django使用redis缓存服务器&br&&br&51.如何进行Django单元测试 &br&&br&52.解释下Http协议&br&&br&53.解释下Http请求头和常见响应状态码&/p&&p&54.分别简述OO,OOA&br&&br&55.简述正则表达式中?p的含义&br&&br&56.Python类中的self的具体含义是&br&&br&57.请写出python的常用内置函数(至少3个),并描述它们具体含义&br&&br&58.可以用python进行POST数据提交,可以加载什么模块来进行操作?在操作之前需要对数据进行什么操作?&br&&br&59.说出python中间件Sqlalchemy的具体声明方式?以及模块与MySQLdb之间的区别?&br&&br&60.描述出3中python常用框架,并简要描述这些框架的优缺点&br&&br&61.reactor是什么? 有什么作用?请简要描述。&br&&br&62.请描述2种不同语言间数据流转通用格式。&br&&br&63.简述我们使用多线程编程时,锁与信号量之间的关系。&br&&br&64.通常在python编写tcp服务时,我们使用拆、粘包的模块是什么?如何加载这个模块? &br&&/p&&p&65.两个整数数组各有100亿条数据,并已经排序,保存在磁盘上,内存10M。&br&问:&br&(1)如何取得交集?时间和空间效率分别是多少?Python 集合set()操作方法&br&(2)如果其中一个数组只有100条数据,如何优化算法取得交集?时间和空间效率分别是多少?&br&(3)用自己熟悉的语言实现第2个问题,要求可以正确运行;假设已经提供函数read_elt(arrary_name, index)可以用来读取某个数组的第index个元素,元素个数分别用m=100和n=10^10表示。&br&&br&66.有100个磁盘组成的存储系统,当有3个磁盘同时损坏时,才会发生数据丢失。如果1个磁盘的损坏率是p,请问整个存储系统丢失数据的概率是多少?&br&&br&67.请描述B-Tree插入值的过程&br&&br&67.一个管道可以从a端发送字符到b端,只能发送0-9这10个数字,设计消息的协议,让a可以通知b任意大小的数字,并讨论这种消息协议可能发送的错误的处理能力。&br&&br&68.假设fd是一个socket,read(fd, buf, 1024)&br&问:可能返回哪些值?其代表什么含义?&br&&br&69.自旋锁适合哪些场合应用,不适合哪些场合?&br&&br&70.假设网络会丢失消息,进程可能意外终止,磁盘可靠(写入数据后不会丢失);&br&问:&br&如何构建一个可靠的分布式key-value存储系统?&br&答题要求如下:&br&1.客户端向系统发送1条写入请求(例如key=x, value=1),系统返回'成功',客户端一定可以正确读取到key=y的值&br&2.在你设计的系统中,要满足上面第1条,并有一定对故障的容错能力。&br&3.如果要尽可能提高写入或读写成功率,如果改进系统设计?分别会有哪些问题?&/p&&p&71.假设你的键盘只有以下键:&br&A&br&Ctrl + A&br&Ctrl + C&br&Ctrl + V&br&这里Ctrl+A,Ctrl+C,Ctrl+V分别代表&全选&,“复制”,“粘贴”。&br&如果你只能按键盘N次,请写一个程序可以产生最多数量的A。也就是说输入是N(你按键盘的次数), 输出是M(产生的A的个数)。&br&&br&加分项:&br&打印出中间你按下的那些键。 &br&&br&&br&72.假设给你一个月的日志,格式如下:&br&[I :26:40] 1 200 GET /question/123 (8.8.9.9) 200.39ms&br&[I :26:90] 1 200 GET /topic/456 (8.8.9.9) 300.85ms&br&[I :26:90] 1 200 POST /answer/789 (8.8.9.9) 300.85ms&br&...&br&方括号中依次是:级别,日期,时间,后面依次是用户id,返回码,访问方式,访问路径,用户ip,响应时间&br&日志文件名格式为:年-月-日-小时.log,如:-18.log,共30*24个文件。&br&写个程序,算出一个用户列表和一个路径列表符合以下要求:&br&(1).这些用户每天都会访问(GET)/topic/***这个路径两次以上(*代表数字)&br&(2).这些用户每天访问(GET)的/topic/***路径中,至少会包含两个不同的路径(后面的数字不一样)&br&(3).统计出所有以上用户所访问的路径中每天都出现两次以上的路径列表 &/p&&p&73.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;&/p&&p&要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小&/p&&p&74.Python语言的有哪些缺陷?&/p&&p&75.What are some key differences to bear in mind when coding in Python vs. Java?&/p&&p&76.有哪些CPython的替代实现?什么时候,为什么会使用他们?&/p&&p&77. Python是解释型的还是编译型的?&/p&&p&78.为什么要用函数装饰器?请举例&/p&&p&78.现在有一个 dict 对象 adict,里面包含了一百万个元素,查找其中的某个元素的平均需要多少次比较?一千万个元素呢?&br&&br&79.现在有一个 list 对象 alist,里面的所有元素都是字符串,编写一个函数对它实现一个大小写无关的排序。&br&&br&80.python 里关于“堆”这种数据结构的模块是哪个?“堆”有什么优点和缺点?举一个游戏开发中可能会用到堆的问题(不限是于 python 的堆,可以是其它语言的相关实现)。&br&&br&81.set 是在哪个版本成为 build-in types 的?举一个你在以往项目中用到这种数据结构的问题(不限是于 python 的 set ,可以是其它语言的相关实现),并说明为什么当时选择了 set 这种数据结构。&br&&br&82.有一个排好序地 list 对象 alist,查找其中是否有某元素 a(尽可能地使用标准库函数)&br&&br&83.实现一个 stack。&/p&&p&84.编写一个简单的 ini 文件解释器。&/p&&p&85.现有 N 个纯文本格式的英文文件,实现一种检索方案,即做一个小搜索引擎。&/p&
感谢知乎这个神圣的地方,我遇到了我的女朋友 。所以让大家见证我们的感情吧。从去年开始接触Python到如今大概是一年半左右,这一年半我已经深深的陷在Python的世界里无法自拔。她是一门神奇的语言,她很神奇,她很火,她很受欢迎。早些时候,我就观察…
&figure&&img src=&/50/v2-1b038db0efd5ddf6d333b3f_b.png& data-rawwidth=&701& data-rawheight=&408& class=&origin_image zh-lightbox-thumb& width=&701& data-original=&/50/v2-1b038db0efd5ddf6d333b3f_r.png&&&/figure&&p&双十一你们的手还健在吗? 还在的话来刷一波题?&br&&/p&&p&希望此文可以长期更新并作为一篇Python的面试宝典。每一道题目都附有详细解答,以及更加详细的回答链接。此篇是概念篇,下一篇会更新面试题代码篇。&/p&&p&&figure&&img data-rawheight=&408& data-rawwidth=&701& src=&/v2-1b038db0efd5ddf6d333b3f_b.png& class=&origin_image zh-lightbox-thumb& width=&701& data-original=&/v2-1b038db0efd5ddf6d333b3f_r.png&&&/figure&(一)、这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?&/p&&p&答:如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用*args(单星号)。如果我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候我们可以使用**kwargs(双星号),args、kwargs两个标识符是约定俗成的用法。&/p&&p&另一种答法:当函数的参数前面有一个星号*号的时候表示这是一个可变的位置参数,两个星号**表示这个是一个可变的关键词参数。星号*把序列或者集合解包(unpack)成位置参数,两个星号**把字典解包成关键词参数。 &br&&/p&&p&代码辅助理解:&figure&&img data-rawheight=&496& data-rawwidth=&856& src=&/v2-4053fc4dad7aa258b2bc7cd_b.png& class=&origin_image zh-lightbox-thumb& width=&856& data-original=&/v2-4053fc4dad7aa258b2bc7cd_r.png&&&/figure&&/p&&p&(二)、谈一谈Python的装饰器(decorator)&br&&/p&&p&装饰器本质上是一个Python函数,它可以让其它函数在不作任何变动的情况下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景。比如:插入日志、性能测试、事务处理、缓存、权限校验等。有了装饰器我们就可以抽离出大量的与函数功能无关的雷同代码进行重用。&/p&&p&有关于具体的装饰器的用法看这里:&a class=& wrap external& href=&/?target=http%3A///link%3Furl%3DhuR7xMwVwBlE0WQpEmVCsWtnvVbfV62M87wXZ5JQoSPgtl7_9xWym6VABe2YQvu2POqYvDAFAlk6wCQZSHeGpYPmpAIvfvkDJzpxTU4kNui4Bj4nYnzucWAYswvubnfopp7OzZk9zChKIFlB-k9-N9avBrLrjaPf5pdI94wyPw8_Or-jBPU_CkgLzz6N_KoK%26wd%3D%26eqid%3D0fc2279b9& target=&_blank& rel=&nofollow noreferrer&&装饰器 - 廖雪峰的官方网站&i class=&icon-external&&&/i&&/a&&/p&&p&&figure&&img data-rawheight=&595& data-rawwidth=&717& src=&/v2-f42f014edec7aef2b3d87cf_b.png& class=&origin_image zh-lightbox-thumb& width=&717& data-original=&/v2-f42f014edec7aef2b3d87cf_r.png&&&/figure& (三)、简要描述Python的垃圾回收机制(garbage collection)&/p&&p&Python中的垃圾回收是以&b&引用计数&/b&为主,&b&标记-清除&/b&和&b&分代收集&/b&为辅。 &/p&&ul&&li& 引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。&/li&&li& 标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。&/li&&li&分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。&br&&/li&&/ul&&p&如果你想要深入了解Python的GC机制,点击这里:&a class=& wrap external& href=&/?target=http%3A///p/1e375fb40506& target=&_blank& rel=&nofollow noreferrer&&[转载]Python垃圾回收机制--完美讲解!&i class=&icon-external&&&/i&&/a&&/p&&p&(四)、Python多线程(multi-threading)。这是个好主意吗?&/p&&p&Python并不支持真正意义上的多线程,Python提供了多线程包。Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。这就意味着如果你先要提高代码执行效率,使用threading不是一个明智的选择,当然如果你的代码是IO密集型,多线程可以明显提高效率,相反如果你的代码是CPU密集型的这种情况下多线程大部分是鸡肋。 &/p&&p&想要深入详细了解多线程,点击这里:&a class=& wrap external& href=&/?target=http%3A//www.jb51.net/article/63784.htm& target=&_blank& rel=&nofollow noreferrer&&详解Python中的多线程编程_python&i class=&icon-external&&&/i&&/a&&/p&&p&想了解一下IO密集和CPU密集可以点击这里:&a href=&/?target=http%3A//blog.csdn.net/q_l_s/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CPU-bound(计算密集型) 和I/O bound(I/O密集型)&i class=&icon-external&&&/i&&/a&&br&&/p&&p&(五)、 说明&b&os,sys&/b&模块不同,并列举常用的模块方法?&/p&&p&官方文档: &br&&/p&&ul&&li&os模板提供了一种方便的使用操作系统函数的方法&/li&&li&sys模板可供访问由解释器使用或维护的变量和与解释器交互的函数&/li&&/ul&&p&另一种回答:&/p&&p&os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操作Python运行时的环境。&/p&&p&一些常用的方法:&figure&&img data-rawheight=&489& data-rawwidth=&703& src=&/v2-34602fbbcd5c3e_b.png& class=&origin_image zh-lightbox-thumb& width=&703& data-original=&/v2-34602fbbcd5c3e_r.png&&&/figure&&figure&&img data-rawheight=&490& data-rawwidth=&1078& src=&/v2-b1cf8ab17dcefeb0c659_b.png& class=&origin_image zh-lightbox-thumb& width=&1078& data-original=&/v2-b1cf8ab17dcefeb0c659_r.png&&&/figure&一些常用的用法示例:&/p&&p&&figure&&img data-rawheight=&465& data-rawwidth=&867& src=&/v2-4f4bf284e545f2ba740143_b.png& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&/v2-4f4bf284e545f2ba740143_r.png&&&/figure& 想要了解更详细的使用请访问:&a href=&/?target=http%3A///pycode/p/sysos.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&os和sys模块 - 君醉&i class=&icon-external&&&/i&&/a&&/p&&p&(六)、什么是lambda表达式?它有什么好处?&/p&&p&简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数。&/p&&p&lambda表达式一般的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。&/p&&p&&figure&&img data-rawheight=&185& data-rawwidth=&404& src=&/v2-9aa02ef535d_b.png& class=&content_image& width=&404&&&/figure& 想更加详细的了解Python中的Lamdba表达式可以点击这里:&a class=&internal& href=&/question/&&Lambda 表达式有何用处?如何使用? - Python&/a&&/p&&p&(七)、Python中pass语句的作用是什么?&/p&&p&pass语句不会执行任何操作,一般作为占位符或者创建占位程序 &/p&&p&(八)、Python是如何进行类型转换的?&/p&&p&Python提供了将变量或值从一种类型转换为另一种类型的内置方法。&figure&&img data-rawheight=&566& data-rawwidth=&824& src=&/v2-dd0f7f44bae_b.png& class=&origin_image zh-lightbox-thumb& width=&824& data-original=&/v2-dd0f7f44bae_r.png&&&/figure& (九)、Python里面如何拷贝一个对象?&/p&&p&Python中对象之间的赋值是按引用传递的,如果要拷贝对象需要使用标准模板中的copy&/p&&ul&&li&copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。&/li&&li&copy.deepcopy:深拷贝,拷贝父对象和子对象。&/li&&/ul&&p&&figure&&img data-rawheight=&344& data-rawwidth=&864& src=&/v2-bb6b8dd0b523deedfded1f_b.png& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&/v2-bb6b8dd0b523deedfded1f_r.png&&&/figure&(十)、__new__和__init__的区别。&/p&&ul&&li&__init__为初始化方法,__new__方法是真正的构造函数。&/li&&li&__new__是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法&/li&&li&__init__是实例创建之后被调用的,然后设置对象属性的一些初始值。 &br&&/li&&/ul&&p&总结:__new__方法在__init__方法之前被调用,并且__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数。&/p&&p&&figure&&img data-rawheight=&367& data-rawwidth=&643& src=&/v2-1e2c48de9524cbe2d41e6b985a87d448_b.png& class=&origin_image zh-lightbox-thumb& width=&643& data-original=&/v2-1e2c48de9524cbe2d41e6b985a87d448_r.png&&&/figure&想要更加详细的了解这两个方法,请点击:&a class=& wrap external& href=&/?target=http%3A//my.oschina.net/kinegratii/blog/334968& target=&_blank& rel=&nofollow noreferrer&&Python中的__new__及其用法 &i class=&icon-external&&&/i&&/a&&/p&&p&(十一)、Python中单下划线和双下划线分别是什么?&/p&&ul&&li&__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突&/li&&li&_name:一种约定,用来指定变量私有&/li&&li&__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名&/li&&/ul&&p& 想要更加详细的了解这两者的区别,请点击:&a class=& wrap external& href=&/?target=https%3A///a/1411& target=&_blank& rel=&nofollow noreferrer&&Python中的下划线(译文)&i class=&icon-external&&&/i&&/a&&/p&&p&(十二)、说一说Python自省。&/p&&p&自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型。简单一句话就是运行时能够获得对象的类型。比如:&b&type()、dir()、getattr()、hasattr()、isinstance()
&figure&&img data-rawheight=&345& data-rawwidth=&1351& src=&/v2-da6bbea596c241c728f1a7d_b.png& class=&origin_image zh-lightbox-thumb& width=&1351& data-original=&/v2-da6bbea596c241c728f1a7d_r.png&&&/figure&&/b&&/p&&p&想要完整的理解Python自省,请点击:&a href=&/?target=http%3A///page/87128/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python自省(反射)指南&i class=&icon-external&&&/i&&/a&&/p&&p&&b&有关于元类以及单例模式会在后面文章中做详细的解释说明。 &/b&&br&&/p&&p&本文参考文献资料:&/p&&p&「1」&a class=& wrap external& href=&/?target=http%3A//blog.csdn.net/alvine008/article/details/& target=&_blank& rel=&nofollow noreferrer&&七、PYTHON 一些基础面试题目总结&i class=&icon-external&&&/i&&/a&&/p&&p&「2」&a class=& wrap external& href=&/?target=http%3A///85231/& target=&_blank& rel=&nofollow noreferrer&&很全的 Python 面试题&i class=&icon-external&&&/i&&/a&&/p&&p&「3」&a href=&/?target=http%3A///page/87128/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python自省(反射)指南&i class=&icon-external&&&/i&&/a&&/p&&p&「4」&a href=&/?target=http%3A//blog.csdn.net/mathboylinlin/article/details/9413551& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python学习笔记(十二):lambda表达式与函数式编程&i class=&icon-external&&&/i&&/a&&/p&&p&「5」&a class=& wrap external& href=&/?target=http%3A///Vito2008/p/5044251.html& target=&_blank& rel=&nofollow noreferrer&&Python面试必须要看的15个问题&i class=&icon-external&&&/i&&/a&&/p&&br&&b&学习编程,欢迎关注专栏:&a href=&/passer& class=&internal&&学习编程 - 知乎专栏&/a&&/b&
双十一你们的手还健在吗? 还在的话来刷一波题? 希望此文可以长期更新并作为一篇Python的面试宝典。每一道题目都附有详细解答,以及更加详细的回答链接。此篇是概念篇,下一篇会更新面试题代码篇。(一)、这两个参数是什么意思:*args,**kwargs?我们为…
&figure&&img src=&/50/v2-8d2b508f5fae9aa9879cb83f_b.jpg& data-rawwidth=&600& data-rawheight=&359& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-8d2b508f5fae9aa9879cb83f_r.jpg&&&/figure&收拾了一下自己学习Python过程中的笔记,将Python面试过程中经常涉及到的一些问题整理出来。没有总结到的知识点,欢迎大家在评论里提出来,本文长期更新。&h2&&b&1、Python基本语法&/b&&/h2&&p&&b&1、@staticmethod 和 @classmethod&/b&&/p&&p&Python中有三种方法,实例方法、类方法(@classmethod)、静态方法(@staticmethod)。&/p&&p&类方法的第一个参数是cls,表示该类的一个实例,静态方法基本上和一个全局函数相同&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&class&/span& &span class=&nc&&A&/span&&span class=&p&&(&/span&&span class=&nb&&object&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&foo&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&x&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&executing foo(&/span&&span class=&si&&%s&/span&&span class=&s2&&,&/span&&span class=&si&&%s&/span&&span class=&s2&&)&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&x&/span&&span class=&p&&))&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'self:'&/span&&span class=&p&&,&/span& &span class=&bp&&self&/span&&span class=&p&&)&/span&
&span class=&nd&&@classmethod&/span&
&span class=&k&&def&/span& &span class=&nf&&class_foo&/span&&span class=&p&&(&/span&&span class=&n&&cls&/span&&span class=&p&&,&/span& &span class=&n&&x&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&executing class_foo(&/span&&span class=&si&&%s&/span&&span class=&s2&&,&/span&&span class=&si&&%s&/span&&span class=&s2&&)&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&n&&cls&/span&&span class=&p&&,&/span& &span class=&n&&x&/span&&span class=&p&&))&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'cls:'&/span&&span class=&p&&,&/span& &span class=&n&&cls&/span&&span class=&p&&)&/span&
&span class=&nd&&@staticmethod&/span&
&span class=&k&&def&/span& &span class=&nf&&static_foo&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&executing static_foo(&/span&&span class=&si&&%s&/span&&span class=&s2&&)&&/span& &span class=&o&&%&/span& &span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&n&&A&/span&&span class=&p&&()&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&foo&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&class_foo&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&static_foo&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&&p&&b&2、迭代器和生成器&/b&&/p&&p&&b&迭代器:&/b&是访问集合元素的一种方式,从集合的第一个元素开始访问,直到所有元素被访问结束。其优点是不需要事先准备好整个迭代过程中的所有元素,仅在迭代到某个元素时才开始计算该元素。适合遍历比较巨大的集合。__iter__():方法返回迭代器本身, __next__():方法用于返回容器中下一个元素或数据。&/p&&p&&b&生成器:&/b&带有yield的函数不再是一个普通函数,而是一个生成器。当函数被调用时,返回一个生成器对象。不像一般函数在生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行状态。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&sd&&'''迭代器'''&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'for x in iter([1, 2, 3, 4, 5]):'&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&x&/span& &span class=&ow&&in&/span& &span class=&nb&&iter&/span&&span class=&p&&([&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&]):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&sd&&'''生成器'''&/span&
&span class=&k&&def&/span& &span class=&nf&&myyield&/span&&span class=&p&&(&/span&&span class=&n&&n&/span&&span class=&p&&):&/span&
&span class=&k&&while&/span& &span class=&n&&n&/span&&span class=&o&&&&/span&&span class=&mi&&0&/span&&span class=&p&&:&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&开始生成...:&&/span&&span class=&p&&)&/span&
&span class=&k&&yield&/span& &span class=&n&&n&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&完成一次...:&&/span&&span class=&p&&)&/span&
&span class=&n&&n&/span& &span class=&o&&-=&/span& &span class=&mi&&1&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&myyield&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&遍历得到的值:&&/span&&span class=&p&&,&/span&&span class=&n&&i&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&b&3、闭包&/b&&/p&&p&闭包可以实现先将一个参数传递给一个函数,而并不立即执行,以达到延迟求值的目的。满足以下三个条件:必须有一个内嵌函数;内嵌函数必须引用外部函数中变量;外部函数返回值必须是内嵌函数。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&delay_fun&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&caculator&/span&&span class=&p&&():&/span&
&span class=&k&&return&/span& &span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&y&/span&
&span class=&k&&return&/span& &span class=&n&&caculator&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'返回一个求和的函数,并不求和'&/span&&span class=&p&&)&/span&
&span class=&n&&msum&/span& &span class=&o&&=&/span& &span class=&n&&delay_fun&/span&&span class=&p&&(&/span&&span class=&mi&&3&/span&&span class=&p&&,&/span&&span class=&mi&&4&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'调用并求和:'&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&msum&/span&&span class=&p&&())&/span&
&/code&&/pre&&/div&&p&&b&4、*args 和 **kwargs&/b&&/p&&p&这两个是Python中的可变参数,用于接受参数的传递。*args表示任何多个无名参数,它是一个元组,**kwargs表示关键字参数,它是一个字典。同时使用*args和**kwargs时,必须*args在**kwargs之前。&/p&&p&&b&5、鸭子类型:&/b&&/p&&p&在鸭子类型中,关注的不是对象的类型本身,而是他是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&class&/span& &span class=&nc&&duck&/span&&span class=&p&&():&/span&
&span class=&k&&def&/span& &span class=&nf&&walk&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'I am duck,I can walk...'&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&swim&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'I am duck,I can swim...'&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&call&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'I am duck,I can call...'&/span&&span class=&p&&)&/span&
&span class=&n&&duck1&/span&&span class=&o&&=&/span&&span class=&n&&duck&/span&&span class=&p&&()&/span&
&span class=&n&&duck1&/span&&span class=&o&&.&/span&&span class=&n&&walk&/span&&span class=&p&&()&/span&
&span class=&c1&&# I am duck,I can walk...&/span&
&span class=&n&&duck1&/span&&span class=&o&&.&/span&&span class=&n&&call&/span&&span class=&p&&()&/span&
&span class=&c1&&# I am duck,I can call...&/span&
&/code&&/pre&&/div&&p&&b&6、@property 和 @setter&/b&&/p&&p&@property负责把一个方法变成属性调用。在对实例操作时,不暴露接口,而是通过getter和setter方法实现。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&class&/span& &span class=&nc&&Student&/span&&span class=&p&&(&/span&&span class=&nb&&object&/span&&span class=&p&&):&/span&
&span class=&nd&&@property&/span&
&span class=&k&&def&/span& &span class=&nf&&score&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&return&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_score&/span&
&span class=&nd&&@score.setter&/span&
&span class=&k&&def&/span& &span class=&nf&&score&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&value&/span&&span class=&p&&):&/span&
&span class=&k&&if&/span& &span class=&ow&&not&/span& &span class=&nb&&isinstance&/span&&span class=&p&&(&/span&&span class=&n&&value&/span&&span class=&p&&,&/span& &span class=&nb&&int&/span&&span class=&p&&):&/span&
&span class=&k&&raise&/span& &span class=&ne&&ValueError&/span&&span class=&p&&(&/span&&span class=&s1&&'score must be an intager'&/span&&span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&value&/span&&span class=&o&&&&/span&&span class=&mi&&0&/span& &span class=&ow&&or&/span& &span class=&n&&value&/span&&span class=&o&&&&/span&&span class=&mi&&100&/span&&span class=&p&&:&/span&
&span class=&k&&raise&/span& &span class=&ne&&ValueError&/span&&span class=&p&&(&/span&&span class=&s1&&'score must between 0~100!'&/span&&span class=&p&&)&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_score&/span& &span class=&o&&=&/span& &span class=&n&&value&/span&
&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&Student&/span&&span class=&p&&()&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&score&/span& &span class=&o&&=&/span& &span class=&mi&&60&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&score&/span&&span class=&p&&)&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&score&/span& &span class=&o&&=&/span& &span class=&mi&&999&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&score&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&b&7、多进程和多线程&/b&&/p&&p&&b&进程:&/b&是资源分配的最小单位,创建和销毁开销较大;&/p&&p&&b&线程:&/b&是CPU调度的最小单位,开销小,切换速度快;&/p&&p&操作系统将CPU时间片分配给多个线程,每个线程在指定放到时间片内完成。操作系统不断从一个线程切换到另一个线程执行,宏观上看就好像是多个线程一起执行。&/p&&p&Python中由于全局锁 (GIL) 的存在导致,同一时间只有一个获得GIL的线程在跑,其他线程则处于等待状态,这导致了多线程只是在做分时切换,并不能利用多核。&/p&&p&&u&多线程与多进程的区别&/u&:(1)多进程中同一个变量各自有一份拷贝在每个进程中,互不影响;(2)多线程中,所有变量都由所有线程共享,任何一个变量都可被任何一个线程修改。线程之间共享数据的最大危险在于多个线程同时更改一个变量,把内容改乱。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span&
&span class=&nn&&multiprocessing&/span&
&span class=&kn&&import&/span&
&span class=&n&&Pool&/span&
&span class=&c1&&#多进程&/span&
&span class=&kn&&from&/span&
&span class=&nn&&multiprocessing.dummpy&/span&
&span class=&kn&&import&/span&
&span class=&n&&Pool&/span&
&span class=&c1&&#多线程&/span&
&/code&&/pre&&/div&&p&&b&8、类变量和实例变量&/b&&/p&&p&普通的变量(非类的变量),在被赋值后即变量存在。类的变量在class里def外,通过变量名能被赋值,在def里通过类对象可被赋值&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&class&/span& &span class=&nc&&Apple&/span&&span class=&p&&(&/span&&span class=&nb&&object&/span&&span class=&p&&):&/span&
&span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&s1&&'apple'&/span&
&span class=&n&&p1&/span& &span class=&o&&=&/span& &span class=&n&&Apple&/span&&span class=&p&&()&/span&
&span class=&n&&p2&/span& &span class=&o&&=&/span& &span class=&n&&Apple&/span&&span class=&p&&()&/span&
&span class=&n&&p1&/span&&span class=&o&&.&/span&&span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&s1&&'orange'&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&p1&/span&&span class=&o&&.&/span&&span class=&n&&name&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&n&&p2&/span&&span class=&o&&.&/span&&span class=&n&&name&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&b&9、装饰器&/b&&/p&&p&装饰器是一个工厂函数,接受一个函数作为参数,然后返回一个新函数,其闭包中包含被装饰的函数。有了装饰器,可以提取大量函数中与本身功能无关的类似代码 ( 这块在Flask中用于定义路由的@app.route,就是一个很好的例子),达到代码重用的目的。可应用于插入日志、性能测试、事务处理等方面。 &/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&deco&/span&&span class=&p&&(&/span&&span class=&n&&func&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&warpper&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&args&/span&&span class=&p&&,&/span& &span class=&o&&**&/span&&span class=&n&&kwargs&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'start'&/span&&span class=&p&&)&/span&
&span class=&n&&func&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&args&/span&&span class=&p&&,&/span& &span class=&o&&**&/span&&span class=&n&&kwargs&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'end'&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&warpper&/span&
&span class=&nd&&@deco&/span&
&span class=&k&&def&/span& &span class=&nf&&myfunc&/span&&span class=&p&&(&/span&&span class=&n&&parameter&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&run with &/span&&span class=&si&&%s&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span& &span class=&n&&parameter&/span&&span class=&p&&)&/span&
&span class=&n&&myfunc&/span&&span class=&p&&(&/span&&span class=&s2&&&something&&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&h2&&b&2、数据库&/b&&/h2&&p&&b&1、MySQL基本语法&/b&&/p&&p&&b&增:创建数据表&/b&&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&USE&/span& &span class=&k&&database&/span&
&span class=&k&&CREATE&/span&
&span class=&k&&TABLE&/span&
&span class=&nf&&example&/span&&span class=&p&&(&/span&&span class=&n&&id&/span&
&span class=&kt&&INT&/span&&span class=&p&&,&/span&
&span class=&n&&name&/span&
&span class=&kt&&VARCHAR&/span&&span class=&p&&(&/span&&span class=&mi&&20&/span&&span class=&p&&),&/span&
&span class=&n&&sex&/span&
&span class=&n&&BOOLEAN&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&&b&删:&/b&&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&ALTER&/span&
&span class=&k&&TABLE&/span&
&span class=&err&&表名&/span& &span class=&k&&DROP&/span&
&span class=&err&&属性名&/span&&span class=&p&&;&/span&
&span class=&c1&&# 删除字段&/span&
&span class=&k&&DROP&/span&
&span class=&k&&TABLE&/span&
&span class=&err&&表名&/span&&span class=&p&&;&/span&
&span class=&c1&&# 删除表&/span&
&/code&&/pre&&/div&&p&&b&改:&/b&&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&ALTER&/span&
&span class=&k&&TABLE&/span&
&span class=&err&&旧表名&/span& &span class=&k&&RENAME&/span&
&span class=&err&&新表名&/span&&span class=&p&&;&/span&
&span class=&c1&&# 修改表名&/span&
&span class=&k&&ALTER&/span&
&span class=&k&&TABLE&/span&
&span class=&err&&表名&/span& &span class=&n&&MODIFY&/span&
&span class=&err&&属性名&/span&
&span class=&err&&数据类型&/span&&span class=&p&&;&/span&
&span class=&c1&&# 修改字段数据类型 &/span&
&/code&&/pre&&/div&&p&&b&查:&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&SELECT&/span&
&span class=&o&&*&/span& &span class=&n&&FROM&/span& &span class=&err&&表名&/span& &span class=&n&&WHERE&/span&
&span class=&nb&&id&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&c1&&# 条件查询&/span&
&span class=&n&&SELECT&/span&
&span class=&o&&*&/span& &span class=&n&&FROM&/span& &span class=&err&&表名&/span& &span class=&n&&WHERE&/span&
&span class=&err&&字段名&/span& &span class=&n&&BETWEEN&/span& &span class=&err&&条件一&/span& &span class=&n&&AND&/span&
&span class=&err&&条件二&/span& &span class=&c1&&# 范围查询&/span&
&span class=&n&&SELECT&/span&
&span class=&n&&COUNT&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&p&&)&/span& &span class=&n&&FROM&/span&
&span class=&err&&表名&/span&&span class=&p&&;&/span&
&span class=&c1&&# 查询表共有多少条记录&/span&
&/code&&/pre&&/div&&p&&b&触发器:&/b&是由INSERT、UPDATE和DELETE等事件来触发某种特定操作,满足触发条件时,数据库系统会执行触发器中定义的语句,这样可以保证某些操作之间的一致性。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&CREATE&/span&
&span class=&k&&TRIGGER&/span&
&span class=&err&&触发器名称&/span&
&span class=&k&&BEFORE&/span&&span class=&o&&|&/span&&span class=&n&&AFTER&/span&
&span class=&err&&触发事件&/span&
&span class=&k&&ON&/span&
&span class=&err&&表名称&/span& &span class=&k&&FOR&/span&
&span class=&k&&EACH&/span& &span class=&n&&ROW&/span&
&span class=&n&&BEGIN&/span&
&span class=&err&&执行语句&/span&
&span class=&n&&END&/span&
&/code&&/pre&&/div&&h2&&b&3、算法&/b&&/h2&&p&&b&1、快排&/b&&/p&&p&&b&算法:&/b&先从数列中取出一个数作为基准;然后将比该数大的数放到右边,比该数小的数放到左边;再对左右区间重复上一步骤。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&qsort&/span&&span class=&p&&(&/span&&span class=&n&&seq&/span&&span class=&p&&):&/span&
&span class=&k&&if&/span& &span class=&n&&seq&/span&&span class=&o&&==&/span&&span class=&p&&[]:&/span&
&span class=&k&&return&/span& &span class=&p&&[]&/span&
&span class=&k&&else&/span&&span class=&p&&:&/span&
&span class=&n&&pivot&/span&&span class=&o&&=&/span&&span class=&n&&seq&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&n&&lesser&/span&&span class=&o&&=&/span&&span class=&n&&qsort&/span&&span class=&p&&([&/span&&span class=&n&&x&/span& &span class=&k&&for&/span& &span class=&n&&x&/span& &span class=&ow&&in&/span& &span class=&n&&seq&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:]&/span& &span class=&k&&if&/span& &span class=&n&&x&/span&&span class=&o&&&&/span&&span class=&n&&pivot&/span&&span class=&p&&])&/span&
&span class=&n&&greater&/span&&span class=&o&&=&/span&&span class=&n&&qsort&/span&&span class=&p&&([&/span&&span class=&n&&x&/span& &span class=&k&&for&/span& &span class=&n&&x&/span& &span class=&ow&&in&/span& &span class=&n&&seq&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:]&/span& &span class=&k&&if&/span& &span class=&n&&x&/span&&span class=&o&&&=&/span&&span class=&n&&pivot&/span&&span class=&p&&])&/span&
&span class=&k&&return&/

我要回帖

更多关于 学python往哪方面就业 的文章

 

随机推荐