Python总结
目录
Python总结......................................... 错误!未定义书签。
前言............................................ 错误!未定义书签。
(一)如何学习Python............................ 错误!未定义书签。
(二)一些Python免费课程推荐................... 错误!未定义书签。
(三)Python爬虫需要哪些知识.................... 错误!未定义书签。
(四)Python爬虫进阶............................ 错误!未定义书签。
(五)Python爬虫面试指南........................ 错误!未定义书签。
(六)推荐一些不错的Python博客................. 错误!未定义书签。
(七)Python如何进阶............................ 错误!未定义书签。
(八)Python爬虫入门............................ 错误!未定义书签。
(九)Python开发微信公众号...................... 错误!未定义书签。
(十)Python面试概念和代码...................... 错误!未定义书签。
(十一)Python书籍.............................. 错误!未定义书签。
前言
知乎:路人甲
微博:玩数据的路人甲
微信公众号:一个程序员的日常
在知乎分享已经有一年多了,之前一直有朋友说我的回答能整理成书籍了,一直偷懒没做,最近有空仔细整理了知乎上的回答和文章另外也添加了一些新的内容,完成了几本小小的电子书,这一本是有关于Python方面的。
还有另外几本包括我的一些数据分析方面的读书笔记、增长黑客的读书笔记、机器学习十大算法等等内容。将会在我的微信公众号:一个程序员的日常进行更新,同时也可以关注我的知乎账号:路人甲及时关注我的最新分享用数据讲故事。
(一)如何学习Python
学习Python大致可以分为以下几个阶段:
1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程
2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在Codecademy - learn to code, interactively, for free上面进行练习。
3. 如果时间充裕的话可以买一本讲Python基础的书籍比如《Python编程》,
阅读这些书籍,在巩固一遍基础的同时你会发现自己诸多没有学习到的边边角角,这一步是对自己基础知识的补充。
库是Python的精华所在,可以说Python库组成并且造就了Python,Python库是Python开发者的利器,所以学习Python库就显得尤为重要:The Python Standard Library,Python库很多,如果你没有时间全部看完,不妨学习一遍常用的Python库:Python常用库整理 - 知乎专栏
库是开发者利器,用这些库你可以做很多很多东西,最常见的网络爬虫、自然语言处理、图像识别等等,这些领域都有很强大的Python库做支持,所以当你学了Python库之后,一定要第一时间进行练习。如何寻找自己需要的Python库呢推荐我之前的一个回答:如何找到适合需求的 Python 库
6.学习使用了这些Python库,此时的你应该是对Python十分满意,也十分激动能遇到这样的语言,就是这个时候不妨开始学习Python数据结构与算法,Python 设计模式,这是你进一步学习的一个重要步骤:faif/python-patterns
7.当度过艰难的第六步,此时选择你要研究的方向,如果你想做后端开发,不妨研究研究Django,再往后,就是你自己自由发挥了。
(二)一些Python免费课程推荐
以下课程都为免费课程
零基础相关
适用人群:Python零基础的初学者、Web开发程序员、运维人员、有志于从事互联网行业以及各领域应用Python的人群
疯狂的Python:快速入门精讲
零基础入门学习Python
玩转Python语言
Python语言程序设计
程序设计入门
可汗学院公开课:计算机科学
python 入门到精通
Python交互式编程入门的课程主页
Python交互编程入门(第2部分)的课程主页
web方向
Python Django 快速Web应用开发入门
爬虫
Python实战:一周学会爬取网页
数据分析方向
数据分析实战基础课程
(三)Python爬虫需要哪些知识
要学会使用Python爬取网页信息无外乎以下几点内容:
1、要会Python
2、知道网页信息如何呈现
3、了解网页信息如何产生
4、学会如何提取网页信息
第一步Python是工具,所以你必须熟练掌握它,要掌握到什么程度呢如果你只想写一写简单的爬虫,不要炫技不考虑爬虫效率,你只需要掌握:
数据类型和变量
字符串和编码
使用list和tuple
条件判断、循环
使用dict和set
你甚至不需要掌握函数、异步、多线程、多进程,当然如果想要提高自己小爬虫的爬虫效率,提高数据的精确性,那么记住最好的方式是去系统的学习一遍Python,去哪儿学习Python教程
假设已经熟悉了最基础的Python知识,那么进入第二步:知道网页信息如何呈现你首先要知道所需要抓取的数据是怎样的呈现的,就像是你要学做一幅画,在开始之前你要知道这幅画是用什么画出来的,铅笔还是水彩笔...可能种类是多样的,但是放到网页信息来说这儿只有两种呈现方式:
1、HTML (HTML 简介)
2、JSON (JSON 简介)
HTML是用来描述网页的一种语言
JSON是一种轻量级的数据交换格式
假设你现在知道了数据是由HTML和JSON呈现出来的,那么我们紧接着第三步:数据怎么来数据当然是从服务器反馈给你的,为什么要反馈给你因为你发出了请求。
“Hi~ ,服务器我要这个资源”
“正在传输中...”
“已经收到HTML或者JSON格式的数据”
这个请求是什么请求要搞清楚这一点你需要了解一下http的基础知识,更加精确来说你需要去了解GET和POST是什么,区别是什么。也许你可以看看这个:浅谈HTTP中Get与Post的区别 - hyddd - 博客园
很高兴你使用的是Python,那么你只需要去掌握好快速上手 - Requests 文档,requests可以帮你模拟发出GET和POST请求,这真是太棒了。
饭菜已经备好,两菜一汤美味佳肴,下面就是好好享受了。现在我们已经拿到了数据,我们需要在这些错乱的数据中提取我们需要的数据,这时候我们有两个选择。
第一招:万能钥匙
Python正则表达式指南,再大再乱的内容,哪怕是大海捞针,只要告诉我这个针的样子我都能从茫茫大海中捞出来,强大的正则表达式是你提取数据的不二之选。
第二招:笑里藏刀
Beautiful Soup 文档,或许我们有更好的选择,我们把原始数据和我们想要的数据的样子扔个这个Beautifulsoup,然后让它帮我们去寻找,这也是一个不错的方案,但是论灵活性,第二招还是略逊于第一招。
第三招:双剑合璧
最厉害的招式莫过于结合第一招和第二招了,打破天下无敌手。
基础知识我都会,可是我还是写不了一个爬虫啊!
客观别急,这还没完。
以下这些项目,你拿来学习学习练练手。
一些教学项目你值得拥有:
03. 豆瓣电影TOP250
04. 另一种抓取方式
还不够这儿有很多:
知乎--你需要这些:爬虫学习资料整理
如何学习Python爬虫[入门篇] - 知乎专栏
知乎--Python学习路径及练手项目合集
(四)Python爬虫进阶
爬虫无非分为这几块:分析目标、下载页面、解析页面、存储内容,其中下载页面不提。
1. 分析目标
所谓分析就是首先你要知道你需要抓取的数据来自哪里怎么来普通的网站一个简单的POST或者GET请求,不加密不反爬,几行代码就能模拟出来,这是最基本的,进阶就是学会分析一些复杂的目标,比如说:淘宝、新浪微博登陆以及网易云的评论信息等等。
2. 解析页面
解析页面主要是选择什么库或者那些库结合能使解析速度更快,可能你一开始你通过种种地方了解到了bs库,于是你对这个库很痴迷,以后只要写爬虫,总是先写上:
import requests
from bs4import BeautifulSoup
当然bs已经很优秀了,但是并不代表可以用正则表达式解析的页面还需要使用bs,也不代表使用lxml能解决的还要动用bs,所以这些解析库的速度是你在进阶时要考虑的问题。
3. 存储内容
刚开始学爬虫,一般爬取的结果只是打印出来,最后把在终端输出的结果复制粘贴保存就好了;后来发现麻烦会用上xlwt/openpyxl/csv的把存储内容写入表格,再后来使用数据库sqlite/mysql/neo4j只要调用了库都很简单,当然这是入门。
进阶要开始学习如何选择合适的数据库,或者存储方式。当爬取的内容过千万的时候,如何设计使存储速度更快,比如说当既有人物关系又有人物关系的时候,一定会用neo4j来存储关系,myslq用来存储用户信息,这样分开是因为如果信息全部存入neo4j,后期的存储速度经十分的慢。
当你每个步骤都能做到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,比如说Scrapy。
除了爬取策略以外,还有几点也是必备的:
1. 代理策略以及多用户策略
代理是爬虫进阶阶段必备的技能,与入门阶段直接套用代理不同,在进阶阶段你需要考虑如何设计使用代理策略,什么时候换代理,代理的作用范围等等,多用户的抓取策略考虑的问题基本上与代理策略相同。
2. 增量式抓取以及数据刷新
比如说你抓取的是一个酒店网站关于酒店价格数据信息的,那么会有这些问题:酒店的房型的价格是每天变动的,酒店网站每天会新增一批酒店,那么如何进行存储、如何进行数据刷新都是应该考虑的问题。
3.验证码相关的一些问题
有很多人提到验证码,我个人认为验证码不是爬虫主要去解决的问题,验证码不多的情况考虑下载到本地自己输入验证码,在多的情况下考虑接入打码平台。
(五)Python爬虫面试指南
前段时间快要毕业,而我又不想找自己的老本行Java开发了,所以面了很多Python爬虫岗位。因为我在南京上学,所以我一开始只是在南京投了简历,我一共面试了十几家企业,其中只有一家没有给我发offer,其他企业都愿意给到10K的薪资,不要拿南京的薪资水平和北上深的薪资水平比较,结合面试常问的问题类型说一说我的心得体会。
第一点:Python
因为面试的是Python爬虫岗位,面试官大多数会考察面试者的基础的Python
知识,包括但不限于:
与的区别
Python的装饰器
Python的异步
Python的一些常用内置库,比如多线程之类的
第二点:数据结构与算法
数据结构与算法是对面试者尤其是校招生面试的一个很重要的点,当然小公司不会太在意这些,从目前的招聘情况来看对面试者的数据结构与算法的重视程度与企业的好坏成正比,那些从不问你数据结构的你就要当心他们是否把你当码农用的,当然以上情况不绝对,最终解释权归面试官所有。
第三点:Python爬虫
最重要也是最关键的一点当然是你的Python爬虫相关的知识与经验储备,这通常也是面试官考察的重点,包括但不限于:
你遇到过的反爬虫的策略有哪些
你常用的反反爬虫的方案有哪些
你用过多线程和异步吗除此之外你还用过什么方法来提高爬虫效率
有没有做过增量式抓取
对Python爬虫框架是否有了解
第四点:爬虫相关的项目经验
爬虫重在实践,除了理论知识之外,面试官也会十分注重爬虫相关的项目:你做过哪些爬虫项目如果有Github最好
你认为你做的最好的爬虫项目是哪个其中解决了什么难题有什么特别之
处
以上是我在面试过程中,会碰到的一些技术相关的问题的总结,当然面试中不光是技术这一点,但是对于做技术的,过了技术面基本上就是薪资问题了。
(六)推荐一些不错的Python博客
如果是Python基础的话,廖雪峰的博客教程会是一个不错的选择:Python3教程
Python 教程
当然很多刚接触Python的同学反应廖大大的教程中部分跳跃性太大,如果觉得跳跃性太大可以结合菜鸟教程一起看:
Python3 教程 | 菜鸟教程
Python 基础教程 | 菜鸟教程
如果你英文稍好的话推荐还是看官方文档:Python documentation
如果不是为了学习Python基础的话,推荐几个其他的博客。
董老师的博客:小明明s à domicile《Python-Web开发实战》的作者,知乎某位工程师的博客:分类《Python》,具体是哪位大神我不太清楚。
依云大大的博客文章值得深读:依云's Blog
《从Python开始学编程》的作者博客:Python - 标签 - Vamei - 博客
园,但是此博客的内容也是比较偏向基础知识的。
pythonware的创造者,Python图像库(PIL)的创造者:
我很喜欢的一位作者,Pyhub创始人:Yusheng's Tech Blog
xlzd杂谈文章不是很多,有兴趣可以多看看在知乎的他。
twelfthing - 博客园
Python | the5fire的技术博客
(七)Python如何进阶
很多人在学习编程之初都会碰到这种问题:学会了基础的语法了,但是还是做不了项目,不知道如何下手。
当初,我学习C的时候是这样、Java的时候是这样、Python的时候也是这样,其实不管什么语言、什么知识都是这样:理论基础知识 - 能动手做项目是有一道鸿沟的。
那么如何突破这条鸿沟中间的桥梁是什么
其实题主自己已经回答出来了:照抄!
所谓照抄前提是有样本。
首先找到一些简单易上手的项目,这些项目大多散落在Python实践相关的书籍中、Github上,这些实战项目知乎上都有很多推荐。
1.一些比较好的适合初学者动手的项目:
Show-Me-the-Code/show-me-the-code
aosabook/500lines
另外知乎上这个问题下的一些推荐的项目还是非常适合新手练习的,可以作为参考:Python 的练手项目有哪些值得推荐
2.大多数的Python书里面(除了纯理论书)都是有小项目的,而且书的一个优点是它会一步一步解释这样做的原因。
先照抄这些项目,实现这些小功能在电脑上能运行确认无误之后,回过头来看代码:
有没有你不理解的地方,不理解的地方标记去搜索引擎或者书中找解释。
学习作者设计这个项目的思路方法,并运用到接下来的项目,如果时间充裕,建议隔天再重新再不看书的情况下重新自己实现一遍这些小项目。
如果你是跟着实战的书敲代码的,很多时候项目都不会一遍运行成功,那么你就要根据各种报错去寻找原因,这也是一个学习的过程。
总结起来从Python入门跳出来的过程分为三步:照抄、照抄之后的理解、重新自己实现。
(八)Python爬虫入门
想写这么一篇文章,但是知乎社区爬虫大神很多,光是整理他们的答案就够我这篇文章的内容了。对于我个人来说我更喜欢那种非常实用的教程,这种教程对于想直接上手爬虫做一些小东西的朋友来说是极好的。
用一个精彩的回答作为开头:如何入门 Python 爬虫 - 谢科的回答
如果你想学习编程,但是找不到学习路径和资源,欢迎关注专栏:学习编程
第一:Python爬虫学习系列教程
Python版本:
整体目录:
一、爬虫入门
Python爬虫入门一之综述
Python爬虫入门二之爬虫基础了解
Python爬虫入门三之Urllib库的基本使用
Python爬虫入门四之Urllib库的高级用法
Python爬虫入门五之URLError异常处理
Python爬虫入门六之Cookie的使用
Python爬虫入门七之正则表达式
二、爬虫实战
Python爬虫实战一之爬取糗事百科段子
Python爬虫实战二之爬取百度贴吧帖子
Python爬虫实战三之实现山东大学无线网络掉线自动重连Python爬虫实战四之抓取淘宝MM照片
Python爬虫实战五之模拟登录淘宝并获取所有订单
Python爬虫实战六之抓取爱问知识人问题并保存至数据库Python爬虫实战七之计算大学本学期绩点
Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
三、爬虫利器
Python爬虫利器一之Requests库的用法
Python爬虫利器二之Beautiful Soup的用法
Python爬虫利器三之Xpath语法与lxml库的用法
Python爬虫利器四之PhantomJS的用法
Python爬虫利器五之Selenium的用法
Python爬虫利器六之PyQuery的用法
四、爬虫进阶
Python爬虫进阶一之爬虫框架概述
Python爬虫进阶二之PySpider框架安装配置
Python爬虫进阶三之爬虫框架Scrapy安装配置
Python爬虫进阶四之PySpider的用法
第二(第一的姊妹篇):Python爬虫入门教程
Python版本:
教程目录:
[Python]网络爬虫(一):抓取网页的含义和URL基本构成
[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
[Python]网络爬虫(三):异常的处理和HTTP状态码的分类
[Python]网络爬虫(四):Opener与Handler的介绍和实例应用
[Python]网络爬虫(五):urllib2的使用细节与抓站技巧
[Python]网络爬虫(六):一个简单的百度贴吧的小爬虫
[Python]网络爬虫(七):Python中的正则表达式教程
[Python]网络爬虫(八):糗事百科的网络爬虫()源码及解析(简化更新) [Python]网络爬虫(九):百度贴吧的网络爬虫()源码及解析
[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
[Python]网络爬虫(11):亮剑!爬虫框架小抓抓Scrapy闪亮登场!
[Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
第三:你已经看完上面(第一或者第二)的教程:再推荐知乎用户@陈唯源的实战练习博客
Python爬虫学习记录(1)——Xiami全站播放数
Python爬虫学习记录(2)——LDA处理歌词
百度音乐带标签,作曲,演唱者,类别的歌词数据
Python爬虫学习记录(4)——传说中的足彩倍投法。。好像也不是那么靠谱2011~全球所有足球比赛比分数据以及足彩各公司盘口
Python爬虫学习记录(3)——用Python获取虾米加心歌曲,并获取MP3下载地址
Python爬虫学习记录(5)——python mongodb + 爬虫 + 的acfun视频排行榜
Python爬虫学习记录(0)——Python 爬虫抓站记录(虾米,百度,豆瓣,新浪微博)
第四:最后推荐知乎用户@gaga salamer的实战练习博客
爬虫教程(1)基础入门
爬虫教程(2)性能进阶
知乎用户信息爬虫(规模化爬取)
用scrapy爬取豆瓣电影新片榜
用scrapy对豆瓣top250页面爬取(多页面爬取)
用scrapy自动爬取下载图片
用scrapy自动下载石原sama的豆瓣影人图集(727张图片,自动下载)
希望以上的教程可以帮助到大家。
(九)Python开发微信公众号
我的第一个Python项目就是做的微信公众号机器人,按照当时我的思路来讲讲如何学习使用Python来开发微信公众号:大家伙收藏顺手点个赞呗。
微信公众号功能开发分为两大块:需要调用微信内部功能、不需要调用微信内部功能,重点在调用微信内部功能组建。
1、需要调用微信内部功能
需要调用微信内部功能组件的比如:公众号收发消息|图片、页面分享至朋友圈、用户授权提取用户基本信息、微信小店、微信公众号菜单等内部功能组件,这些功能组件在微信公众号开发者文档里面找到:微信公众平台开发者文档
对于这些功能组件,开发者文档都提供了详细的接口文档,告诉你如何调用,而你只需要用Python调用这些接口即可。比如一个很简单的消息发送的方法如下:
当然在这所有的调用之前,需要进行一些授权验证,同样开发者文档有一套完整的接入指南:接入指南 - 微信公众平台开发者文档
很遗憾很多初学者在一开始看这份文档的时候并不能看懂,所以这里也推荐一些我以前学习摸索的过程中使用到的一些简单易学的教程。
你可以先做一个简单的微信机器人练练手(零基础十分容易上手):使用python一步一步搭建微信公众平台(一)
使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的
翻译工具
使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢
迎信息与听音乐功能
使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自
动回复
使用python一步一步搭建微信公众平台(五)----使用mysql服务来记
录用户的反馈
如果你已经能按照以上的教程搭建一个完整的微信机器人了,基本上对于微信收发消息等等简单功能已经没有什么障碍了。下面再继续学习如下教程,开始学习如何调用其他一些相对来说比较复杂的接口。
微信公众平台开发入门教程
微信公众平台开发—天气预报
微信公众平台开发—小黄鸡
微信公众平台开发—人脸识别
微信公众平台开发—百度地图
微信公众平台开发—笑话
微信公众平台开发—在线点歌
微信公众平台开发—附近查询
微信公众平台开发—快递物流
微信公众平台开发—一键关注
当你实验了如上的教程之后,相信官方文档的所有接口调用对你来说已经小菜一碟了。
2、不需要调用微信内部功能
不需要调用微信内部功能组件的,就如同正常的web页面一样,比如填写表单进行进行注册、点击按钮进行跳转等等,这些都是正常的web请求,按照正常的web开发方法走即可。
(十)Python面试概念和代码
(一)、这两个参数是什么意思:*args,**kwargs我们为什么要使用它们
答:如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用*args(单星号)。如果
我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候我们可以使用**kwargs(双星号),args、kwargs两个标识符是约定俗成的用法。
另一种答法:当函数的参数前面有一个星号*号的时候表示这是一个可变的位置参数,两个星号**表示这个是一个可变的关键词参数。星号*把序列或者集合解包(unpack)成位置参数,两个星号**把字典解包成关键词参数。
(二)、谈一谈Python的装饰器(decorator)
装饰器本质上是一个Python函数,它可以让其它函数在不作任何变动的情况下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景。比如:插入日志、性能测试、事务处理、缓存、权限校验等。有了装饰器我们就可以抽离出大量的与函数功能无关的雷同代码进行重用。
有关于具体的装饰器的用法看这里:装饰器 - 廖雪峰的官方网站
(三)、简要描述Python的垃圾回收机制(garbage collection)
Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。
引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。
标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。
分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。
如果你想要深入了解Python的GC机制,点击这里:[转载]Python垃圾回收机制--完美讲解!
(四)、Python多线程(multi-threading)。这是个好主意吗
Python并不支持真正意义上的多线程,Python提供了多线程包。Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。这就意味着如果你先要提高代码执行效率,使用threading不是一个明智的选择,当然如果你的代码是IO密集型,多线程可以明显提高效率,相反如果你的代码是CPU密集型的这种情况下多线程大部分是鸡肋。
想要深入详细了解多线程,点击这里:详解Python中的多线程编程_python
想了解一下IO密集和CPU密集可以点击这里:CPU-bound(计算密集型) 和I/O bound(I/O密集型)
(五)、说明os,sys模块不同,并列举常用的模块方法
官方文档:
os模板提供了一种方便的使用操作系统函数的方法
sys模板可供访问由解释器使用或维护的变量和与解释器交互的函数
另一种回答:
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操作Python 运行时的环境。一些常用的方法:
一些常用的用法示例:
想要了解更详细的使用请访问:os和sys模块 - 君醉
(六)、什么是lambda表达式它有什么好处
简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数。
lambda表达式一般的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。
想更加详细的了解Python中的Lamdba表达式可以点击这里:Lambda 表达式有何用处如何使用 - Python
(七)、Python中pass语句的作用是什么
pass语句不会执行任何操作,一般作为占位符或者创建占位程序
(八)、Python是如何进行类型转换的
Python提供了将变量或值从一种类型转换为另一种类型的内置方法。
(九)、Python里面如何拷贝一个对象
Python中对象之间的赋值是按引用传递的,如果要拷贝对象需要使用标准模板中的copy
:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。
y:深拷贝,拷贝父对象和子对象。
(十)、__new__和__init__的区别。
__init__为初始化方法,__new__方法是真正的构造函数。
__new__是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法__init__是实例创建之后被调用的,然后设置对象属性的一些初始值。
总结:__new__方法在__init__方法之前被调用,并且__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数。
想要更加详细的了解这两个方法,请点击:Python中的__new__及其用法
(十一)、Python中单下划线和双下划线分别是什么
__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突
_name:一种约定,用来指定变量私有
__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名
想要更加详细的了解这两者的区别,请点击:Python中的下划线(译文)
(十二)、说一说Python自省。
自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型。简单一句话就是运行时能够获得对象的类型。比如:type()、dir()、getattr()、hasattr()、isinstance()
想要完整的理解Python自省,请点击:Python自省(反射)指南
有关于元类以及单例模式会在后面文章中做详细的解释说明。
本文参考文献资料:
七、PYTHON 一些基础面试题目总结
很全的 Python 面试题
Python自省(反射)指南
Python学习笔记(十二):lambda表达式与函数式编程
Python面试必须要看的15个问题
(十一)Python书籍
入门书籍
《Python学习手册》
《Head First Python》
《Learn Python The Hard Way》
《Python编程:入门到实践》
《笨办法学Python》
《简明Python教程》
进阶书籍
《Python Cookbook(第三版)》
《流畅的Python》
《Python源码剖析》
《Python进阶》
《Flask Web开发:基于Python的Web应用开发实战》
print 句子也能够跟上多个字符串,用逗号“ ,”离隔,就能够连成一串输出: print 'The quick brown fox', 'jumps over', 'the lazy dog' 在 Python 中,等号 =是赋值句子,能够把恣意数据类型赋值给变量,同一个变量能够重复赋值,并且能够是不同类型的变量。变量自身类型不固定 的言语称之为动态言语,与之对应的是静态言语。 静态言语在界说变量时有必要指定变量类型,假如赋值的时分类型不匹配,就会报错。 假如字符串自身包含 '怎么办?比方咱们要表明字符串 I'm OK ,这时,能够用 " " 括起来表明。相似的,假如字符串包含 ",咱们就能够用 ' '括起来表示:假如字符串既包含 '又包含 "怎么办?这个时分,就需求对字符串的某些特别字符进行“转义”,Python 字符串用进行转义。 \n 表示换行 \t 表示一个制表符 \\ 表示\ 字符本身 假如一个字符串包含许多需求转义的字符,对每一个字符都进行转义会很费事。为了防止这种状况,咱们能够在字符串前面加个前缀 r,表明这是 一个raw 字符串,里面的字符就不需要转义了。如,r'\(~_~)/ \(~_~)/' 。如果要表示多行字符串,可以用'''...''' 表示 如果中文字符串在Python 环境下遇到UnicodeDecodeError ,这是因为.py 文件保存的格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*- print u' 中文' 在 Python 中,布尔类型还能够与其他数据类型做 and 、or 和 not 运算 直接用[ ] 把list 的所有元素都括起来,就是一个list 对象。通常,我们会把list 赋值给一个变量,这样,就可以通过变量来引用list 索引从 0 开端,也便是说,榜首个元素的索引是 0,第二个元素的索引是 1 ,以此类推。 因此,要打印第一名同学的名字,用L[0] 添加list 的append() 方法或者insert() 方法 定位删去 L.pop()() 对 list 中的某一个索引赋值,就能够直接用新的元素替换掉本来的元素, list 包含的元素个数坚持不变。 缩进请严厉依照 Python 的习气写法: 4 个空格,不要运用 Tab,更不要混合 Tab 和空格,不然很简单形成由于缩进引起的语法过错。 if age >= 18:要防止嵌套结构的 if ... else ... ,咱们能够用 if ... 多个 elif ... else ... 的结构,一次写完一切的规矩 奇数加和for a in L: sum+=a x += 2 偶数不要if x%2==0: Continue dict 的榜首个特点是查找速度快,不管 dict 有 10 个元素仍是 10 万个元素,查找速度都相同。而 list 的查找速度跟着元素增加而逐步下降。 d={} d.get(x) 可以取到d{} 中key 后面的value 个数len(s) s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for name,score in s: print name,':',score s.remove():s.add() 比较函数cmp(x,y)
《笨办法学python》学习笔记(Python 3.6) 习题19 ex19.py # -*- coding: utf-8 -*- # 定义cheese_and_crackers这个函数,该函数有两个参数,分别是cheese_count 和boxes_of_crackers. # 函数其实就是个print的集合 def cheese_and_crackers(cheese_count,boxes_of_crackers): print("You have %d cheeses!" %cheese_count) print("You have %d boxes of crackers!" %boxes_of_crackers) print("Man that's enough for a party!") print("Get a blanket.\n") #屏幕上首先显示下一行的语句。 print("We can just give the function numbers directy:") # 调用了这个函数,带入两个参数(20, 30) cheese_and_crackers(20,30) print("OR,we can use variables from our script:") # 定义两个变量 amount_of_cheese=10 amount_of_crackers=50 #将定义的两个变量作为参数引入到函数中。 cheese_and_crackers(amount_of_cheese,amount_of_crackers) print("We can even do math inside too:") # 引入的参数是一个运算式 cheese_and_crackers(10+20,5+6) print("And we can combine the two,variables and math:") cheese_and_crackers(amount_of_cheese+100,amount_of_crackers+1000) #自编练习1 def my_exercise_prg(prg1,prg2): print("The fisrt number is %d." %prg1) print("The second number is %d."%prg2) print("The first number and the second number equals " ,end="") print(prg1+prg2,".") print("Let's do math!") prg1=2 prg2=7 my_exercise_prg(prg1,prg2) #自编练习2
第一课 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比C语言、C++语言或Java 之类的系统编程语言要简单容易。 也让脚本语言另有一些属于脚本语言的特性: ?语法和结构通常比较简单 ?学习和使用通常比较简单 ?通常以容易修改程序的“解释”作为运行方式,而不需要“编译” ?程序的开发产能优于运行性能 一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组串行。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令串行的指令,还可以编写更复杂的程序。 1. IDLE 是什么? IDLE是一个Python Shell,shell的意思就是“外壳”,基本上来说,就是一个通过键入文本与程序交互的途径!像我们Windows那个cmd窗口,像Linux那个黑乎乎的命令窗口,他们都是shell,利用他们,我们就可以给操作系统下达命令。同样的,我们可以利用IDLE这个shell与Python进行互动。 2. print() 的作用是什么? print() 会在输出窗口中显示一些文本(在这一讲中,输出窗口就是IDLE shell 窗口)。 3. Python 中表示乘法的符号是什么? Python中的乘号是*(星号)。 4. 为什么>>>print('I love https://www.doczj.com/doc/b915960909.html, ' * 5) 可以正常执行, 但>>>print('I love https://www.doczj.com/doc/b915960909.html, ' + 5) 却报错?
Python将纳入高考内容、小学生教材开始接触Python、Python列入全国计算机等级考试…… 全民学Python的话题铺天盖地,中国的Python学习者是全球第一,人才如此泛滥,甚至以 后孩子都会,学习它还能体现自身高价值? 30年前学英语的人凤毛麟角,但是现在,当英语成为了国际通用语言,学英语的人地位下降 了吗?仍然有大把人才靠英语的才能,过上令人羡慕的生活。 所以,不论竞争者多少,建立自己强有力的竞争力才是关键。现在学Python的人越多,正代 表着它成为编程届的国际通用语言大有可能。 短时间掌握一门技能是现在社会的需求。节奏越来越快,现在不是大鱼吃小鱼,而是快鱼吃 慢鱼的时代。人的时间比机器的时间值钱,而机器可以堆。 从大公司角度而言: 国内基于Python创业成功的案例不在少数,豆瓣、知乎、果壳,全栈都是 Python,大家对Python自然有信心。并且从这几家公司出来的程序员与 CTO,创业的话一般都会选择Python,雪球定会越滚越大。 从小公司角度而言: 现在创业公司越来越多,用Python出项目快,开发成本小,雇佣的员工数量也可以保持在可 控范围。 自学Python 学会基础,就从爬虫开始 现在大家学习Python,两个特别重要的方向就是爬虫和Web。利用 Python 爬虫我们可以进 行房地产、招聘等行业市场调研和商业分析、作为机器学习、数据挖掘的原始数据、爬取优 质的资源:图片、文本、视频等。 但是如果想学Python,我们会发现,画面是这样的:教你用Scrapy框架爬取xx,教你用Django框架爬取xx……这些框架,其实就是第三方公司推出的开源库。用库你可以很方便的爬取信息,但是问题也来了:
第一节课 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比C语言、C++语言或Java 之类的系统编程语言要简单容易。也让脚本语言另有一些属于脚本语言的特性: 语法和结构通常比较简单 学习和使用通常比较简单 通常以容易修改程序的“解释”作为运行方式,而不需要“编译” 程序的开发产能优于运行性能 一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组串行。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令串行的指令,还可以编写更复杂的程序。 1. IDLE 是什么? IDLE是一个Python Shell,shell的意思就是“外壳”,基本上来说,就是一个通过键入文本与程序交互的途径!像我们Windows那个cmd窗口,像Linux那个黑乎乎的命令窗口,他们都是shell,利用他们,我们就可以给操作系统下达命令。同样的,我们可以利用IDLE这个shell与Python进行互动。 2. print() 的作用是什么? print() 会在输出窗口中显示一些文本(在这一讲中,输出窗口就是IDLE shell窗口)。 3. Python 中表示乘法的符号是什么? Python中的乘号是*(星号)。 4. 为什么 >>>print('I love https://www.doczj.com/doc/b915960909.html, ' * 5) 可以正常执行, 但 >>>print('I love https://www.doczj.com/doc/b915960909.html, ' + 5) 却报错? 在Python 中不能把两个完全不同的东西加在一起,比如说数字和文本,正是这个原因,>>>print('I love https://www.doczj.com/doc/b915960909.html, ' + 5) 才会报错。这就像是在说“五只小甲 鱼加上苍井空会是多少?”一样没有多大意义,结果可能是五,可能是六,也可能是八!不过乘以一个整数来翻倍就具有一定的意义了,前边的例子就是将 "I love https://www.doczj.com/doc/b915960909.html," 这个字符串打印五次。 5. 如果我需要在一个字符串中嵌入一个双引号,正确的做法是? 你有两个选择:可以利用反斜杠(\)对双引号转义:\",或者用单引号引起这个字符串。例如:' I l"o"ve https://www.doczj.com/doc/b915960909.html, '。 6. 为什么我们要使用Python3?Python2到底有什么问题?看起来很多程序员依然都在使用Python2? 确实还有相当多的程序员在使用 Python2,不过 Python3 才是 Python 发展的未来,就像 XP 和WIN7 一样。在《零基础入门学习Python》的系列教程准备中,小甲鱼发觉Python3 中的新特性确实很妙,很值得进行深入学习!你也不用担心,如果你了解了Python3,Python2 的代码阅读对于你来说根本不成问题! 第二节课 0. 什么是BIF? BIF 就是Built-in Functions,内置函数。为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!!!),Python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如
python入门重点知识总结 1. 数据类型: 下标为负值: 注意事项: 练习list列表结构 1def reverseWords(input): 2 inputWords=input.split(" "); 3 inputWords=inputWords[‐1::‐1] 4 output=' '.join(inputWords) 5 return output 6if __name__ == "__main__": 7 input='I like runobb' 8 rw=reverseWords(input); 9 print(rw) 结果:
常用函数 示例 1a=[66.25,333,1,333,1234.5] 2print(a.count(333),a.count('x')) 3a.insert(2,‐1) 4a.append(333) 5print(a) 6a.remove(333) 7print(a) 8a.reverse(); 9print(a) 10a.sort() 11print(a) 结果:
list可当做栈使用 1stack=[3,4,5] 2stack.append(6) 3print(stack) 4stack.pop() 5print(stack) 结果 list当做队列使用 1from _collections import deque 2queue=deque(["Eric","John","Michael"]) 3queue.append("Terry") 4print(queue) 5queue.popleft() 6print(queue) 结果 列表推导式可操作for或者if语句 1vec=[2,4,6] 2result=[3*x for x in vec] 3print(result) 结果 1vec=[2,4,6] 2print([3*x for x in vec if x>3])
Python总结 目录 Python总结 (1) 前言 (2) (一)如何学习Python (2) (二)一些Python免费课程推荐 (4) (三)Python爬虫需要哪些知识? (5) (四)Python爬虫进阶 (8) (五)Python爬虫面试指南 (11) (六)推荐一些不错的Python博客 (13) (七)Python如何进阶 (14) (八)Python爬虫入门 (16) (九)Python开发微信公众号 (20) (十)Python面试概念和代码 (24) (十一)Python书籍 (34)
前言 知乎:路人甲 微博:玩数据的路人甲 微信公众号:一个程序员的日常 在知乎分享已经有一年多了,之前一直有朋友说我的回答能整理成书籍了,一直偷懒没做,最近有空仔细整理了知乎上的回答和文章另外也添加了一些新的内容,完成了几本小小的电子书,这一本是有关于Python方面的。 还有另外几本包括我的一些数据分析方面的读书笔记、增长黑客的读书笔记、机器学习十大算法等等内容。将会在我的微信公众号:一个程序员的日常进行更新,同时也可以关注我的知乎账号:路人甲及时关注我的最新分享用数据讲故事。(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介| 菜鸟教程
2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在Codecademy - learn to code, interactively, for free上面进行练习。 3. 如果时间充裕的话可以买一本讲Python基础的书籍比如《Python编程》,阅读这些书籍,在巩固一遍基础的同时你会发现自己诸多没有学习到的边边角角,这一步是对自己基础知识的补充。 4.Python库是Python的精华所在,可以说Python库组成并且造就了Python,Python库是Python开发者的利器,所以学习Python库就显得尤为重要:The Python Standard Library,Python库很多,如果你没有时间全部看完,不妨学习一遍常用的Python库:Python常用库整理- 知乎专栏 5.Python库是开发者利器,用这些库你可以做很多很多东西,最常见的网络爬虫、自然语言处理、图像识别等等,这些领域都有很强大的Python库做支持,所以当你学了Python库之后,一定要第一时间进行练习。如何寻找自己需要的Python库呢?推荐我之前的一个回答:如何找到适合需求的Python 库?
如何快速学会Python文档How to learn Python documents quickly 编订:JinTai College
如何快速学会Python文档 小泰温馨提示:心得体会是指一种读书、实践后所写的感受性文字。 语言类读书心得同数学札记相近;体会是指将学习的东西运用到实践 中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。 本文档根据心得体会内容要求和针对主题是读书学习群体的特点展开 说明,具有实践指导意义,便于学习和使用,本文下载后内容可随意 修改调整及打印。 一、什么是Python Python是一种计算机程序设计语言。是一种面向对象的 动态类型语言,最初被设计用于编写自动化脚本(shell), 随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 二、Python的职位发展有哪些 Python全栈开发工程师(10k-20K)Python运维开发工 程师(15k-20K)Python高级开发工程师(15k-30K)Python 大数据工程师(15K-30K)Python机器学习工程师(15k-30K)Python架构师(20k-40k)
目前应用最多的:全栈开发、数据分析、运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得更远。 三、该如何学好Python 1、明确目标 其实很多人在学习Python之前很少想这个,因为很多人说:现在Python很火呀,所以我才需要学。这个其实跟你自己没有什么关系,例如:你曾经想做一个网站不会开发,现在可以做了,现在Python很火并且你也要学来找工作,未来Python很火,我具备了Python的技能会不错。 所以我们首先要明确自己的目标,确定学习的决心,坚持自己的选择。 2、明确学习规划 ①.目前市场需求主流的岗位里,你得选择一个其中你目前看来可以学,并且最敢兴趣学习的方向; ②.在方向选择好后,对照招聘网站:拉勾、智联、Boss 直聘等网站的岗位要求,进行学习内容的统计与大概的记录;
竭诚为您提供优质文档/双击可除 python学习心得 篇一:python学习经验分享 数据类型 print 输出,可以多个输出,用逗号分隔a=20printa,type(a) 20 type() 内置函数type(),用来查询变量的类型 a=20printtype(a) 基本数据类型? ? ? ?a=10int整数a=1.3float浮点数a=True真值 (True/False)a=hello!字符串 注:对于字符串来说,也可以用双引号 补充
计算结果为布尔类型 输出 补充 计算结果为浮点型 输出 序列 包括以下两种 ? ?tuple(定值表;也有翻译为元组)list(表) tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更一个序列作为另一个序列的元素 空序列 元素的引用 序列元素的下标从0开始 由于list的元素可变更,可以对list的某个元素赋值如果对tuple做赋值操作,会出错 范围引用 基本样式[下限:上限:步长] 在范围引用的时候,如果写明上限,那么这个上限本身不包括在内 尾部元素引用
如果s1[0:-1],那么最后一个元素不会被引用(再一次,不包括上限元素本身) 输出 字符串是元组 字符串是一种特殊的元素,因此可以执行元组的相关操作 输出 tuple中元素不可变,list中元素可变,但是如果tuple 中包含一个list,那么此list中的元素是可变的 输出 步进-1 表示分片将会从右至左进行而不是通常的从左至右 分片s以反转的顺序获取元素,即结果是偏移为4,3,2的元素 篇二:python学习报告 1、python学习报告学习目标 1.了解python的特性及用处。 2.熟悉python的基本语法。 3.能编写简单的python程序。 2、python的简单介绍 1.与perl一样,python也是一种解释语言,它完全采用面向对象的方式,语言结构介于c语言和perl语言之间。
openstack编程:python基础知识总结 阅读本文可以带着下面问题: 1.python的注释符号是什么? 2.python输出该如何写? 3.什么是内建函数? 4.python的运算符都包含哪些? 5.Python字符串该如何表示? 6.列表和元组怎么表示? 7.if语句该如何表示? 8.while语句如何表示? 9.如何捕获异常? 10.函数如何表示? 11.Python的源文件名是什么? 12.常用函数都有哪些? 总结一 1.程序输出: 和C中printf很像: 1.>>> print "%s is number %d." % ("Python", 1) 2.Python is number 1. 复制代码 将输出重定向到系统标准错误: 1.>>> import sys 2.>>> print >> sys.stderr, 'fatal error.' 3.fatal error. 复制代码 将输出重定向到一个文件: 1.>>> logfile = open('./out.log', 'a') 2.>>> print >> logfile, 'hello world' 3.>>> logfile.close() 复制代码 2.程序输入和内建函数raw_input(): 1.>>> user = raw_input('Enter your name:')
2.Enter your name:chenjianfei 3.>>> passwd = raw_input('Enter your password:') 4.Enter your password:123456 复制代码 内建函数int()可将数字字符串转化为int: 1.>>> num = raw_input('Input a num:') 2.Input a num:100 3.>>> print '2*num = %d' % num*2 4.Traceback (most recent call last): 5. File "
https://www.doczj.com/doc/b915960909.html, 学Python matplotlib(树地图)_光环大数据python培训 用可视化的方法来表达离散变量的数值情况,不仅仅可以使用条形图、饼图、 热力图,我们还可以借助于树地图来完成。树地图的思想就是通过方块的面积来 表示,面积越大,其代表的值就越大,反之亦然。今天要跟大家分享的就是如何 通过Ptyhon这个工具,完成树地图的绘制。 函数语法及参数 在Python中,可以借助于squarify包来绘制,即squarify.plot函数。首 先,我们来看一下这个函数的语法及参数含义: squarify.plot(sizes, norm_x=100, norm_y=100, color=None, label=None, value=None, alpha, **kwargs) sizes:指定离散变量各水平对应的数值,即反映树地图子块的面积大 小; norm_x:默认将x轴的范围限定在0-100之内; norm_y:默认将y轴的范围限定在0-100之内; color:自定义设置树地图子块的填充色; label:为每个子块指定标签; value:为每个子块添加数值大小的标签;
https://www.doczj.com/doc/b915960909.html, alpha:设置填充色的透明度; **kwargs:关键字参数,与条形图的关键字参数类似,如设置边框色、 边框粗细等; 介绍完了绘图所需要的函数,先来抛一个树地图的效果图,该图反映的是 2017年8月中央财政收入的主要来源情况: 树地图的绘制 图中的数据来自《中华人民共和国财政部》官网,具体可以从2017年8月 财政收支情况 (https://www.doczj.com/doc/b915960909.html,/zhengfuxinxi/tongjishuju/201709/t20170911_269 5830.html)查看。 # 导入第三方包import matplotlib.pyplot as pltimport squarify#中文 及负号处理办法plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False# 创建数据name = ['国 内增值税','国内消费税','企业所得税','个人所得税', '进口增值税、 消费税','出口退税','城市维护建设税', '车辆购置税','印花税','资 源税','土地和房税','车船税烟叶税等']income = [3908,856,801,868,1361,1042,320,291,175,111,414,63] # 绘图 colors = ['steelblue','#9999ff','red','indianred', 'green','yellow','orange'] plot = squarify.plot(sizes = income, # 指定绘图数据label = name, # 指定标签 color = colors, # 指定自定义颜色 alpha = 0.6, # 指
如何快速学会Python_心得体会 一、什么是Python Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 二、Python的职位发展有哪些 Python全栈开发工程师(10k-20K)Python运维开发工程师(15k-20K)Python高级开发工程师(15k-30K)Python大数据工程师(15K-30K)Python机器学习工程师(15k-30K)Python架构师(20k-40k) 目前应用最多的:全栈开发、数据分析、运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得更远。 三、该如何学好Python 1、明确目标 其实很多人在学习Python之前很少想这个,因为很多人说:现在Python很火呀,所以我才需要学。这个其实跟你自己没有什么关系,例如:你曾经想做一个网站不会开发,现在可以做了,现在Python很火并且你也要学来找工作,未来Python很火,我具备了Python 的技能会不错。 所以我们首先要明确自己的目标,确定学习的决心,坚持自己的选择。 2、明确学习规划 ①.目前市场需求主流的岗位里,你得选择一个其中你目前看来可以学,并且最敢兴趣学习的方向; ②.在方向选择好后,对照招聘网站:拉勾、智联、Boss直聘等网站的岗位要求,进行学习内容的统计与大概的记录; ③.分模块的计划你学习这个模块的时间和完成的大概目标; ④.列出你可能出现的学习误差与为之准备的应对方案; 其实任何学习重要的不是有什么资料,核心是如何学,学多久,有没有时间限制,最关键的一点是在起步阶段,开始属于激情期,激情在前面释放越多,后面的持续力就很弱,好了这就是关于学习计划。 废话不多说,那我们来看看一个普适性的学习Python的流程; 1天——下载并安装好学习环境:到网站上下载一个python3.0以上的版本。我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等。 1周——下载一些python的学习文档,比如《简明Python教程》,《笨办法学Python》等等。通过学习语法,掌握python中的关键字语法,函数语法,数学表达式、变量、数据结构、语法等等等 1. 了解Python是什么,都能做些什么? 2. 知道什么是变量、算法、解释器 3. Python基本数据类型 4. 列表和元组的操作方法 5. 字符串操作方法 6. 基本的字典操作方法 7.任何知识它的基础知识都是有些枯燥的,现在我们就可以动手来做一些逻辑层面的东西了。掌握if、else、elif、while、for、continue、break和列表推导式等这些语句的使用,还有程序中的异常处理。 2周——看完基础后,就是做一些小项目巩固基础,python具备很好的交
Python 知识点整理 第一部分 算法 一、 概念 算法就是解决问题的方法和步骤,即解题步骤。 二、 算法的描述方法 (一) 自然语言:直接用语言叙述解题步骤。 (二) 流程图 1. 符号 2. 三大结构的流程图框架 (1) 顺序结构 (2) 分支结构 (3) 循环结构 直角矩形 运算过程(赋值等) 平行四边形 输入、输出 菱形 判断条件 箭头 程序的执行方向 圆角矩形 开始、结束
第二部分编程 一、变量 1.变量名可以包含的字符有:小写字母(a-z),大写字母(A-Z),数字(0-9), 下划线(_) 注意:不能以数字开头! 不能使用Python保留的关键字(彩色)! 下划线开头的名字有特殊含义! 2.变量的数据类型和数值都可以通过赋值运算改变。 二、数据类型 1.布尔型:表示真假的类型,取值仅包含True和False。 2.整型:整数。(496、5、10000000、95……) 把变量a转换成整数型:a=int(a) 3.浮点型:小数或用科学计数法表示的数字。 3.14159、5.91、1.0e8(1乘10的8次方,也可以写作100000000.0) 把变量a转换成浮点型:a=float(a) 4.字符串型:字符组成的序列。 ‘ab c d’、“ab c d”、’’’ ab c d’’’…… 把变量a转换成字符串型:a=str(a) 三、赋值运算(=) 用法:将等式右边赋值给等式左边。 a=7(将7赋值给a) b=a(将a赋值给b) 四、常见数值运算 1.加法(+) 2.减法(-) 3.乘法(*) 4.浮点除法(/)
5.整数除法(//) 6.求余数(%) 常用于判断是否能整除:余数为零,即可以整除。 7.幂指数(**) 3的4次方: 8.开平方 import math math.sqrt() 括号内为开平方的数值或变量。 9.变量a在原有数值上增加1(a+=1,即a=a+1) “-=”、“*=”、“/=”等运算符号组合的意义同理。 五、字符串运算 1.拼接(+) 2.复制 3.转义符 (1)换行符(\n) (2)制表符(\t):对齐文本 (3)引号(\’ 或\”):表示单、双引号,在字符串被相同引号包裹时使用
0、命令行常用命令 命令行(Windows下叫“命令提示符”,Mac下叫“终端”)里的常用命令。打开命令行,我们会看到每行前面都有诸如 C:\Documents and Settings\Crossin> 或者 MyMacBook:~ crossin$ 之类的。 这个提示符表示了当前命令行所在目录。 第一个常用的命令是: dir (windows环境下) ls (mac环境下) dir和ls的作用差不多,都是显示出当前目录下的文件和文件夹。 第二个常用命令是: cd 目录名 通过dir或ls了解当前目录的结构之后,可以通过“cd 目录名”的方式,进入到当前目录下的子目录里。 如果要跳回到上级目录,可以用命令: cd .. 另外,Windows下如果要写换盘符,需要输入 盘符: 比如从c盘切换到d盘C:\Documents and Settings\Crossin>d: 有了以上两个命令,就可以在文件目录的迷宫里游荡了。虽然没可视化的目录下的操作那么直观,但是会显得你更像个程序员。。。 于是乎,再说个高阶玩法:现在你可以不用idle那套东西了,随便找个顺手的文本软件,把你的代码写好,保存好,最好是保存成py文件。然后在命令行下进入到py文件保存的目录,使用命令:python 程序保存的文件名 就可以运行你写的程序了。 一、关于分号“;” 在C、Java等语言的语法中规定,必须以分号作为语句结束的标识。Python也支持分号,同样用于一条语句的结束标识。但在Python中分号的作用已经不像C、Java中那么重要了,Python中的分号可以省略,主要通过换行来识别语句的结束。 例如,以下两行代码是等价的:
Python基础 一、Python中数据类型 在Python中,能够直接处理的数据类型有以下几种: 一、整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。 二、浮点数 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,^9和^8是相等的。浮点数可以用数学写法,如,,,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,^9就是,或者,可以写成,等等。 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。 三、字符串 字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。 四、布尔值 布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。 布尔值可以用and、or和not运算。 and运算是与运算,只有所有都为True,and运算结果才是True。 or运算是或运算,只要其中有一个为True,or 运算结果就是True。 not运算是非运算,它是一个单目运算符,把True 变成False,False 变成True。 五、空值 空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。 此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到 打印输出 print语句可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下:>>> print 'hello, world'
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:print 'The quick brown fox', 'jumps over', 'the lazy dog' 在Python中,等号=就是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以就是不同类型得变量。变量本身类型不固定得语言称之为动态语言,与之对应得就是静态语言。 静态语言在定义变量时必须指定变量类型,如果赋值得时候类型不匹配,就会报错。 如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示。类似得,如果字符串包含",我们就可以用' '括起来表示:如果字符串既包含'又包含"怎么办?这个时候,就需要对字符串得某些特殊字符进行“转义”,Python字符串用\进行转义。 \n 表示换行 \t 表示一个制表符 \\ 表示\ 字符本身 如果一个字符串包含很多需要转义得字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r,表示这就是一个 raw 字符串,里面得字符就不需要转义了。如,r'\(~_~)/ \(~_~)/'。如果要表示多行字符串,可以用'''、、、'''表示 如果中文字符串在Python环境下遇到UnicodeDecodeError,这就是因为、py文件保存得格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*- print u'中文' 在Python中,布尔类型还可以与其她数据类型做and、or与not运算 直接用 [ ] 把list得所有元素都括起来,就就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list 索引从0 开始,也就就是说,第一个元素得索引就是0,第二个元素得索引就是1,以此类推。 因此,要打印第一名同学得名字,用L[0] 添加 list 得 append() 方法或者insert()方法 定位删除L、pop() 对list中得某一个索引赋值,就可以直接用新得元素替换掉原来得元素,list包含得元素个数保持不变。 缩进请严格按照Python得习惯写法:4个空格,不要使用Tab,更不要混合Tab与空格,否则很容易造成因为缩进引起得语法错误。if age >= 18: 要避免嵌套结构得if 、、、else 、、、,我们可以用 if 、、、多个elif 、、、else 、、、得结构,一次写完所有得规则 奇数加与for a in L: sum+=a x += 2 偶数不要if x%2==0: Continue dict得第一个特点就是查找速度快,无论dict有10个元素还就是10万个元素,查找速度都一样。而list得查找速度随着元素增加而逐渐下降。d={} d、get(x)可以取到d{}中key后面得value 个数len(s) s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for name,score in s: print name,':',score s、remove():s、add() 比较函数cmp(x,y) 如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数: def fn(*args): print args 可变参数得名字前面有个* 号,我们可以传入0个、1个或多个参数给可变参数 r、append(L[i]) 向r添加 对这种经常取指定索引范围得操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。 对应上面得问题,取前3个元素,用一行代码就可以完成切片: >>> L[0:3]
Python学习-Python数据处理实战 一、运行环境 1、python版本2.7.13博客代码均是这个版本 2、系统环境:win764位系统 二、需求对杂乱文本数据进行处理 部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字段,从数据库中聚合字段观察,乍一看数据比较规律,类似(币种金额万元)这样,我想着用sql写条件判断,统一转换为‘万元人民币’单位,用sql脚本进行字符串截取即可完成,但是后面发现数据并不规则,条件判断太多清洗质量也不一定,有的前面不是左括号,有的字段里面没有币种,有的数字并不是整数,有的没有万字,这样如果存储成数字和‘万元人民币’单位两个字段写sql 脚本复杂了,mysql我也没找到能从文本中提取数字的函数,正则表达式常用于where条件中好像,如果谁知道mysql有类似从文本中过滤文本提取数字的函数,可以告诉我哈,这样就不用费这么多功夫,用kettle一个工具即可,工具活学活用最好。 结合用python的经验,python对字符串过滤有许多函数稍后代码中就是用了这样的办法去过滤文本。 第一次部分清洗数据截图 三、对数据处理的宏观逻辑思考 拿到数据,先不要着急写代码,先思考清洗的逻辑,这点很关键,方向对了事半功倍,剩下的时间就是代码实现逻辑和调试代码的过程。 3.1思考过程不写代码: 我想实现的最终的数据清洗是将资金字段换算成【金额+单位+各币种】的组合形式或者【金额+单位+统一的人民币币种】(币种进行汇率换算),分两步或者三步都可以 3.1.1拆分出三个字段,数字,单位,币种
(单元分为万和不含万,币种分为人民币和具体的外币) 3.1.2将单位统一换为万为单位 第一步中单位不是万的数字部分/10000,是万的数字部分保持不变 3.1.3将币种统一为人民币 币种是人民币的前两个字段都不变,不是的数字部分变为数字*各外币兑换人民币的汇率,单位不变依旧是第二步统一的‘万’ 3.2期望各步骤清洗效果数据列举: 从这个结果着手我们步步拆解,先梳理清洗逻辑部分 3.2.1第一次清洗期望效果拆分出三个字段数字单位币种: ①字段值=“2000元人民币”,第一次清洗 2000不含万人民币 ②字段值=“2000万元人民币”,第一次清洗 2000万人民币 ③字段值=“2000万元外币”,第一次清洗 2000万外币 3.2.2第二次清洗期望效果将单位统一归为万: #二次处理条件case when单位=‘万’then金额else金额/10000end as第二次金额 ①字段值=“2000元人民币” 0.2万人民币 ②字段值=“2000万元人民币” 2000万人民币 ③字段值=“2000万元外币” 2000万外币 注意:如果上面达到需求则清洗完毕,如果想将单位换成人民币就进行下面三次清洗 3.2.3第三次清洗期望效果:单位币种都统一为万+人民币 如果最后需求是换算成币种统一人民币,那么我们就在二次清洗后的基础上再写条件就好,#三次处理条件case when币种=‘人民币’then金额else金额*币种和人民币的换算汇率end as第三次金额 ①字段值=“2000元人民币” 0.2万人民币 ②字段值=“2000万元人民币” 2000万人民币 ③字段值=“2000万元外币” 2000*外币兑换人民币汇率万人民币 四、对具体代码的宏观逻辑思考 币种和单位这两个就2种情况,很好写 4.1、币种部分 这个条件简单,如果币种的值在字符中出现就让新字段等于这个币种的值即可。 4.2、单位(万为单位) 这个条件也简单,万字出现在字符中单位这个变量=‘万’没出现就让单位变量等于‘不含万’,这样写是为了方便下一步对数字进行二次处理的时候写条件判断了。 4.3、数字部分确保清洗后和原值逻辑上一样做些判断