本文目录一览:
- 1、Python笔记-取模运算%
- 2、Python笔记:Python装饰器
- 3、Python该怎么入门?
- 4、Python笔记——'utf-8' codec can't decode byte 0xc5 in position 0: invalid continuation byte
- 5、Python笔记之input和变量赋值
Python笔记-取模运算%
对于该算术运算符: % ,取模运算存在如下定理:
对于一个正整数 而言,一定存在等式 ,代表 可以被拆分成最多 个 并且余下一个 ,此时称 。
例如:正整数 17,存在等式 17 = 3 * 5 + 2,即 17 % 5 = 2.
这里介绍一下数学中的一种运算, 取余运算 。
两者在对正整数的运算中完全没有区别,但是对于负整数的运算,则会存在一定的区别。
但是要记住下面这句话,就可以很好的进行区分:
取余公式中的k要向0靠拢,也就是如果大于等于0,那就要向下取整;如果小于0,那就要向上取整。
取模公式中的k要向负无穷靠拢,不管什么情况,都是向下取整。
或者是
向上取整 math.ceil() 可以理解成 要选择大于等于该数值的整数部分的最小整数;
向下取整 math.floor() 可以理解成 要选择小于等于该数值的整数部分的最大整数。
也就是:
下面做些实际运算,加深一下印象:
Python笔记:Python装饰器
装饰器是通过装饰器函数修改原函数的一些功能而不需要修改原函数,在很多场景可以用到它,比如① 执行某个测试用例之前,判断是否需要登录或者执行某些特定操作;② 统计某个函数的执行时间;③ 判断输入合法性等。合理使用装饰器可以极大地提高程序的可读性以及运行效率。本文将介绍Python装饰器的使用方法。
python装饰器可以定义如下:
输出:
python解释器将test_decorator函数作为参数传递给my_decorator函数,并指向了内部函数 wrapper(),内部函数 wrapper() 又会调用原函数 test_decorator(),所以decorator()的执行会先打印'this is wrapper',然后打印'hello world', test_decorator()执行完成后,打印 'bye' ,*args和**kwargs,表示接受任意数量和类型的参数。
装饰器 my_decorator() 把真正需要执行的函数 test_decorator() 包裹在其中,并且改变了它的行为,但是原函数 test_decorator() 不变。
一般使用如下形式使用装饰器:
@my_decorator就相当于 decorator = my_decorator(test_decorator) 语句。
内置装饰器@functools.wrap可用于保留原函数的元信息(将原函数的元信息,拷贝到对应的装饰器函数里)。先来看看没有使用functools的情况:
输出:
从上面的输出可以看出test_decorator() 函数被装饰以后元信息被wrapper() 函数取代了,可以使用@functools.wrap装饰器保留原函数的元信息:
输出:
装饰器可以接受自定义参数。比如定义一个参数来设置装饰器内部函数的执行次数:
输出:
Python 支持多个装饰器嵌套:
装饰的过程:
顺序从里到外:
test_decorator('hello world') 执行顺序和装饰的过程相反。
输出:
类也可以作为装饰器,类装饰器主要依赖__call__()方法,是python中所有能被调用的对象具有的内置方法(python魔术方法),每当调用一个类的实例时,__call__()就会被执行一次。
下面的类装饰器实现统计函数执行次数:
输出:
下面介绍两种装饰器使用场景
统计函数执行所花费的时间
输出:
在使用某些web服务时,需要先判断用户是否登录,如果没有登录就跳转到登录页面或者提示用户登录:
--THE END--
Python该怎么入门?
作为初学者,第一个月的月目标应该是这样的:
熟悉基本概念(变量,条件,列表,循环,函数)
练习超过 30 个编程问题
利用这些概念完成两个项目
熟悉至少 2 个框架
开始使用集成开发环境(IDE),Github,hosting,services 等
整体计划
现在,我们先将月计划细化成周计划。
第一周:熟悉 Python
要积极探索 Python 的使用方法,尽可能多的完成下面这些任务:
第一天:基本概念(4 小时):print,变量,输入,条件语句
第二天:基本概念(5 小时):列表,for 循环,while 循环,函数,导入模块
第三天:简单编程问题(5 小时):交换两个变量值,将摄氏度转换为华氏温度,求数字中各位数之和,判断某数是否为素数,生成随机数,删除列表中的重复项等等
第四天:中级编程问题(6 小时):反转一个字符串(回文检测),计算最大公约数,合并两个有序数组,猜数字游戏,计算年龄等等
第五天:数据结构(6 小时):栈,队列,字典,元组,树,链表。
第六天:面向对象编程(OOP)(6 小时):对象,类,方法和构造函数,面向对象编程之继承
第七天:算法(6 小时):搜索(线性和二分查找)、排序(冒泡排序、选择排序)、递归函数(阶乘、斐波那契数列)、时间复杂度(线性、二次和常量)
通过第一周时间,python大致能熟悉了,自学能力稍微弱一点找人带下你,节约自己的时间。
注意:别急着安装 Python 环境!
这看起来很矛盾,但是你一定要相信我。我有几个朋友,他们因为语言工具包和 IDE 安装的失败而逐渐失去了学习下去的欲望。因此,我的建议是先使用一些安卓 app 来探索这门语言,如果你是个技术小白,安装 Python 环境可不是你的首要任务。
第二周:开始软件开发(构建项目)
接下来,让我们朝着软件开发任务进军吧!不妨尝试综合你学到的知识完成一个实际的项目:
第一天:熟悉一种 IDE(5 小时): IDE 是你在编写大型项目时的操作环境,所以你需要精通一个 IDE。在软件开发的初期,我建议你在 VS code 中安装 Python 扩展或使用 Jupyter notebook。
第二天:Github(6 小时):探索 Github,并创建一个代码仓库。尝试提交(Commit)、查看变更(Diff)和上推(Push)你的代码。另外,还要学习如何利用分支工作,如何合并(merge)不同分支以及如何在一个项目中创建拉取请求(pull request)。
第三天:第一个项目——简单计算器(4 小时):熟悉 Tkinter,创建一个简单的计算器
第四、五、六天:个人项目(每天 5 小时):选定一个项目并完成它。如果你不知道你该做什么,可以查看下面的清单( pythonprojects -for-an- middle - programmer/answer/jhankar - mahbub2)
第七天:托管项目(5 小时):学习使用服务器和 hosting 服务来托管你的项目。创建一个 Heroku 设置并部署你构建的应用程序。
为什么要写项目?
如果仅仅按部就班地学习课堂上或视频中的内容,你无法拥有独立思考能力。所以,你必须把你的知识应用到一个项目中。当你努力寻找答案时,你也在慢慢地学会这些知识。
第三周:让自己成为一名程序员
第 3 周的目标是熟悉软件开发的整体过程。你不需要掌握所有的知识,但是你应该知道一些常识,因为它们会影响你的日常工作。
第一天:数据库基础(6 小时):基本 SQL 查询(创建表、选择、Where 查询、更新)、SQL 函数(Avg、Max、Count)、关系数据库(规范化)、内连接、外连接等
第二天:使用 Python 数据库(5 小时):利用一种数据库框架(SQLite 或 panda),连接到一个数据库,在多个表中创建并插入数据,再从表中读取数据。
第三天:API(5 小时):如何调用 API。学习 JSON、微服务(micro-service)以及表现层应用程序转换应用程序接口(Rest API)。
第四天:Numpy(4 小时):熟悉 Numpy(- Numpy -for- datascies-beginners-b8088722309f)并练习前 30 个 Numpy 习题(- 100/blob/master/100_numpy_excercises.md)
第五、六天:作品集网站(一天 5 小时):学习 Django,使用 Django 构建一个作品集网站(- start-with-django -1/),也要了解一下 Flask 框架。
第七天:单元测试、日志、调试(5 小时):学习单元测试(PyTest),如何设置和查看日志,以及使用断点调试。
真心话时间(绝密)
如果你非常「疯狂」,并且非常专注,你可以在一个月内完成这些任务。你必须做到:
把学习 Python 作为你的全职活动。你需要从早上 8 点开始学习,一直到下午 5 点。在此期间,你可以有一个午休时间和茶歇时间(共 1 小时)。
8 点列出你今天要学的东西,然后花一个小时复习和练习你昨天学过的东西。
从 9 点到 12 点:开始学习,并进行少量练习。在午饭后,你需要加大练习量,如果你卡在某个问题上,可以在网上搜索解决方案。
严格保持每天 4-5 小时的学习时间和 2-3 小时的练习时间(每周最多可以休息一天)。
你的朋友可能会认为你疯了。走自己的路,让别人去说吧!
如果你有一份全职工作,或者你是一名学生,完成这些流程可能需要更长的时间。作为一名全日制学生,我花了 8 个月的时间来完成这份清单。现在我是一名高级开发人员。所以,不管花多长时间,一定要完成它们。要想成功完成一个目标,必须付出百分之百的努力。
第四周:认真考虑工作(实习)问题
第 4 周的目标是认真思考如何才能被录用。即使你现在不想找工作,你也可以在探索这条道路的过程中学到很多东西。
第一天:准备简历(5 小时):制作一份一页的简历。把你的技能总结放在最上面,必须在写项目的同时附上 Github 链接。
第二天:作品集网站(6 小时):写几个博客,将它们添加到你之前开发的作品集网站中。
第三天:LinkedIn 简介(4 小时):创建一个 LinkedIn 个人简介,把简历上的所有内容都放到 LinkedIn 上。
第四天:面试准备(7 小时):准备一些谷歌常见的面试问题,练习白皮书中的 10 个面试编程问题。在 Glassdoor、Careercup 等网站中查看前人遇到的面试问题。
第五天:社交(~小时):走出房门,开始参加聚会、招聘会,与其他开发人员和招聘人员见面。
第六天:工作申请(~小时):搜索「Python Job」,查看 LinkedIn Job 和本地求职网站。选择 3 个工作岗位并发送工作申请。为每个工作定制你的简历。在每个工作要求中找出 2 到 3 件你不知道的事情,并在接下来的 3-4 天里学会它们。
第七天:在拒绝中学习(~小时):每次你被拒绝的时候,找出两件为了获得这份工作你应该知道的事情,然后花 4-5 天 的时间来掌握它们。这样,每次拒绝都会让你成为更好的开发人员。
Python笔记——'utf-8' codec can't decode byte 0xc5 in position 0: invalid continuation byte
在读取数据时出现如下
'utf-8' codec can't decode byte 0xc5 in position 0: invalid continuation byte
该报错说明csv文件不是utf-8编码形式,有两种方法可以解决。
一种是改变csv文件的编码,可以用记事本打开csv文件再将其另存为utf-8编码形式并覆盖原文件。
另一种方法是先查看csv文件是什么编码,我的csv文件为ANSI编码,然后再添加参数encoding='ANSI'。
Python笔记之input和变量赋值
在Python中,默认所有正确的语法,包括标点符号都是【英文】,若输入了中文标点,则会报错【syntaxError:invalid syntax】(语法错误:无效语法)
Print() 打印内容
1. 输出显示数字:print(0),结果是0
2. 输出显示运算:print(1+1),结果是2
3. 输出任意内容,只要用单引号'括起来即可:print('牛'),结果是牛
4. 若碰到输出的内容,比如英文里有单引号的,则两种方法:
4.1 使用双引号括"起来即可:print("Let's go!"),结果是Let's go!
4.2 使用转义字符\': print('Let\'s go!')
5. 若输出的内容里,需要换行,则有两种方法:
5.1 需要用到三引号'''括起来即可:print('''第一行
第二行''')
结果如下:
第一行
第二行
5.2 使用转义字符:\n
Print("第一行\n第二行")
######延伸########
转义字符的用法:反斜杠+想要实现的转义功能首字母
eg:\n: newline 换行
\b: backspace 退格
\r: return 回车
常用的转义字符总结如下所示:
变量:
命名规范:
• 只能是一个词;
• 只能包含字母、数字和下划线;
• 不能以数字开头;
• 尽量描述包含的数据内容;
• 不要使用python函数名或关键字;
赋值符号 = 不是左边等于右边的意思,而是把右边的内容放到左边的盒子里,盒子也是有容量大小之分的,且有后来者居上的特性;
Eg: a=2 表示将2放到a这个盒子里;
a==2 表示a等于2