python自定义修饰器_Python概述
#Version 3.0
本章主要解决:为什么学Python,Python是什么样的语言,怎么学Python,怎样做老庄才给你及格或优秀。
一、为什么学Python
学习编程要比学习英语更重要,因为编程语言可以影响全球70亿人。——苹果CEO库克
以下是学习Python的4个理由:
1.1.数据科学和机器学习
Python拥有最好的机器学习和数据科学库集合,如TensorFlow,Scikit-Learn,Keras,Pandas等,因此Python成为数据科学和机器学习的首选语言。
机器学习的发展在过去的几年中是惊人的,Python是唯一能让它变得简单的主要编程语言。
1.2.网站开发
优质的开发是学习Python的另一个原因。它提供了许多好的库和框架,例如Django和Flask使Web开发变得非常简单。Python也被用于网络爬虫。像Reddit这样互联网上的一些流行网站是使用Python构建的。
1.3.简便
这是初学者学习Python的最大原因。当第一次开始编程时,任何人肯定不希望从严格语法和奇怪规则的编程语言开始。
Python既可读又简单,安装也方便,只需安装Python就可以了。安装它时还会要求你在PATH中添加Python,这意味着你可以从计算机上的任何位置运行Python。
1.4.薪水
Python开发人员是收入最高的开发人员之一,特别是在数据科学,机器学习和Web开发方面。
二、Python语言特点
2.1 Python是一门跨平台、开源、免费的解释型高级动态编程语言。
解释型语言与编译型语言
编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的.exe文件,可执行程序里面包含的就是机器码。其编译好的代码不能在其他平台运行,譬如Windows的exe文件就不能在Linux下运行,即不能跨平台。
解释型语言几乎都能跨平台。对于解释型语言,每次执行程序都需要解释器将源代码转换成机器码,然后执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。官方会针对不同的平台开发不同的解释器,所以跨平台;每次都转换,所以性能不高。
跨平台
跨平台概念是软件开发中一个重要的概念,即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。
开源、免费
开源软件是指公开源代码的软件。开源软件在发行的时候会附上软件的源代码,并授权允许用户更改、传播或者二次开发。
免费软件就是免费提供给用户使用的软件,但是在免费的同时,通常也会有一些限制,比如源代码不公开,用户不能随意修改、不能二次发布等。
QQ、微信和抖音等免费不开源;最大的开源软件公司 Redhat 被 IBM 收购,卖了 340 亿美元。Redhat 虽然提供免费的 Linux 发行版(当然也有收费的版本),但是当使用者遇到技术障碍,或者想升级硬件的时候,Redhat 可以提供付费支持。
2.2 Python支持多种编程范式
编程范式是计算机编程的基本风格。有五种主要的范式:命令式编程(Imperative programming)、声明式编程(Declarative programming)、函数式编程(Functional Programming,被认为是声明式范式的子集)、面向对象编程(OOP,Object Oriented Programming)和面向方面编程(AOP、Aspect Oriented Programming)。
命令式编程(过程式编程): 专注于“如何去做”,这样不管“做什么”,都会按照你的命令去做。命令式编程关心解决问题的步骤。
Python :
L = [1, 2, 3, 4, 5]
sum = 0
for x in L:
sum += x
声明式编程:专注于“做什么”而不是“如何去做”。在更高层面写代码,更关心的是目标,而不是底层算法实现的过程。如CSS、正则表达式、SQL语句和HTML等。
SQL:
SELECT * FROM collection WHERE num > 5
函数式编程(作者也认为是声明式范式的子集):把运算过程尽量写成一系列嵌套的函数调用。函数式编程强调没有“副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
Python:
L = [1, 2, 3, 4, 5]
sum = reduce(lambda x, y: x + y, L)
面向对象:面向对象是相对于面向过程(命令式编程)来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向对象编程针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
Python:
class Car(object): #定义一个类,派生自object类
def infor(self): #定义成员方法
print("This is a car")
AOP是OOP的延续,AOP带来了新的编程革新。使得软件设计更加细化,代码的编写顺序不再决定其运行顺序,诞生动态组件概念,可以实现软件编写和运行的最大灵活性。AOP是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。与OOP设计思想在目标上有着本质的差异。OOP面向名词领域,AOP面向动词领域。AOP主要的意图是将日志记录、性能统计、安全控制、事务处理和异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,希望可以将它们独立到非业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
Python:
def before(func): #定义修饰器
def wrapper(*args, **kwargs):
print('Before function called.')
return func(*args, **kwargs)
return wrapper
@before
def test(): #使用修饰器改造函数
print(3)
test() #调用被修饰的函数
2.3 胶水语言
可以把多种不同语言(C、C++、Java、C#等)编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。
以Jython为例,Jython是Python的Java实现。
复制
http://search.maven.org/remotecontent?filepath=org/python/jython-standalone/2.7.1/jython-standalone-2.7.1.jar
到浏览器地址栏,下载jython-standalone-2.7.1.jar,存在D:\PythonCoding目录。
运行
java -jar D:\PythonCoding\jython-standalone-2.7.1.jar
如下图。
https://www.jython.org/是jython的官网,上面有Java调Python和Python调用Java的例子。
2.4 版本不兼容。
Python目前存在2.x和3.x两个系列的版本,互相之间不兼容。
Python 2.x系列已于2020年全面放弃维护和更新。
三、Python编程规范
3.1 缩进
类定义、函数定义、选择结构、循环结构、with块,行尾的冒号表示缩进的开始。
python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。
同一个级别的代码块的缩进量必须相同。
一般而言,以4个空格为基本缩进单位。
3.2 每个import语句只导入一个模块,最好按标准库、扩展库、自定义库的顺序依次导入。
3.3 尽量不要写过长的语句。
如果语句过长,可以考虑拆分成多个短一些的语句,以保证代码具有较好的可读性。如果语句确实太长而超过屏幕宽度,最好使用续行符(line continuation character)“\”,或者使用圆括号将多行代码括起来表示是一条语句。
3.4 注释
以符号#开始,表示本行#之后的内容为注释。
包含在一对三引号'''...'''或"""..."""之间且不属于任何语句的内容将被解释器认为是注释。
四、知行合一
4.1 开发环境安装
进入 https://www.python.org/downloads/ 网站,
点击Python 3.7.5,进入 https://www.python.org/downloads/release/python-375/ ,在页面下方找到
点击Windows x86-64 embeddable zip file下载64位的ZIP文件,解压到D:\PythonCoding\Python64.3.7.5(可以修改),这个目录就是Python的安装目录。
然后配置环境变量
1、右击此电脑,2、从弹出菜单中选择属性,3、点击高级系统设置,4、点击环境变量,5、点击新建(如果已有Path变量,则点击编辑)并编辑内容Path内容为D:\PythonCoding,6、点击确定以及剩下3个对话框的确定。
4.2 编写Hello World验证开发环境
弹出
输入Python敲回车,得到如下结果,说明配置正确。
继续在>>>后输入print("Hello World!"),敲回车得到如下结果。
最后是Python下载安装配置视频。
5 Python库的安装
5.1 安装pip
Python库安装工具常用的有pip和conda,本课程主要用pip,pip全称为Package Installer for Python 。丰富的第三方支持库是Python功能强大的原因之一。在使用Python实现功能时,往往需要依赖第三方支持库,这些第三方库需要先安装再使用。安装方法是通过Pip或Conda工具,在命令行输入命令:
pip install 库名
为了pip install 安装命令能顺利执行,我们先要安装pip。
安装pip先要下载get-pip.py,文件地址如下:https://bootstrap.pypa.io/get-pip.py,复制文件地址到浏览器(我用的是Google Chrome)地址栏,
右击鼠标,得如下图:
点击另存为,选择Python3.7.5安装目录
点击保存。
在命令提示符窗口输入命令:
先进入get-pip.py文件目录
cd D:\PythonCoding\Python64.3.7.5
再输入命令安装pip
python get-pip.py
结果如下图。
找到D:\PythonCoding\Python64.3.7.5目录下python37._pth文件用记事本打开,将# import site前的#号删除,保存退出。
将D:\PythonCoding\Python64.3.7.5\Scripts添加到环境变量Path中。运行pip,如下图。
5.2 通过pip安装库
例如安装numpy。
pip install numpy
pip安装软件包需要pip安装源。国外的源下载速度太慢,经常出现下载安装出错。所以把pip安装源替换成国内镜像,可以大幅提升下载速度和安装成功率。
国内镜像有(此处列举3个):
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple
笔者将pip安装源配置为https://pypi.douban.com/simple
pip config set global.index-url https://pypi.douban.com/simple
执行结果为Writing to C:\Users\jooner\AppData\Roaming\pip\pip.ini。将配置信息写入pip.ini文件。
此后执行pip install 库名,将会从https://pypi.douban.com/simple下载安装文件和信息。
5.3 库的使用
库有标准库、扩展库、自定义库。标准库是内置库,无须安装,如Tkinter、math等,扩展库没有内置,需要安装,如numpy,安装命令如pip install numpy。
在库的使用方面,Python也与其他编程语言一样,需要先导入再使用,语法是:
import 库名
import之后就能正常使用库的资源了。
>>> import math #导入标准库math
>>> math.sin(0.5) #求0.5(单位是弧度)的正弦
0.479425538604203
如果库名较长,还可以使用:
import 库名 as 别名
设定别名之后,通过别名也能够使用库的资源。
>>> import os.path as path #导入os.path,并设别名为path
>>> path.isfile(r'C:\windows\notepad.exe')
True
要使用库里的某个类,可以通过“库名.类名”的方法调用。如果认为这样写麻烦,或者导致单行语句太长,可以在导入时使用:
from 库名 import 类名
这样就可以在代码中直接使用类名了。
>>> from math import sin #只导入模块指定对象,速度略快
>>> sin(3)
0.1411200080598672
6 作业
6.1 下载、安装Python开发环境编写Hello World程序
6.2 引入模块编写程序求最小公倍数
6.3 测试
7 课程考核
7.1 考勤(10%)、通过金课坊http://jcet.jinkefang.cn
7.2 作业(30%)、通过金课坊http://jcet.jinkefang.cn
7.3 每章客观题考试(30%)、通过金课坊http://jcet.jinkefang.cn
7.4 期末考试(30%)、通过金课坊http://jcet.jinkefang.cn
直播:金课坊或腾讯直播
学习材料:金课坊http://jcet.jinkefang.cn+新安乌篷船公众号
附录
1、命令式编程与声明式编程
一个小故事
早上刚上班,老大找到张大胖说:“大胖啊,给你交代个事儿,我们今天中午要聚餐,软件园旁边有几家餐馆,九头鸟,大鸭梨,巫山烤全鱼,你到大众点评上挨个调查下,也可以问问去吃过的同事,看看哪家的口碑好,预定个大桌,我们有14个人,然后用滴滴约4辆车,每辆车坐3-4个人,记住啊我们会在11点半出发。“
大胖遵循老大的命令,赶紧上网看点评,问同事,打电话预定座位,用滴滴约车,最后顺利的完成了任务。
如果老大是程序员,大胖是计算机的话,老大用的就是命令式的编程风格,指令清晰,面面俱到。在什么时间,做什么事情,怎么做,描述的非常清楚。
大胖这个计算机只需要遵循指令一步步完成即可,执行过程中也可能出现异常,例如餐馆爆满,订不上座位,那这段程序就要退出,因为没有异常处理。
实际上,老大肯定是不会这么费心的,一般是这样:
早上刚上班,老大找到张大胖说:“大胖啊,给你交代个事儿,我们今天中午要聚餐,你在软件园旁边找个好点的餐馆,我们14个人,11点半出发”。
这就是声明式的编程风格,老大不会说具体怎么做(How),只会描述要干什么事儿(What),剩下的具体步骤需要大胖去完成。
————————————————
版权声明:本文为CSDN博主「码农翻身」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/coderising/article/details/100021262
python自定义修饰器_Python概述相关推荐
- python函数修饰器_Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
- python类修饰器_Python 中使用类修饰器修饰类方法如何处理 self?
这个是装饰器类. class PostCache: def __init__(self, func): self.func = func self.redis = redis.StrictRedis( ...
- python中修饰器_python 中的修饰器
参考文章 @property和@ .setter的用法: @property 把属性装饰成get方法 给属性赋值时,会自动调用@property装饰的方法 只设置属性的@property 时,属性为只 ...
- 图解Python多修饰器时哪个先起作用
修饰器本质上是一个函数,它接收一个函数作为参数并返回一个修饰过的新函数,一般来说不会改变函数的功能,只是在外围增加一些辅助性的检查或小功能. 在拙作<Python程序设计开发宝典>中有下面 ...
- python修饰器_python设计模式之修饰器模式
python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...
- python 修饰器_python中用修饰器进行异常日志记录
当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码.比如我需要记录抛出的异常: 在log_exception.py文件中, import functools import loggi ...
- python修饰器_python修饰器
转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 文章先由stackoverflow上面的一个问题引起吧,如果使 ...
- python类修饰器_《Python有什么好学的》之修饰器
"Python有什么好学的"这句话可不是反问句,而是问句哦. 主要是煎鱼觉得太多的人觉得Python的语法较为简单,写出来的代码只要符合逻辑,不需要太多的学习即可,即可从一门其他语 ...
- Python使用修饰器强制函数只接收关键参数
前面发过一篇文章介绍了单独一个星号或斜线作为函数参数的含义,请查看:Python函数中单独一个星号或斜线作为形参的含义 如果需要强制函数的所有参数都必须以关键参数形式进行传值,可以在定义函数时把单独一 ...
最新文章
- php laravel用的多不,php-Laravel多个可选参数不起作用
- 图灵访谈系列之一:陈世欣谈产品经理与社区
- hashlist java_java中集合类HashSet、ArrayList、LinkedList总结
- Python 梯度下降法
- 免费下载精美网站模板的25个网站推荐
- Quartz.NET总结(四)Quartz 远程调度
- 实例分析objdump反汇编用法
- 从资源池和管理的角度理解物理内存
- 产品经理处理问题“五步法”模板
- python分布式多进程框架 Ray
- VUE-CLI可选的配置文件vue.config.js
- I/O多路复用技术(select/poll/epoll)
- 卡尔曼滤波估matlab算法,INS-matlab 利用卡尔曼滤波算法估计惯导系统状态量的源代码~谢谢分享 - 下载 - 搜珍网...
- [RK3399][Android7.1] 调试笔记 --- CPU的serial number读取
- 计算机vb题库程序代码编写,11计算机专业VB试题(二)
- Java定时任务,定时执行某个操作
- Node.js连接数据库等操作
- MATLAB矩阵的平均值和最大值
- 机器学习(周志华)课后习题
- Java读取图片 cmyk转rgb
热门文章
- 邮箱smtpserver及port收集
- 使用 Core Graphics 绘制基本形状
- 第二十七篇、使用MVVM布局页面
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...
- 关于ireport制作报表模版时的一些注意
- [Web开发] 微软的RSS协议扩展 - FeedSync 介绍 (2)
- ZZULIOJ 1121: 电梯
- 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
- 信息学奥赛一本通 1128:图像模糊处理 | OpenJudge NOI 1.8 13:图像模糊处理
- 信息学奥赛一本通 1083:计算星期几 | OpenJudge NOI 小学奥数 7831