1.0、Python概述
目录
1.Python语言的发展史
2.Python语言的特点
3.Python下载与安装
4.开始使用python
1.Python语言的发展史
Python的作者,Guido von Rossum,确实是荷兰人。1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿。
在那个时候,他接触并使用过诸如Pascal、C、 Fortran等语言。这些语言的基本设计原则是让机器能更快运行。在80年代,虽然IBM和苹果已经掀起了个人电脑浪潮,但这些个人电脑的配置很低 (在今天看来)。比如早期的Macintosh,只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。所有的编译器的核心是做优化,以便让程序能够运行。为了增进效率,语言也迫使程序员像计算机一样思考,以便能写出更符合机器口味的程序。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。
然而,这种思考方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间 (即使他已经准确的知道了如何实现)。他的另一个选择是shell。Bourne Shell作为UNIX系统的解释器(interpreter)已经长期存在。UNIX的管理员们常常用shell去写一些简单的脚本,以进行一些系统维护的工作,比如定期备份、文件系统管理等等。shell可以像胶水一样,将UNIX下的许多功能连接在一起。许多C语言下上百行的程序,在shell下只用几行就可以完成。然而,shell的本质是调用命令。它并不是一个真正的语言。比如说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。
2.Python语言的特点
python是一种解释性、交互式、面向对象的跨平的语言。近年来,热持续上涨,人才需求量也祝年攀升,备受程序员的追捧。那么python语言的特点有哪些呢?我们下面来说一下。
Python语言主要有以下9个特点:
(1)简单易学
Python是一种代表简单主义思想的语言。阅读一个良好的 Python程序就感觉像是在读英语段落一样,尽管这个英语段落的语法要求非常严格。 Python最大的优点之一是具有伪代码的本质,它使我们在开发 Python程序时,专注的是解决问题,而不是搞明白语言本身。
(2)面向对象
Python既支持面向过程编程,也支持面向对象编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。
(3)可移植性
由于 Python的开源本质,它已经被移植在许多平台上。如果小心地避免使用依赖于系统的特性,那么所有 Python程序无需修改就可以在下述任何平台上运行,这些平台包括Lnux、Windows、 FreeBSD、 Macintosh、 Solaris、OS/2、Amiga、AROS、AS/400、Beos OS/390、Z/OS、 Palm OS、QNX、VMS、 Psion、 Acorn RISC OS、VxWorks、 PlayStation、 Sharp Zaurus、Windows CE,甚至还有 PocketPC、Symbian以及 Google基于Lnux开发的Android平台。
(4)解释性
一个用编译性语言如C或C++写的程序可以从源文件(即C或C++语言)转换到一个计算机使用的语言。这个过程通过编译器和不同的标记、选项完成。当运行程序的时候,连接转载器软件把程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于不再担心如何编译程序,如何确保连接转载正确的库等,这一切使得使用Python变得更加简单。由于只需要把Python程序复制到另外一台计算机上,它就可以工作了,这也使得Python程序更加易于移植。
(5)开源
Python是 FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝,阅读它的源代码,对它做改动,把它的一部分用于新的自由软件中。 FLOSS是基于一个团体分享知识的概念,这是为什么Python如此优秀的原因之一 ——它是由一群希望看到一个更加优秀的 Python的人创造并经常改进这的。
(6)高级语言
Python是高级语言。当使用 Python语言编写程序时,无需再考虑诸如如何管理程序使用的内存一类的底层细节。
(7)可扩展性
如果需要一段关键代码运行的更快或者希望某些算法不公开,就可以把部分程序用C或C语言编写,然后在 Python程序中使用它们。
(8)丰富的库
Python标准库确实很庞大,它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGl、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GU(图形用户界面)Tk和其他与系统有关的操作。记住,只要安装了 Python,所有这些功能都是可用的,这被称作 Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如 wXPython、 Twisted和Pyon图像库等。
(9)规范的代码
Python采用强制缩进的方式使得代码具有极佳的可读性。
3.Python下载与安装
安装软件需要3步:下载python、安装python、检查是否安装成功
1、下载Python
(1)python下载地址https://www.python.org/downloads/
(2)选择下载的版本
(3)点开Download后,找到下载文件
Gzipped source tarball 是Linux系统下载的版本
XZ compressed source tarball 是CentOS系统下载的版本
注意Linux和CentOS自带python,一般不用再下载python。
macOS 64-bit/32-bit installer:Mac电脑32位系统版本。
macOS 64-bit installer:Mac电脑64位系统
Windows x86-64:windows 64位操作系统版本。
Windows x86:windows 32操作系统版本。
embeddable zip file:解压安装。下载的是一个压缩文件,解压后即表示安装完成。
executable installer:程序安装。下载的是一个exe可执行程序,双击进行安装。
web-based installer:在线安装。下载的是一个exe可执行程序,双击后,该程序自动下载安装文件(所以需要有网络)进行安装
2、安装Python
(1)双击python-3.7.5-amd64.exe
(2)勾选 Add Python 3.7 to PATH,再点击Customize installation
Install now 默认安装且默认安装路径(一般默认安装在C盘)
Customize installation 自定义安装
Add Python 3.7 to PATH 自动加到环境变量中
(3)不知道的默认就可以了,点击next。
(4)更改安装地址(建议不安装C盘,如果C盘内存小安装的东西多了会很卡,当然内存大就无所谓了)
(5)安装过程
(6)安装成功
3、检查是否安装成功Python
出现这样内容,安装成功。
4、下载集成开发环境(IDE):PyCharm
PyCharm可以方便的编写python代码,拥有一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。
5、python环境变量
变量名 | 描述 |
PYTHONPATH | PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。 |
PYTHONSTARTUP | Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此变量指定的文件中的代码。 |
PYTHONCASEOK | 加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写. |
PYTHONHOME | 另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。 |
右击“此电脑”,选择属性
然后点击“高级系统设置”,弹出“系统属性”对话框
点击"环境变量”,选中“PATH“,点击”编辑“
查看自己电脑python的安装位置,我是安装在D盘python文件夹下
点击新建,输入自己电脑python安装位置,如图,我输入D:\python,点击”确定“即可
4.开始使用python
1.交互方式
(1)选择windows开始菜单,输入cmd,打开命令行控制台窗口,在命令行窗口输入Python命令,进入Python交互式解释器。以命令行的方式交互式的使用Python解释器。
(2)在windows下载安装完Python后,开始菜单中就有Python命令行菜单,选择该Python3.7(64-bit)菜单,可以直接进入Python交互式解释器使用模式。
2.代码文件方式
__main__.py 文件非常简单。
import runpy
# Change 'announce' to whatever module you want to run.
runpy.run_module('announce', run_name='__main__', alter_sys=True)
现在显然必须要处理依赖关系,但是如果你的脚本仅使用标准库或将依赖模块放在__main__.py 旁边(译注:即同级目录),那么就足够了!
执行一个压缩文件
如果你确实有多个文件和/或依赖模块,并且希望将所有代码作为一个单元发布,你可以用一个__main__.py ,放置在一个压缩文件中,并把压缩文件所在目录放在 sys.path 里,Python 会替你运行__main__.py 文件。
# 将一个压缩包传给 Python
python app.pyz
人们现在习惯上用 .pyz 文件扩展名来命名此类压缩文件,但这纯粹是传统,不会影响任何东西;你当然也可以用 .zip 文件扩展名。
为了简化创建此类可执行的压缩文件,标准库提供了zipapp [7]模块。它会为你生成__main__.py并添加一条组织行(shebang line),因此你甚至不需要指定 python,如果你不想在 UNIX 上指定它的话。如果你想移动一堆纯 Python 代码,这是一种不错的方法。
不幸的是,仅当压缩文件包含的所有代码都是纯 Python 时,才能这样运行压缩文件。执行压缩文件对扩展模块无效(这就是为什么 setuptools 有一个 zip_safe [8]标志的原因)。(译注:扩展模块 extension module,即 C/C++ 之类的非 Python 文件)
要加载扩展模块,Python 必须调用 dlopen() [9]函数,它要传入一个文件路径,但当该文件路径就包含在压缩文件内时,这显然不起作用。
3.代码风格
一致的命名
关于命名,遵循几条简单的准则就可以避免众多足以影响整个小组的麻烦。
推荐的命名规则
下面这些准则大多改编自 Pacoo 小组。
- 类名:
驼峰式
和首字母缩略词:HTTPWriter
优于HttpWriter
。 - 变量名:
lower_with_underscores
。 - 方法名和函数名:
lower_with_underscores
。 - 模块名:
lower_with_underscores.py
。(但是不带下划线的名字更好!) - 常量名:
UPPER_WITH_UNDERSCORES
。 - 预编译的正则表达式:
name_re
。
通常都应该遵循这些准则,除非要参照其他工具的命名规范,比如数据库 schema 或者消息格式。
还可以用 驼峰式
给类似类却不是类的东西命名。使用 驼峰式
的主要好处在于让人们以「全局名词」来关注某个东西,而不是看作局部标记或动词。值得注意的是,Python 给 True
,False
和 None
这些根本不是类的东西命名也是用 驼峰式
。
不要用前缀后缀
比如 _prefix
或 suffix_
。函数和方法名可以用 _prefix
标记来暗示其是「私有的」,但是最好只在编写预期会广泛使用的 API 以及用 _prefix
标记来隐藏信息的时候谨慎使用。
PEP8 建议使用结尾的下划线来避免与内置关键字重名,比如:
sum_ = sum(some_long_list) print(sum_) |
临时这样用也可以,不过最好还是选一个别的名字。
用 __mangled
这种双下划线前缀给类/实例/方法命名的情况非常少,这实际上涉及特殊的名字修饰,非常罕见。不要起 __dunder__
这种格式的名字,除非要实现 Python 标准协议,比如 __len__
;这是为 Python 内部协议保留的命名空间,不应该在其中增加自定义的东西。
不要用单字符名字
(不过)一些常见的单字符名字可以接受。
在 lambda
表达式中,单参数函数可以命名为 x
。比如:
encode = lambda x: x.encode("utf-8", "ignore") |
解包元组时可以用 _
丢弃不需要的标记。比如:
_, url, urlref = data |
意思就是说「忽略第一个元素」。
和 lambda
类似,在解析列表/字典/集合的时候,以及在生成器表达式或者一到两行的 for 循环中,可以使用单字符迭代标记。通常选择 x
,比如:
sum(x for x in items if x > 0) |
可以求 items
序列中所有正整数之和。
此外比较常见的是 i
,代表 index
,通常和内置的 枚举
一起使用。比如:
for i, item in enumerate(items): print("%4s: %s" % (i, item)) |
除却上述情形,要极少甚至避免使用单字符用作标记/参数/方法的名字。因为这样就无法用grep
进行检索了。
使用 self
及类似的惯例
应该:
- 永远将方法的第一个变量命名为
self
- 永远将
@classmethod
的第一个参数命名为cls
- 永远在变量参数列表中使用
*args
和**kwargs
不要在这些地方吹毛求疵
不遵循如下准则没有什么好处,干脆照它说的做。
永远继承自 object
并使用新式类
# bad class JSONWriter: pass # good class JSONWriter(object): pass |
对于 Python 2 来说遵循这条准则很重要。不过由于 Python 3 所有的类都隐式继承自 object
,这条准则就没有必要了。
不要在类中重复使用实例标记
# bad class JSONWriter(object): handler = None def __init__(self, handler): self.handler = handler # good class JSONWriter(object): def __init__(self, handler): self.handler = handler |
列表/字典/集合推导式优于 map/filter
# bad map(truncate, filter(lambda x: len(x) > 30, items)) # good [truncate(x) for x in items if len(x) > 30] |
尽管在大多数简单情况下最好使用解析表达式,不过有时候 map()
或者 filter()
可读性更佳,需要自己判断。
用圆括号 (...)
折行
# bad from itertools import groupby, chain, izip, islice # good from itertools import (groupby, chain, izip, islice) |
用圆括号 (...)
写 API 更利落
# bad response = Search(using=client) .filter("term", cat="search") .query("match", title="python") # good response = (Search(using=client) .filter("term", cat="search") .query("match", title="python")) |
函数调用中使用隐式行延续
# bad -- simply unnecessary backslash return set((key.lower(), val.lower()) for key, val in mapping.iteritems()) # good return set((key.lower(), val.lower()) for key, val in mapping.iteritems()) |
用 isinstance(obj, cls)
, 不要用 type(obj) == cls
因为 isinstance
涵盖更多情形,包括子类和抽象基类。同时,不要过多使用 isinstance
,因为通常应该使用鸭子类型!
用 with
处理文件和锁
with
语句能够巧妙地关闭文件并释放锁,哪怕是在触发异常的情况下。所以:
# bad somefile = open("somefile.txt", "w") somefile.write("sometext") return # good with open("somefile.txt", "w") as somefile: somefile.write("sometext") return |
和 None
相比较要用 is
None
值是一个单例,但是检查 None
的时候,实际上很少真的要在 左值上调用 __eq__
。所以:
# bad if item == None: continue # good if item is None: continue |
好的写法不仅执行更快,而且更准确。使用 ==
并不会更简洁,所以请记住本规则!
不要修改 sys.path
通过 sys.path.insert(0, "../")
等操作来控制 Python 的导入方法或许让人心动,但是要坚决避免这样做。
Python 有一套有几分复杂,却易于理解的模块路径解决方法。可以通过 PYTHONPATH
或诸如 setup.py develop
的技巧来调整 Python 导入模块的方法。还可以用 -m
运行 Python 得到需要的效果,比如使用 python -m mypkg.mymodule
而不是 python mypkg/mymodule.py
。代码能否正常运行不应依赖于当前执行 Python 的工作路径。David Beazley 用 PDF 幻灯片再一次扭转了大家的看法,值得一读,“Modules and Packages: Live and Let Die!”。
尽量不要自定义异常类型
…… 如果一定要,也不要创建太多。
# bad class ArgumentError(Exception): pass ... raise ArgumentError(url) # good raise ValueError("bad value for url: %s" % url) |
要知道 Python 引入了 丰富的内建异常类。值得充分利用。而且通过描述那些触发特定错误条件的字符串消息,来实例化这些异常类,就能达到「定制」的目的。在用户代码中抛出 ValueError
(参数错误),LookupError
(键错误)以及 AssertionError
(用 assert
语句)最为常见。
至于是否应该自己创建异常类有一个不错的经验法则,也就是搞清楚函数调用方每次调用函数之时是否都应该捕获该异常。如果是,那么的确应该自己创建异常类。不过这相当少见。关于这类明显不得不使用的自定义异常类有一个不错的例子,tornado.web.HTTPError。但是要留心 Tornado 是如何避免走极端的:框架或用户代码抛出的所有 HTTP 错误同属一个异常类。
短文档字符串应是名副其实的单行句子
# bad def reverse_sort(items): """ sort items in reverse order """ # good def reverse_sort(items): """Sort items in reverse order.""" |
把三引号 """
放在同一行,首字母大写,以句号结尾。四行精简到两行,__doc__
属性没有糟糕的换行,最吹毛求疵的人也会满意的!
文档字符串使用 reST
标准库和大多数开源项目皆是如此。Sphinx 提供支持,开箱即用。赶紧试试吧!Python requests
模块由此取得了极佳的效果。看看requests.api
模块的例子。
删除结尾空格
最挑剔也不过如此了吧,可是若做不到这一点,有些人可能会被逼疯。不乏能自动搞定这一切的编辑器;这是我用 vim 的实现。
文档字符串要写好
下面是在函数文档字符串中使用 Sphinx 风格的 reST 的快速参考:
def get(url, qsargs=None, timeout=5.0): """Send an HTTP GET request. :param url: URL for the new request. :type url: str :param qsargs: Converted to query string arguments. :type qsargs: dict :param timeout: In seconds. :rtype: mymodule.Response """ return request('get', url, qsargs=qsargs, timeout=timeout) |
不要为文档而写文档。写文档字符串要这样思考:
好名字 + 显式指明默认值 优于 罗嗦的文档 + 类型的详细说明 |
也就是说,上例中没有必要说 timeout
是 float
,默认值 5.0
,显然是 float
。在文档中指出其语义是「秒」更有用,就是说 5.0
意思是 5 秒钟。同时调用方不知道 qsargs
应该是什么,所以用 type
注释给出提示,调用方也无从知道函数的预期返回值是什么,所以 rtype
注释是合适的。
最后一点。吉多·范罗苏姆曾说过,他对 Python 的主要领悟是「读代码比写代码频率更高」。直接结论就是有些文档有用,更多的文档有害。
基本上只需要给预计会频繁重用的函数写文档。如果给内部模块的每一个函数都写上文档,最后只能得到更加难以维护的模块,因为重构代码之时文档也要重构。不要「船货崇拜」文档字符串,更不要用工具自动生成文档。
范式和模式
是函数还是类
通常应该用函数而不是类。函数和模块是 Python 代码重用的基本单元,还是最灵活的形式。类是一些 Python 功能的「升级路径」,比如实现容器,代理,描述符,类型系统等等。但是通常函数都是更好的选择。
或许有人喜欢为了更好地组织代码而将关联的函数归在类中。但这是错的。关联的函数应该归在模块中。
尽管有时可以把类当作「小型命名空间」(比如用 @staticmethod
)比较有用,一组方法更应该对同一个对象的内部操作有所贡献,而不仅仅作为行为分组。
与其创建 TimeHelper
类,带有一堆不得不引入子类才能使用的方法,永远不如直接为时间相关的函数创建 lib.time
模块。类会增殖出更多的类,会增加复杂性,降低可读性。
生成器和迭代器
生成器和迭代器是 Python 中最强大的特性 —— 应该掌握迭代器协议,yield
关键字和生成器表达式。
生成器不仅仅对要在大型数据流上反复调用的函数十分重要,而且可以让自定义迭代器更加简单,从而简化了代码。将代码重构为生成器通常可以在使得代码在更多场景下复用,从而简化代码。
Fluent Python 的作者 Lucinao Ramalho 通过 30 分钟的演讲,「迭代器和生成器: Python 之道」,给出了一个出色的,快节奏的概述。Python Essential Reference 和 Python Cookbook 的作者 David Beazley 有个深奥的三小时视频教程,「生成器:最后的前沿」,给出了令人满足的生成器用例的详细阐述。因为应用广泛,掌握这一主题非常有必要。
声明式还是命令式
声明式编程优于命令式编程。代码应该表明你想要做什么,而不是描述如何去做。Python 的函数式编程概览介绍了一些不错的细节并给出了高效使用该风格的例子。
使用轻量级的数据结构更好,比如 列表
,字典
,元组
和集合
。将数据展开,编写代码对其进行转换,永远要优于重复调用转换函数/方法来构建数据。
标准工具和项目结构
我们选择了一些「最佳组合」工具,以及像样的 Python 项目会用到的最小初始结构。
标准库
import datetime as dt
: 永远像这样导入datetime
dt.datetime.utcnow()
: 优于.now()
, 后者使用的是当地时间import json
: 数据交换的标准from collections import namedtuple
: 用来做轻量级数据类型from collections import defaultdict
: 用来计数/分组from collections import deque
: 快速的双向队列from itertools import groupby, chain
: 为了声明式风格from functools import wraps
: 用来编写合乎规范的装饰器argparse
: 为了构建「健壮的」命令行工具fileinput
: 用来快速构建易于和 UNIX 管道结合使用的工具log = logging.getLogger(__name__)
: 足够好用的日志from __future__ import absolute_import
: 修复导入别名
常见第三方库
python-dateutil
用来解析时间和日历pytz
用来处理时区tldextract
为了更好地处理 URLmsgpack-python
比 JSON 更加紧凑地编码futures
为了 Future/pool 并发原语docopt
用来快速编写一次性命令行工具py.test
用来做单元测试,与mock
和hypothesis
结合使用
本地开发项目框架
对所有的 Python 包和库而言:
- 根目录下不要有
__init__.py
:目录名用作包名! mypackage/__init__.py
优于src/mypackage/__init__.py
mypackage/lib/__init__.py
优于lib/__init__.py
mypackage/settings.py
优于settings.py
README.rst
用来给新手描述本项目;使用 rstsetup.py
用来构建简单工具,比如setup.py develop
requirements.txt
是为pip
准备的包依赖环境dev-requirements.txt
是为 tests/local 准备的额外的依赖环境Makefile
用来简化 (!!!) build/lint/test/run 步骤
另外,永远记得详细说明包依赖环境。
1.0、Python概述相关推荐
- Python入门到精通【精品】第一章 - Python概述
Python入门到精通[精品]第一章 - Python概述 1. Python语言历史 2. Python语言特点 3. Python的下载和安装 3.1. Python的下载 3.2. Python ...
- 深入正则表达式(0):正则表达式概述
正则表达式简介 正则表达式(regular expression,在代码中常简写为regex.regexp或RE),又称正规表示式.正規表示法.正規運算式.規則運算式.常規表示法,是计算机科学的一个概 ...
- 第三章 嵌入式Python概述(三)
文章目录 第三章 嵌入式Python概述(三) 使用 SQL 使用Globals 一起使用 ObjectScript 和 Python 创建混合 InterSystems IRIS 类 在 Pytho ...
- Python程序设计基础第一章笔记:Python概述
Python程序设计基础笔记 目录 Python程序设计基础笔记 第一章:python概述 1.1 python是这样一种语言 1.2 python版本之争 略 1.3 python编程规范与代码优化 ...
- python中var是什么变量_一、 Python概述、变量
一. Python概述 1.python是一门面向对象,解释型的脚本语言.语法简洁,编写效率高,但是执行(底层运行)效率低(总的来说解释语言执行效率低于编译语言). 注意:本博客所有的代 ...
- python001 一,Python 入门技巧、Python概述及环境准备
Python概述 python的简介: python在1991年发行第一个公开版 python版本:python2.x-----------------python3.x python 命令tab补全 ...
- ppt android sdk,《0.AndroidSDK概述.ppt
<0.AndroidSDK概述 Eclipse的安装 Eclipse下载完成后解压即可. 注意事项:解压路径中最好不要带有中文路径,最好不要带用空格的路径 Evaluation only. Cr ...
- Q96:PT(3):基于噪声的纹理(Noise-Based Textures)(0)——概述
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- selenium win7+selenium2.0+python环境搭建
win7+selenium2.0+python环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是python 2.7(selenium之 ...
- Internet Information Services 5.0 技术概述(转)
Internet Information Services 5.0 技术概述 操作系统 白皮书 摘要 本白皮书为信息技术专业人员,提供随 Microsoft Windows 2000 提供的 Inte ...
最新文章
- 【Harvest源码分析】GetFourZeroCrossingIntervals函数
- css使用1-搜狐浏览器和chrome浏览器不同点记录
- 女程序媛面试总结:我是这样脱颖而出的
- keras手写数字识别--入门
- LeetCode(38)——报数(JavaScript)
- Directionally Localized Anti-Aliasing
- InDesign(拼合预设转曲)
- 移动芯片巨头英国ARM的发展史
- ⚡【图像描述】pytorch_image_caption
- 矩阵论极简笔记(1):如何降维度打击
- 2022年机修钳工(中级)考试题库及模拟考试
- 如何在Mac电脑中卸载软件?Mac电脑卸载软件方法汇总
- 华为S9300核心交换机链路聚合配置实例
- 如何设置锚点居页面顶部距离
- Linux运维后台进程管理之Supervisor配置和常用命令常见问题案例和管理odoo后台进程
- linux发送http请求
- Gradle下载spring包出现Received status code 401 from server: Unauthorized
- matlab (k),MATLAB的sgolay(k,f)的Python等价物是什么?
- 计算机在识字教学中的应用,运用多媒体教学,提高识字效率
- cad和mysql_什么是cad
热门文章
- 使用EditPlus技巧,提高工作效率(附英文版、自动完成文件、语法文件下载)(转载)...
- CSS常用函数补充(var、clac、blur、gradient)
- Java中常见的30道例题(附代码)
- FlashBuilder精选插件
- 主成分分析实战篇:南极考察站检测数据降维
- 曾国藩:一勤天下无难事(五勤)
- [翻译] Dremel made simple with Parquet
- AMI CORE8 OEM BIOS
- oracle12c cdb修改,Oracle 12C CDB字符集修改
- OpenCV入门教程之开发环境搭建(Android、C/C++、Python)